ESP8266 使用 MQTT 协议传输 DHT11 温湿度数据 Arduino 代码示例
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <DHT.h>
// WiFi 网络设置 const char* ssid = 'your_wifi_ssid'; const char* password = 'your_wifi_password';
// MQTT 服务器设置 const char* mqtt_server = 'mqtt_server_address'; const int mqtt_port = 1883; const char* mqtt_client_id = 'ESP8266_DHT11'; const char* mqtt_username = 'mqtt_username'; const char* mqtt_password = 'mqtt_password'; const char* mqtt_topic = 'dht11';
// DHT11 设置 #define DHTPIN D1 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE);
// ESP8266WiFiClient 和 PubSubClient 对象 WiFiClient espClient; PubSubClient client(espClient);
void setup() { Serial.begin(115200);
// 连接 WiFi 网络 Serial.print('Connecting to WiFi...'); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print('.'); } Serial.println(' connected');
// 连接 MQTT 服务器 client.setServer(mqtt_server, mqtt_port); while (!client.connected()) { Serial.print('Connecting to MQTT server...'); if (client.connect(mqtt_client_id, mqtt_username, mqtt_password)) { Serial.println(' connected'); } else { Serial.print(' failed, rc='); Serial.print(client.state()); Serial.println(' retrying in 5 seconds'); delay(5000); } }
// 初始化 DHT11 dht.begin(); }
void loop() { delay(2000);
// 读取 DHT11 数据 float temperature = dht.readTemperature(); float humidity = dht.readHumidity();
// 发布 MQTT 消息 if (isnan(temperature) || isnan(humidity)) { Serial.println('Failed to read DHT11 data'); } else { char message[50]; sprintf(message, '{"temperature":%.1f,"humidity":%.1f}', temperature, humidity); client.publish(mqtt_topic, message); Serial.print('Published to MQTT: '); Serial.println(message); } }
原文地址: https://www.cveoy.top/t/topic/mEZN 著作权归作者所有。请勿转载和采集!