ESP8266+DHT11使用ThingsPanel监测温湿度

2023-08-13

这个教程的目的是通过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中创建的设备连接认证信息,直接复制粘贴即可。

要把如下信息改成自己的

  1. WiFi和密码
  2. MQTT认证用户名
  3. 主题
  4. 设备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的测试平台看到监控信息

Github
Gitee
微信交流群
QQ交流群
商务咨询
北京极益科技有限公司 版权所有 ICP:京ICP备15045763号-12