⚡ ماموریت ۹۲: مقدار زنده با WebSocket

AsyncWebSocket ws("/ws") را با addHandler به سرور بده و هر نیم ثانیه با ws.textAll مقدار را برای همه‌ی صفحه‌ها بفرست.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد

هدف‌ها

قطعه‌های لازم

▶ همین ماموریت را در شبیه‌ساز امتحان کن
💡 گیر کردی؟ داخل شبیه‌ساز راهنما را ببین، و اگر باز هم نشد دکمه‌ی «برام حلش کن» مدار را برایت می‌چیند تا ببینی چطور کار می‌کند.

جواب کامل

اول خودت امتحان کن! بعد جواب را ببین 👀

سیم‌کشی

  1. ESP32 DevKit (VCC33) ⟷ پتانسیومتر (VCC)
  2. ESP32 DevKit (D34) ⟷ پتانسیومتر (WIPER)
  3. پتانسیومتر (GND) ⟷ ESP32 DevKit (GND1)

کد

// ESP32 WebSocket: push the knob value to the page twice a second
#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>

AsyncWebServer server(80);
AsyncWebSocket ws("/ws");
const int POT = 34;
unsigned long lastSend = 0;

const char index_html[] PROGMEM = R"rawliteral(<!DOCTYPE html><html><body style="font-family:sans-serif;text-align:center">
<h2>Live knob</h2><div id="v" style="font-size:48px">-</div>
<script>
var s = new WebSocket("ws://" + window.location.host + "/ws");
s.onmessage = function (e) { document.getElementById("v").innerText = e.data; };
</script></body></html>
)rawliteral";

void setup() {
  Serial.begin(115200);
  WiFi.begin("MyHome", "12345678");
  while (WiFi.status() != WL_CONNECTED) delay(200);
  Serial.println(WiFi.localIP());
  server.addHandler(&ws);
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send_P(200, "text/html", index_html);
  });
  server.begin();
}

void loop() {
  ws.cleanupClients();
  if (millis() - lastSend > 500) {
    lastSend = millis();
    ws.textAll(String(analogRead(POT)));   // to every open page
  }
}

ماموریت‌های مشابه

🧾

ماموریت ۹۱: API با JSON

📡

ماموریت ۹۳: انتشار با MQTT

📊

ماموریت ۹۰: صفحه‌ی وب با مقدار سنسور

💾

ماموریت ۹۴: ذخیره‌ی تنظیمات در حافظه‌ی فلش

📚 برای یاد گرفتن پایه‌ها سری به دوره‌ی آموزش آردوینو بزن · 🎯 همه‌ی ماموریت‌ها