پیشرفته⏱ 18 دقیقه مطالعه

در درس‌های قبل با MQTT (درس ۱۳) برای ارتباط سبک بین دستگاه‌ها آشنا شدید. اما برای گرفتن اطلاعات از سرویس‌های وب معمولی (مثل یک API آب‌وهوا یا نرخ ارز)، معمولاً به درخواست‌های HTTP نیاز داریم. کتابخانهٔ استاندارد HTTPClient.h در هستهٔ Arduino-ESP32 این کار را ساده می‌کند.

چرخهٔ یک درخواست HTTP از ESP32 به یک API

ارسال یک درخواست GET

CPP
#include <WiFi.h>
#include <HTTPClient.h>

void setup() {
  Serial.begin(115200);
  WiFi.begin("Wokwi-GUEST", "");
  while (WiFi.status() != WL_CONNECTED) delay(500);

  HTTPClient http;
  http.begin("https://api.publicapis.org/entries");
  int httpCode = http.GET();

  if (httpCode == 200) {
    String payload = http.getString();
    Serial.print("طول پاسخ: ");
    Serial.println(payload.length());
  } else {
    Serial.print("خطا در درخواست، کد: ");
    Serial.println(httpCode);
  }
  http.end();   // آزاد کردن منابع اتصال
}

void loop() {}
⚠️ هشدار

همیشه پس از استفاده از پاسخ، متد http.end() را صدا بزنید تا اتصال بسته و منابع محدود ESP32 آزاد شود.

ارسال داده با POST

CPP
#include <HTTPClient.h>
#include <ArduinoJson.h>

void sendReading(float value) {
  StaticJsonDocument<200> doc;
  doc["sensor"] = "esp32-academy";
  doc["value"] = value;

  String payload;
  serializeJson(doc, payload);

  HTTPClient http;
  http.begin("https://example.com/api/readings");
  http.addHeader("Content-Type", "application/json");
  int code = http.POST(payload);

  Serial.print("کد پاسخ: ");
  Serial.println(code);
  http.end();
}
شبیه‌سازی زندهٔ دریافت داده از یک API با HTTPClient و نمایش روی OLED — دقیقاً همان الگوی GET + پردازش JSON + نمایش که در این درس دیدید باز کردن در Wokwi ↗
در حال بارگذاری شبیه‌ساز… (ممکن است چند ثانیه طول بکشد)

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود. اگر جعبهٔ بالا بیش از حد سیاه/خالی ماند، صفحه را رفرش کنید یا از دکمهٔ «باز کردن در Wokwi» بالا استفاده کنید.

🛠️ کارگاه عملی

کارگاه عملی: با استفاده از یک API عمومی رایگان (مثل قیمت لحظه‌ای ارز)، هر ۳۰ ثانیه یک مقدار جدید بگیرید و روی نمایشگر OLED (درس ۹) نشان دهید.

❓ پس از پردازش پاسخ یک درخواست HTTP در Arduino، چرا باید http.end() را صدا بزنیم؟
طراحی و توسعه: امین شیخ نجدیglcd.ir | نسخهٔ افزونه: 1.21.0