⚡ وبسرور سریع 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.
}
چطور اجرایش کنم؟
- شبیهساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
- از پنل «نمونهها»، «وبسرور سریع ESP32 با ESPAsyncWebServer» را بارگذاری کن — مدار و کد با هم میآیند.
- دکمهی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
- حالا کد را تغییر بده — عددها، پینها، ترتیب — و دوباره اجرا کن!