使用时在程序中替换自己的WIFI和mqtt信息
```c++
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// 定义WIFI信息
#define WIFI_SSID "你的WiFi名称"
#define WIFI_PASSWORD "你的WiFi密码"
// 定义MQTT服务器信息
#define MQTT_BROKER "Your_MQTT_Broker_IP"
#define MQTT_PORT 1883
#define MQTT_USERNAME "你的MQTT用户名"
#define MQTT_PASSWORD "你的MQTT密码"
#define MQTT_CLIENTID "ESP8266_Client"
// 定义DHT传感器信息
#define DHT_PIN 2 // 传感器连接到GPIO2
#define DHT_TYPE DHT11 // 使用DHT11
// 初始化对象
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(9600); // 初始化串口通信
// 连接WIFI网络
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
// 连接到MQTT服务器
client.setServer(MQTT_BROKER, MQTT_PORT);
while (!client.connected()) {
if (client.connect(MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD)) {
Serial.println("Connected to MQTT Broker!");
} else {
Serial.println("Failed to connect to MQTT Broker");
delay(5000);
}
}
}
void loop() {
float hum = dht.readHumidity(); // 读取湿度值
float temp = dht.readTemperature(); // 读取温度值
if (isnan(hum) || isnan(temp)) { // 如果传感器没有获取到正确的值
Serial.println("Failed to read from DHT sensor!");
return;
}
String msg = "温度: " + String(temp) + " ℃" + ", 湿度: " + String(hum) +"%"; // 创建要发布的消息
Serial.println(msg); // 打印消息到串口
client.publish("temphumid", msg.c_str()); // 将消息发布到MQTT Broker上的temphumid主题中
delay(5000); // 延时5秒后再次获取数据并发布到MQTT服务器上。
}
```
在该程序中,我们首先定义了WIFI信息和MQTT服务器信息。然后,我们初始化了一个DHT对象,指定了DHT传感器连接的引脚和使用的传感器类型。在setup()函数中,我们连接到WIFI网络并订阅MQTT服务器。
在loop()函数中,我们读取DHT传感器的湿度和温度值,并使用String构建要发布的MQTT消息。接下来,我们使用client.publish()函数将消息发布到“temphumid”主题中,并设置延迟五秒钟以便下一次读取数据。
需要注意:如果您运行此程序时出现错误,请确保您已正确配置WIFI信息、MQTT服务器信息和DHT传感器信息。还要确保您已正确安装了ESP8266 core和DHT库。