上传DHT11温湿度数据基于mqtt
时间: 2023-11-06 09:06:01 浏览: 108
首先,需要连接 DHT11 传感器到 Arduino 板子上,并编写一个 Arduino 程序来获取温湿度数据并将其上传到 MQTT 服务器。以下是一个示例程序:
```C++
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <WiFi.h>
#include <PubSubClient.h>
// Replace with your Wi-Fi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// Replace with your MQTT broker IP address
const char* mqtt_server = "your_MQTT_broker_IP";
// DHT11 sensor pin
#define DHTPIN 5
// Uncomment the type of sensor in use
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
client.setServer(mqtt_server, 1883);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("Connected to MQTT");
} else {
Serial.print("Failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}
void loop() {
delay(2000);
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C\tHumidity: ");
Serial.print(humidity);
Serial.println(" %");
char temp[10];
dtostrf(temperature, 6, 2, temp);
char hum[10];
dtostrf(humidity, 6, 2, hum);
client.publish("temperature", temp);
client.publish("humidity", hum);
}
```
在这个程序中,我们使用了 Adafruit 的 DHT 库来读取温湿度传感器。我们还使用了 WiFi 库和 PubSubClient 库来连接到 WiFi 和 MQTT 服务器。
在 `setup()` 函数中,我们首先连接到 Wi-Fi 网络,然后连接到 MQTT 服务器。如果连接失败,我们会等待 2 秒钟并重试。
在 `loop()` 函数中,我们读取温湿度数据并将其上传到 MQTT 服务器。我们使用 `client.publish()` 函数来发布温度和湿度数据到名为 "temperature" 和 "humidity" 的 MQTT 主题。
请注意,我们使用了 `dtostrf()` 函数将浮点数转换为字符数组,以便将其发布到 MQTT 主题。
现在,我们需要在 MQTT 服务器上创建一个名为 "temperature" 和 "humidity" 的主题,并订阅它们以接收数据。
希望这个示例程序能够帮助你上传 DHT11 温湿度数据到 MQTT 服务器。