⚡ وب‌سرور سریع ESP32 با ESPAsyncWebServer

صفحه‌ای که LED را بدون بارگذاری دوباره روشن و خاموش می‌کند؛ با کتابخانه‌ی ESPAsyncWebServer که handleClient() نمی‌خواهد.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سه‌بعدی + کد)

قطعات لازم

کد کامل پروژه

// ESP32 web server with ESPAsyncWebServer: no handleClient() needed —
// every request is answered on its own. Run it, then open the «مرورگر» tab.
#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>

const char* ssid = "MyHome";
const char* password = "12345678";
const int LED = 4;
bool ledOn = false;

AsyncWebServer server(80);

// The page lives in flash. %STATE% is filled in by processor() below.
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=1">
<style>body{font-family:sans-serif;text-align:center}button{font-size:20px;padding:10px 24px;margin:6px}</style></head>
<body><h2>ESP32 Async LED</h2>
<p>LED: <b id="state">%STATE%</b></p>
<button onclick="setLed(1)">ON</button><button onclick="setLed(0)">OFF</button>
<script>
function setLed(v) {
  fetch("/update?state=" + v).then(function (r) { return r.text(); })
    .then(function (t) { document.getElementById("state").innerText = t; });
}
</script></body></html>
)rawliteral";

String processor(const String& var) {
  if (var == "STATE") return ledOn ? "ON" : "OFF";
  return String();
}

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(200);
  Serial.println(WiFi.localIP());

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send_P(200, "text/html", index_html, processor);
  });
  // /update?state=1 turns the LED on, /update?state=0 turns it off
  server.on("/update", HTTP_GET, [](AsyncWebServerRequest *request) {
    if (request->hasParam("state")) {
      String value = request->getParam("state")->value();
      ledOn = value == "1";
      digitalWrite(LED, ledOn ? HIGH : LOW);
      Serial.println(ledOn ? "LED ON" : "LED OFF");
    }
    request->send(200, "text/plain", ledOn ? "ON" : "OFF");
  });
  server.onNotFound(notFound);
  server.begin();
}

void loop() {
  // Nothing here: the server works by itself.
}

چطور اجرایش کنم؟

  1. شبیه‌ساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
  2. از پنل «نمونه‌ها»، «وب‌سرور سریع ESP32 با ESPAsyncWebServer» را بارگذاری کن — مدار و کد با هم می‌آیند.
  3. دکمه‌ی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
  4. حالا کد را تغییر بده — عددها، پین‌ها، ترتیب — و دوباره اجرا کن!
این پروژه را رایگان در شبیه‌ساز اجرا کن 🤖