🧾 درس 86: دادهی JSON
زبانی که اپها و دستگاهها با آن حرف میزنند: JSON بساز، بخوان و یک /api/sensor راه بینداز.
سطح: پیشرفته · زمان: حدود 20 دقیقه · مفاهیم: JSON، ArduinoJson، API
قدمهای این درس
- JSON چیست؟
- قدم ۱ — مدار
- قدم ۲ — خواندن و ساختن JSON
- اشتباه رایج — گیومهها
- چالش
نمونهای از کد این درس
// ESP32 + ArduinoJson: build JSON for /api/sensor and parse a JSON command.
#include <WiFi.h>
#include <WebServer.h>
#include <ArduinoJson.h>
const int LED = 4;
const int POT = 34; // ADC pin, 0..4095
WebServer server(80);
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
// 1) Parse: text -> document
const char* command = "{\"led\":true,\"room\":\"kitchen\"}";
JsonDocument cmd;
DeserializationError err = deserializeJson(cmd, command);
if (err) {
Serial.print("Bad JSON: ");
Serial.println(err.c_str());
} else {
bool on = cmd["led"];
digitalWrite(LED, on ? HIGH : LOW);
Serial.print("Room: ");
Serial.println(cmd["room"].as<const char*>());
}
WiFi.begin("MyHome", "YOUR_PASSWORD");
while (WiFi.status() != WL_CONNECTED) delay(200);
Serial.println(WiFi.localIP());
// 2) Build: document -> text
server.on("/api/sensor", []() {
JsonDocument doc;
int raw = analogRead(POT);
doc["raw"] = raw;
doc["volts"] = raw * 3.3 / 4095.0;
doc["led"] = digitalRead(LED) == HIGH;
doc["uptime"] = millis() / 1000;
String out;
serializeJson(doc, out);
server.send(200, "application/json", out);
});
server.begin();
}
void loop() {
server.handleClient();
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓