HTML Echarts图形统计实时显示DHT11温度(四)

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);
}

完整代码:

传感器DHT11收集温度信息传输至NODEMCU模组,由NODEMCU模组将数据发送至中间件MQTT

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是DHT11湿度温度传感器和数码管显示的μVision4代码实现: ``` #include <reg52.h> #define DHT11_DATA P1_0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit beep=P2^5; unsigned char code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; //共阴数码管0~9的编码 unsigned char RH,TEMP; //湿度和温度 unsigned char T_DATA_H,T_DATA_L,RH_DATA_H,RH_DATA_L,checkdata; //DHT11数据 void delay(unsigned int time) //延时函数 { unsigned int i,j; for (i=0;i<time;i++) { for (j=0;j<110;j++); } } void delay_us(unsigned int time) //微秒延时函数 { unsigned int i; for (i=0;i<time;i++); } void start_work() //DHT11开始工作 { unsigned char i; DHT11_DATA=0; //主机将总线拉低至少18ms delay(20); DHT11_DATA=1; //发送起始信号,总线由上拉电阻拉高 delay_us(20); //主机延时20~40us DHT11_DATA=0; //主机将总线拉低80us delay_us(80); DHT11_DATA=1; //主机将总线拉高,等待DHT11响应信号 while(DHT11_DATA); while(!DHT11_DATA); while(DHT11_DATA); for (i=0;i<8;i++) //接收湿度整数部分数据 { while(!DHT11_DATA); delay_us(40); RH_DATA_H<<=1; RH_DATA_H|=DHT11_DATA; while(DHT11_DATA); } for (i=0;i<8;i++) //接收湿度小数部分数据 { while(!DHT11_DATA); delay_us(40); RH_DATA_L<<=1; RH_DATA_L|=DHT11_DATA; while(DHT11_DATA); } for (i=0;i<8;i++) //接收温度整数部分数据 { while(!DHT11_DATA); delay_us(40); T_DATA_H<<=1; T_DATA_H|=DHT11_DATA; while(DHT11_DATA); } for (i=0;i<8;i++) //接收温度小数部分数据 { while(!DHT11_DATA); delay_us(40); T_DATA_L<<=1; T_DATA_L|=DHT11_DATA; while(DHT11_DATA); } for (i=0;i<8;i++) //接收校验码 { while(!DHT11_DATA); delay_us(40); checkdata<<=1; checkdata|=DHT11_DATA; while(DHT11_DATA); } } void main() { unsigned char i; while(1) { start_work(); //DHT11开始工作 RH=RH_DATA_H; //湿度整数部分 TEMP=T_DATA_H; //温度整数部分 LSA=0; //选中第一位数码管 P0=table[TEMP/10]; //写入温度整数位 delay(5); LSA=1; //关闭第一位数码管 LSB=0; //选中第二位数码管 P0=table[TEMP%10]; //写入温度小数位 delay(5); LSB=1; //关闭第二位数码管 LSC=0; //选中第三位数码管 P0=table[RH/10]; //写入湿度整数位 delay(5); LSC=1; //关闭第三位数码管 LSA=0; //选中第位数码管 P0=table[RH%10]; //写入湿度小数位 delay(5); LSA=1; //关闭第位数码管 } } ``` 注意事项: 1. 本代码中使用的是STC89C51单片机,如果使用其他型号的单片机需要修改对应的IO端口。 2. DHT11需要一定的时间来完成数据读取和校验,因此需要适当的延时,否则会出现读取错误。 3. 数码管显示的部分需要根据具体的电路连接进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我也不清楚

有钱的捧个钱场,(~ ̄▽ ̄)~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值