Nâng caoESP32 DevKitC V4WiFiMQTTIoTDHT22
IoT: gửi nhiệt độ qua MQTT
ESP32 nối WiFi mô phỏng, gửi nhiệt độ DHT22 lên broker MQTT mỗi 2 giây và nhận lệnh bật tắt LED từ topic khác. Xem và gửi message ở tab IoT.
Linh kiện
- ESP32 DevKitC V4
- Cảm biến nhiệt độ, độ ẩm DHT22/AM2302
- Điện trở
- LED
Thư viện
PubSubClient, DHT sensor library — được cài sẵn khi bạn mở dự án.
Thử ngay khi mô phỏng chạy
- Mở tab IoT để xem message bytra/demo/nhiet-do.
- Publish “on” vào topic bytra/demo/led để bật LED.
main.cpp
// WiFi mô phỏng "BYTRA-LAB" + MQTT: gửi nhiệt độ, nhận lệnh bật tắt LED#include <DHT.h>#include <PubSubClient.h>#include <WiFi.h> const char* TOPIC_TEMPERATURE = "bytra/demo/nhiet-do";const char* TOPIC_LED = "bytra/demo/led";const int LED_PIN = 2; WiFiClient net;PubSubClient mqtt(net);DHT dht(32, DHT22);unsigned long lastPublish = 0; void onMessage(char* topic, byte* payload, unsigned int length) { String text; for (unsigned int i = 0; i < length; i++) text += (char)payload[i]; Serial.printf("[%s] %s\n", topic, text.c_str()); if (String(topic) == TOPIC_LED) digitalWrite(LED_PIN, text == "on" ? HIGH : LOW);} void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); dht.begin(); WiFi.begin("BYTRA-LAB"); while (WiFi.status() != WL_CONNECTED) delay(100); Serial.print("WiFi da ket noi, IP "); Serial.println(WiFi.localIP()); mqtt.setServer("broker.bytra.lab", 1883); mqtt.setCallback(onMessage);} void loop() { if (!mqtt.connected()) { if (!mqtt.connect("esp32-demo")) { Serial.printf("MQTT loi rc=%d\n", mqtt.state()); delay(1000); return; } Serial.println("MQTT da ket noi"); mqtt.subscribe(TOPIC_LED); } mqtt.loop(); if (millis() - lastPublish >= 2000) { lastPublish = millis(); float t = dht.readTemperature(); if (!isnan(t)) { String value = String(t, 1); mqtt.publish(TOPIC_TEMPERATURE, value.c_str()); Serial.printf("Da gui %s\n", value.c_str()); } } delay(10);}