Tất cả dự án mẫu
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);}