ArduinoIDE环境下esp8266使用mqtt协议传输dht11数据代码
以下是一个简单的ArduinoIDE环境下使用ESP8266模块传输DHT11温湿度数据的MQTT代码示例:
#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);
}
}
在代码中,首先需要根据实际情况设置WiFi网络和MQTT服务器的相关参数,然后初始化DHT11传感器和ESP8266WiFiClient、PubSubClient对象。在主循环中,先读取DHT11传感器的温湿度数据,然后将数据转换为JSON格式的字符串,并使用PubSubClient对象发布到MQTT服务器上。最后输出数据到串口以便调试。
原文地址: http://www.cveoy.top/t/topic/beaI 著作权归作者所有。请勿转载和采集!