ESP8266+DHT11使用ThingsPanel监测温湿度
发布日期:
这个教程的目的是通过ESP8266开发板采集DHT11温湿度传感器的数据推送到开源物联网平台ThingsPanel,并实现温湿度监测。
最终效果
准备事项
ESP8266开发板 https://wiki.diustou.com/cn/ESP8266_Dev_Board 具体开发板的型号是ESP-12F
DHT11温湿度传感器
操作步骤
1、接线
接到外设口,分别是gnd data 3v3,注意不要接反,反了必烧,我已经烧了一个。
另外一端接电脑USB
2、准备代码刷写工具
使用的是Arduino IDE,可自行搜索下载。
在设置里【附加板卡管理网址】中添加8266 http://arduino.esp8266.com/stable/package_esp8266com_index.json
选择开发板,如果你只有一块板子,那很好选择。
然后安装库:
- pubsubclient
- simpledht
- ArduinoJson
在Windows上,应该是com3,可以拔掉插上来AI观察看看是哪个。
3、在ThingsPanel上创建设备
绑定了温湿度传感器插件,并点开【编辑参数】
点开【编辑参数】
4、刷写代码
代码里已经包含了在ThingsPanel中创建的设备连接认证信息,直接复制粘贴即可。
要把如下信息改成自己的
- WiFi和密码
- MQTT认证用户名
- 主题
- 设备ID
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SimpleDHT.h>
#include <ArduinoJson.h>
// WiFi和MQTT参数
const char* ssid = "Redmi";
const char* password = "123456789";
const char* mqtt_server = "dev.thingspanel.cn";
const char* mqtt_user = "97380127-49b3-aa19-9762-00cabf5ef21b";
const char* mqtt_password = "";
const char* mqtt_topic = "device/attributes";
WiFiClient espClient;
PubSubClient client(espClient);
// 为DHT11数据引脚定义引脚号
const int pinDHT11 = 5;
SimpleDHT11 dht11(pinDHT11);
void setup() {
Serial.begin(115200);
delay(1000); // 等待串口初始化
Serial.println("DHT11 Test!");
// 连接WiFi
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// 设置MQTT服务器和回调函数
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 从DHT11读取温度和湿度
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print("Temperature: ");
Serial.print((int)temperature);
Serial.println(" *C");
Serial.print("Humidity: ");
Serial.print((int)humidity);
Serial.println(" %");
// 创建JSON对象并发送数据到MQTT
StaticJsonDocument<100> doc;
doc["temperature"] = (int)temperature;
doc["humidity"] = (int)humidity;
char msg[100];
serializeJson(doc, msg);
client.publish(mqtt_topic, msg);
delay(2000); // 等待2秒再次读取
}
void reconnect() {
// 循环直到连接上MQTT
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
刷写程序,按照如下图操作:
刷写完毕后,数据上线,可在ThingsPanel的设备监控中看到对应的可视化界面效果。
难点综述
本教程对技术要求的门槛很低,几个难点分别是:
1、接线:接USB口不用说了,dht11传感器接的时候,gnd对gnd,确保这点就错不了。
2、安装刷代码软件:安装好Arduino IDE之后,配置板卡管理,就是把给的网址贴到设置里,安装库,搜索对应单词即可。
3、刷程序,左上角两个按钮,先点左1验证,后点左2上传。
4、完工,可以在下方串口监视器这里看到数据输出,波特率选择 115200,可在ThingsPanel的测试平台看到监控信息