⚡ ماموریت ۹۲: مقدار زنده با WebSocket
AsyncWebSocket ws("/ws") را با addHandler به سرور بده و هر نیم ثانیه با ws.textAll مقدار را برای همهی صفحهها بفرست.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه برد (آردوینو یا ESP32) روی صحنه باشه
- ☐ یه ESP32 روی صحنه باشه
- ☐ یه پتانسیومتر
- ☐ یه WebSocket
- ☐ مقدار برای همه فرستاده بشه
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- ESP32 DevKit
- پتانسیومتر
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- ESP32 DevKit (VCC33) ⟷ پتانسیومتر (VCC)
- ESP32 DevKit (D34) ⟷ پتانسیومتر (WIPER)
- پتانسیومتر (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
📊
ماموریت ۹۰: صفحهی وب با مقدار سنسور
💾
ماموریت ۹۴: ذخیرهی تنظیمات در حافظهی فلش
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها