赞
踩
HTML Echarts图形统计实时显示DHT11温度(一):第一阶段效果;
HTML Echarts图形统计实时显示DHT11温度(二):第一阶段前端展示界面;
HTML Echarts图形统计实时显示DHT11温度(三):第一阶段中间件记录;
HTML Echarts图形统计实时显示DHT11温度(四):第一阶段硬件ESP8266、DHT11记录;
HTML Echarts图形统计实时显示DHT11温度(五):第一阶段大数据可视化大屏例子;
未完待续。。。 。。。
下位机 ESP8266读取DHT11 发布MQTT主题
传感器DHT11收集温度信息传输至NODEMCU模组,由NODEMCU模组将数据发送至中间件,再由中间件上传上位机进行可视化、持久化。
一、硬件设备:
1、DHT11;
2、NODEMCU模组;
3、必须使用数据线;
4、选用杜邦线连接 / 可额外集成开发板;
二、开发环境: arduino;
三、硬件介绍:
1、DHT11(图 DHT11.jpg):
温度测量范围:0℃ ~ 50℃ 误差 2℃;
温度分辨率: 1℃;
工作电压: 3.3V ~ 5V;
输出形式: 数字输出;
PCB板尺寸: 32mm*14mm 电源指示灯: 红色; 重量: 约8g;
引脚定义: VCC(火线)外接3.3V ~ 5V; GND(零线);
DAT(数字量输出接单片机IO口)。
注:VCC和GND接反,PCB板会烧坏!
2、NODEMCU: 基于ESP-12E开发的NodeMcu开发板,以WIFI芯片ESP-8266为核心; CH340G、CP210X驱动等;
一、ESP8266读取DHT11
ESP8266 引入 <SimpleDHT.h>库,读取DHT11实时信息
- #include <SimpleDHT.h>
-
- //读取DHT11
- void getDHT11Msg(){
- dhtCount = dhtCount+1;//记录dht读取次数
- //发送数据区上界
- // start working...
- Serial.println("=================================");
- Serial.println("Sample DHT11... 第");Serial.println(dhtCount);Serial.println(" 次");
- // read without samples.
- 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("Read DHT11 temperature="); Serial.print((int)temperature); Serial.println(" *C, ");
- Serial.print("Read DHT11 humidity="); Serial.print((int)humidity); Serial.println(" H, ");
- currentTemperature = (int)temperature;//记录当前温度
- currentHumidity = (int)humidity;//记录当前湿度
- }
二、启动OTA模式,对外发送MQTT消息
- #include <ArduinoOTA.h>
- #include <PubSubClient.h>
- //等待,直到连接上服务器
- void reconnect() {
- while (!client.connected()) {//如果没有连接上
- int randnum = random(0, 999);
- if (client.connect("esp8266-client"+randnum)) {//接入时的用户名,尽量取一个很不常用的用户名
- client.subscribe("subscribeTopic");//接收外来的数据时的intopic
- } else {
- Serial.print("failed, rc=");//连接失败
- Serial.print(client.state());//重新连接
- Serial.println(" try again in 5 seconds");//延时5秒后重新连接
- delay(5000);
- }
- }
- }
- //用于接收服务器接收的数据
- void callback(char* topic, byte* payload, unsigned int length) {
- load="";
- for (int i = 0; i < length; i++) {
- load +=(char)payload[i];//串口打印出接收到的数据
- }
- decodeJson();
- }
- //解析订阅信息JSON
- void decodeJson() {
- DynamicJsonBuffer jsonBuffer;
- JsonObject& root = jsonBuffer.parseObject(load);
- Serial.print("decodeJson: ");
- Serial.println(load);
- OTA = root["OTA"];
- OTAS =OTA;
- //接收数据json处理区上界
- //添加其他自己的JSON收听处理方式就像这样 int Activity=root["ACT"];
- //接收数据json处理区下界
- }
- //OTA模式
- void OTAsetup(){
- if(OTAS){
- ArduinoOTA.onStart([]() {
- Serial.println("Start");
- });
- ArduinoOTA.onEnd([]() {
- Serial.println("\nEnd");
- });
- ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
- Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
- });
- ArduinoOTA.onError([](ota_error_t error) {
- Serial.printf("Error[%u]: ", error);
- if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
- else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
- else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
- else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
- else if (error == OTA_END_ERROR) Serial.println("End Failed");
- });
- ArduinoOTA.begin();
- Serial.println("Ready");
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- OTAS=0;
- }
- }
- //发送信息封装
- void encodeJson(){
- DynamicJsonBuffer jsonBuffer;
- JsonObject& root1 = jsonBuffer.createObject();
- //发送数据区上界
- root1["temperature"] = currentTemperature;
- root1["humidity"] = currentHumidity;
- root1["readCount"] = dhtCount;
- //添加其他要发送的JSON包就像这样下面这句代码
- //发送数据区下界
- root1.printTo(msg);
- }
完整代码:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。