当前位置:   article > 正文

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

echarts 实时温度计

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实时信息

  1. #include <SimpleDHT.h>
  2. //读取DHT11
  3. void getDHT11Msg(){
  4. dhtCount = dhtCount+1;//记录dht读取次数
  5. //发送数据区上界
  6. // start working...
  7. Serial.println("=================================");
  8. Serial.println("Sample DHT11... 第");Serial.println(dhtCount);Serial.println(" 次");
  9. // read without samples.
  10. byte temperature = 0;
  11. byte humidity = 0;
  12. int err = SimpleDHTErrSuccess;
  13. if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
  14. Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
  15. return;
  16. }
  17. Serial.print("Read DHT11 temperature="); Serial.print((int)temperature); Serial.println(" *C, ");
  18. Serial.print("Read DHT11 humidity="); Serial.print((int)humidity); Serial.println(" H, ");
  19. currentTemperature = (int)temperature;//记录当前温度
  20. currentHumidity = (int)humidity;//记录当前湿度
  21. }

二、启动OTA模式,对外发送MQTT消息

  1. #include <ArduinoOTA.h>
  2. #include <PubSubClient.h>
  3. //等待,直到连接上服务器
  4. void reconnect() {
  5. while (!client.connected()) {//如果没有连接上
  6. int randnum = random(0, 999);
  7. if (client.connect("esp8266-client"+randnum)) {//接入时的用户名,尽量取一个很不常用的用户名
  8. client.subscribe("subscribeTopic");//接收外来的数据时的intopic
  9. } else {
  10. Serial.print("failed, rc=");//连接失败
  11. Serial.print(client.state());//重新连接
  12. Serial.println(" try again in 5 seconds");//延时5秒后重新连接
  13. delay(5000);
  14. }
  15. }
  16. }
  17. //用于接收服务器接收的数据
  18. void callback(char* topic, byte* payload, unsigned int length) {
  19. load="";
  20. for (int i = 0; i < length; i++) {
  21. load +=(char)payload[i];//串口打印出接收到的数据
  22. }
  23. decodeJson();
  24. }
  25. //解析订阅信息JSON
  26. void decodeJson() {
  27. DynamicJsonBuffer jsonBuffer;
  28. JsonObject& root = jsonBuffer.parseObject(load);
  29. Serial.print("decodeJson: ");
  30. Serial.println(load);
  31. OTA = root["OTA"];
  32. OTAS =OTA;
  33. //接收数据json处理区上界
  34. //添加其他自己的JSON收听处理方式就像这样 int Activity=root["ACT"];
  35. //接收数据json处理区下界
  36. }
  37. //OTA模式
  38. void OTAsetup(){
  39. if(OTAS){
  40. ArduinoOTA.onStart([]() {
  41. Serial.println("Start");
  42. });
  43. ArduinoOTA.onEnd([]() {
  44. Serial.println("\nEnd");
  45. });
  46. ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
  47. Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  48. });
  49. ArduinoOTA.onError([](ota_error_t error) {
  50. Serial.printf("Error[%u]: ", error);
  51. if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
  52. else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
  53. else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
  54. else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
  55. else if (error == OTA_END_ERROR) Serial.println("End Failed");
  56. });
  57. ArduinoOTA.begin();
  58. Serial.println("Ready");
  59. Serial.print("IP address: ");
  60. Serial.println(WiFi.localIP());
  61. OTAS=0;
  62. }
  63. }
  64. //发送信息封装
  65. void encodeJson(){
  66. DynamicJsonBuffer jsonBuffer;
  67. JsonObject& root1 = jsonBuffer.createObject();
  68. //发送数据区上界
  69. root1["temperature"] = currentTemperature;
  70. root1["humidity"] = currentHumidity;
  71. root1["readCount"] = dhtCount;
  72. //添加其他要发送的JSON包就像这样下面这句代码
  73. //发送数据区下界
  74. root1.printTo(msg);
  75. }

完整代码:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/114725
推荐阅读