🧾 درس 86: داده‌ی JSON

زبانی که اپ‌ها و دستگاه‌ها با آن حرف می‌زنند: JSON بساز، بخوان و یک /api/sensor راه بینداز.

سطح: پیشرفته · زمان: حدود 20 دقیقه · مفاهیم: JSON، ArduinoJson، API

قدم‌های این درس

  1. JSON چیست؟
  2. قدم ۱ — مدار
  3. قدم ۲ — خواندن و ساختن JSON
  4. اشتباه رایج — گیومه‌ها
  5. چالش

نمونه‌ای از کد این درس

// 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();
}

چرا این درس؟

دوره‌ی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیه‌ساز انجام می‌دهی — مدار واقعی می‌چینی، کد واقعی اجرا می‌کنی و نتیجه را همان لحظه می‌بینی. این درس روی درس‌های قبلی ساخته شده، پس اگر تازه شروع کرده‌ای از درس ۱ بیا!

این درس را رایگان در شبیه‌ساز شروع کن 🎓

درس‌های دیگر دوره

🌡️

درس 85: صفحه‌ی وب سنسور

⚡

درس 87: به‌روزرسانی زنده با WebSocket