🌐 وب‌سرور ESP32: روشن کردن LED از گوشی، قدم به قدم

یکی از جذاب‌ترین پروژه‌های ESP32 این است که خودِ برد یک سایت کوچک بسازد. گوشی یا لپ‌تاپ آدرس برد را باز می‌کند، دکمه‌ای را می‌زند و LED روی میز روشن می‌شود. به این کار «وب‌سرور» می‌گویند و پایه‌ی خیلی از پروژه‌های اینترنت اشیاء و خانه‌ی هوشمند است.

وب‌سرور یعنی چه؟

وقتی آدرسی را در مرورگر باز می‌کنی، مرورگر یک «درخواست» به یک کامپیوتر می‌فرستد و آن کامپیوتر یک صفحه برمی‌گرداند. در این پروژه، آن کامپیوتر خودِ ESP32 است. ما به برنامه می‌گوییم برای هر آدرس چه کار کند:

سه قدم اصلی در کد

#include <WiFi.h>
#include <WebServer.h>

WebServer server(80);          // 1) build a server on port 80

void setup() {
  pinMode(4, OUTPUT);
  WiFi.begin("MyHome", "12345678");
  while (WiFi.status() != WL_CONNECTED) delay(300);

  // 2) say what each address does
  server.on("/", []() {
    server.send(200, "text/html",
      "<a href='/on'>ON</a> | <a href='/off'>OFF</a>");
  });
  server.on("/on",  []() { digitalWrite(4, HIGH); server.send(200, "text/plain", "ON");  });
  server.on("/off", []() { digitalWrite(4, LOW);  server.send(200, "text/plain", "OFF"); });
  server.begin();
}

void loop() {
  server.handleClient();       // 3) answer the browser, over and over
}

آن []() { … } یک «تابع بی‌نام» است: کاری که باید برای آن آدرس انجام شود. می‌شد به‌جایش یک تابع معمولی با اسم نوشت؛ هر دو کار می‌کنند.

⚠️ رایج‌ترین اشتباه: فراموش کردن server.handleClient() در loop(). بدون آن، صفحه هیچ‌وقت جواب نمی‌دهد. شبیه‌ساز هم دقیقاً همین را نشان می‌دهد و می‌گوید چه چیزی جا افتاده.

دکمه‌های بدون رفتن به صفحه‌ی دیگر (fetch)

در نسخه‌ی ساده، با زدن لینک صفحه عوض می‌شود. در نسخه‌ی بهتر، دکمه با fetch فقط یک درخواست کوچک می‌فرستد و صفحه سر جایش می‌ماند:

<button onclick="fetch('/on')">ON</button>
<button onclick="fetch('/off')">OFF</button>

نشان دادن مقدار سنسور در صفحه

برای اینکه عدد یک سنسور در صفحه زنده عوض شود، یک آدرس /value می‌سازیم که فقط عدد را به شکل JSON برمی‌گرداند و صفحه هر نیم ثانیه آن را می‌خواند:

server.on("/value", []() {
  int raw = analogRead(34);              // 0..4095 on an ESP32
  server.send(200, "application/json",
              "{\"raw\":" + String(raw) + "}");
});

بدون برد هم امتحان کن

در مود آردوینوی شبیه ساز مدار، برد ESP32 را بیاور یا یکی از پروژه‌های آماده را باز کن: روشن کردن LED از صفحه‌ی وب یا نمایش زنده‌ی سنسور. شبیه‌سازی را اجرا کن و زیر کد، تب «مرورگر» را باز کن. صفحه‌ای که برنامه‌ات ساخته همان‌جا باز می‌شود و دکمه‌هایش واقعاً LED روی صحنه را روشن می‌کنند.

وای‌فای در شبیه‌ساز مجازی است: برد «وصل» می‌شود و یک آدرس مثل 192.168.1.42 می‌گیرد، ولی به اینترنت واقعی وصل نمی‌شود. برای یادگیری وب‌سرور همین کافی است.

یک قدم جلوتر: ESPAsyncWebServer و WebSocket

در وب‌سرور معمولی، صفحه هر بار باید از برد «بپرسد» چه خبر است. با کتابخانه‌ی ESPAsyncWebServer برد خودش به درخواست‌ها جواب می‌دهد (دیگر handleClient() لازم نیست) و با WebSocket صفحه و برد یک اتصال باز نگه می‌دارند تا هر تغییری فوراً به همه برسد.

AsyncWebServer server(80);
AsyncWebSocket ws("/ws");

void loop() {
  ws.cleanupClients();
  if (digitalRead(15) == LOW) ws.textAll("toggle");
}

هر دو در شبیه‌ساز کار می‌کنند: وب‌سرور سریع با ESPAsyncWebServer و LED زنده با WebSocket (دکمه‌ی روی مدار را بزن و ببین صفحه بدون رفرش عوض می‌شود).

قدم بعدی

وب‌سرور ESP32 را در شبیه‌ساز بساز 🌐

مقاله‌های دیگر

🤖

آردوینو چیست؟ راهنمای کامل برای شروع از صفر

⚡

بهترین شبیه‌ساز مدار آنلاین فارسی — چرا شبیه‌ساز، و چرا تینکرکد فارسی؟

💡

ساده‌ترین پروژه الکترونیک برای بچه‌ها: روشن‌کردن یک LED

بیشتر بخوان در ووکوی فارسی