温湿度传感器HDC1080+8266+led+小程序交互-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7467|回复: 7

温湿度传感器HDC1080+8266+led+小程序交互

[复制链接]
发表于 2019-9-19 21:49 | 显示全部楼层 |阅读模式
本帖最后由 Leslie1995 于 2020-7-1 12:27 编辑

前言
     最近获得一块8266,一直想做过远程交互之类的东西,正好可以最一下,已经很久没有使用arduino了,基本啥都不会,重头学习一下,下面是这几天做的东西,由于会点小程序,就使用小程序尝试来进行交互实验。
     主要功能:
  • ESP8266通过HDC1080采集到温湿度,送到服务器,再到小程序显示,也可以网页或者其他方式。
  • 小程序能远程控制led的亮灭。
    这里很感谢群主奈何的温湿度传感器的测评和HDC1080例程,还有海神的dth11教程,虽然最终没有使用dth11,但是最初是用dth11,因为HDC1080还没有到,后面只是直接换成了HDC使用,同时也感谢博哥ESP8288系列,提供很多思路和基础知识。


一、材料


  • esp8266-12(e)
  • HDC1080高精度温湿度(原本用dth11,后来看了群主奈何的帖子就采用了这个)
  • led
  • 电源
  • 备案服务器(小程序要求比较多,不使用小程序可以不需要)
  • 小程序测试号


0CA5429884A4D37DC7F67C39ED7A74C1.jpg 016DCA5DA12FD5114D463274D16DD698.jpg


二、原理


  • ESP8266通过HDC1080采集到温湿度,送到服务器,再到小程序。ESP8266——》》服务器———》》小程序
  • 控制LED亮灭。小程序——》》服务器———》》ESP8266(进行交互)
  • 个人觉得使用用服务器的好处在于无论网页,还是APP,小程序都可以多端交互。
  • 注意:由于本人不太熟ESP8266,技术水平有限,这里是偷懒行为,由ESP8266发送数据到服务器的同时,服务器返回LED的状态,所以并不是完全实时控制,有延时,本实验使用的是每秒发送数据(向服务器发GET的请求),所以LED的状态的实际变化由delay的时间决定。



三、程序


  • ESP8266的blink例程

这为什么需要一个blink例程呢,因为ESP8266的针脚和arduino并不通用,因为第一次使用ESP8266,被坑了,大体没有差别唯一差别在于初始化定义方式
  1. #define PIN D2//ESP8266
  2. #define PIN 2//Arduino[/mw_shl_code]
  3. blink例程[mw_shl_code=arduino,true]/**
  4. * ESP8266-12(E)blink例程
  5. *  @author 沉默
  6. * @date 2019/09/21
  7. */
  8. void setup() {
  9.     pinMode(D2, OUTPUT);   // 初始化D2引脚为输出引脚,arduino不需要D,ESP8266需要D
  10. }

  11. void loop() {
  12.     digitalWrite(D2, HIGH); // 亮灯
  13.     delay(1000); // 延时1s
  14.     digitalWrite(D2, LOW);// 灭灯
  15.     delay(1000); // 延时1s
  16. }
复制代码

  • HDC1080例程

参考群主奈何的帖子
[经验] 九种温湿度传感器使用对比体验
[分享] HDC1080温湿度传感器接入blinker演示
驱动库:https://github.com/closedcube/ClosedCube_HDC1080_Arduino
本人简化例程:
  1. * HDC1080例程
  2. *  @author 沉默
  3. * @date 2019/09/21
  4. */
  5. #include <ClosedCube_HDC1080.h>
  6. ClosedCube_HDC1080 hdc1080;

  7. void setup()
  8. {
  9.   Serial.begin(115200);
  10.   hdc1080.begin(0x40);
  11. }

  12. void loop()
  13. {
  14.   Serial.print("Temperature: ");
  15.   Serial.print(hdc1080.readTemperature());
  16.   Serial.println( "℃");
  17.   Serial.print("Humidity: ");
  18.   Serial.print(hdc1080.readHumidity());
  19.   Serial.println( "%");
  20.   delay(2000);


  21. }
复制代码


  • BasicHTTPClient例程

这个由博哥ESP8266系列,学习得来,这里非常感谢博哥ESP8266系列教程,从里面得到很多启发。



关于ESP8266基于arduino开发的相关库安装方法参考
[教程] 《博哥ESP8266系列1》- Arduino IDE for esp8266
BasicHTTPClient例程
这里完全可以有上面的库得到例程。
  1. #include <Arduino.h>

  2. #include <ESP8266WiFi.h>
  3. #include <ESP8266WiFiMulti.h>

  4. #include <ESP8266HTTPClient.h>

  5. #include <WiFiClient.h>

  6. ESP8266WiFiMulti WiFiMulti;

  7. void setup() {

  8.   Serial.begin(115200);
  9.   // Serial.setDebugOutput(true);

  10.   Serial.println();
  11.   Serial.println();
  12.   Serial.println();

  13.   for (uint8_t t = 4; t > 0; t--) {
  14.     Serial.printf("[SETUP] WAIT %d...\n", t);
  15.     Serial.flush();
  16.     delay(1000);
  17.   }

  18.   WiFi.mode(WIFI_STA);
  19.   WiFiMulti.addAP("SSID", "PASSWORD");

  20. }

  21. void loop() {
  22.   // wait for WiFi connection
  23.   if ((WiFiMulti.run() == WL_CONNECTED)) {

  24.     WiFiClient client;

  25.     HTTPClient http;

  26.     Serial.print("[HTTP] begin...\n");
  27.     if (http.begin(client, "http://jigsaw.w3.org/HTTP/connection.html")) {  // HTTP


  28.       Serial.print("[HTTP] GET...\n");
  29.       // start connection and send HTTP header
  30.       int httpCode = http.GET();

  31.       // httpCode will be negative on error
  32.       if (httpCode > 0) {
  33.         // HTTP header has been send and Server response header has been handled
  34.         Serial.printf("[HTTP] GET... code: %d\n", httpCode);

  35.         // file found at server
  36.         if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
  37.           String payload = http.getString();
  38.           Serial.println(payload);
  39.         }
  40.       } else {
  41.         Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
  42.       }

  43.       http.end();
  44.     } else {
  45.       Serial.printf("[HTTP} Unable to connect\n");
  46.     }
  47.   }

  48.   delay(10000);
复制代码

  • 关于如何控制LED代码

主要通过indexOf()函数,检查服务器返回的LED状态,来控制LED的变化。
  1. String payload = http.getString();
  2.           if ( payload.indexOf("open") > 0) {
  3.             Serial.println("open");
  4.             digitalWrite(D3, HIGH);// 灭灯
  5.           } else if (payload.indexOf("close") > 0) {
  6.             Serial.println("close");
  7.             digitalWrite(D3, LOW); // 亮灯
  8.           } else {
  9.             Serial.println("find null");
  10.           }
复制代码


  • 数值转换

由于HDC1080返回的数值是float(好像是double),需要转换成String才可以,发送到服务器。
  1. //Temperature
  2.   float temp = hdc1080.readTemperature();
  3.   char tempstr[6];
  4.   sprintf(tempstr, "%.2f", temp);
  5.   String tempstring = tempstr;
复制代码


  • 最终代码
[url=]DHC1080ESP8266.rar[/url]

四、服务器和小程序


每个人都架构服务器的语言不一样所以这里不贴出来,(主要我写得太烂了),小程序也是。这里主要提供一些思路,由于我使用是小程序,小程序正式上线,需要审核,所以我这里只是用了测试,另外小程序连的服务器需要有合法域名,最好有证书(https),所以不一定用服务器+小程序,可以直接本地架构一个服务器,采用网页式,或者像其他一样使用别人的一些物联网平台。


五、成果展示


主要接线实在太丑了,而且没有只有一个手机,有需要或有机会再补充图片或视频。


串口数据:
AZ358S}6_B_209C{EI89AC4.png


小程序:



3A50F503E9D55C0D680D4D44A18F09C0.jpg

六、补充


上面有说,由于ESP8266跟arduino的根脚有区别,具体详细的可以去查资料,这里补充一个ESP8266的iic的接线图。
Arduino_NodeMCU_I2C_Interface.png


DHC1080ESP8266.rar

1.29 KB, 下载次数: 60

最终代码

发表于 2019-9-20 09:08 | 显示全部楼层
看起来不错 麻雀虽小五脏俱全
 楼主| 发表于 2019-9-20 09:53 | 显示全部楼层
单片机菜鸟 发表于 2019-9-20 09:08
看起来不错 麻雀虽小五脏俱全

博哥系列帮助很大,有什么问题都基本在里面可以找到解答,谢谢
发表于 2019-9-20 10:42 | 显示全部楼层
Leslie1995 发表于 2019-9-20 09:53
博哥系列帮助很大,有什么问题都基本在里面可以找到解答,谢谢

https://blog.csdn.net/dpjcn1990  以后可以参考这个 这个属于完整版本
 楼主| 发表于 2019-9-20 12:31 | 显示全部楼层
单片机菜鸟 发表于 2019-9-20 10:42
https://blog.csdn.net/dpjcn1990  以后可以参考这个 这个属于完整版本

好的,谢谢
发表于 2019-12-9 10:24 | 显示全部楼层
请问一下,小程序连服务器是怎么操作的  你是连接了什么服务器
 楼主| 发表于 2020-1-6 10:57 | 显示全部楼层
cslcsl 发表于 2019-12-9 10:24
请问一下,小程序连服务器是怎么操作的  你是连接了什么服务器

唔,微信小程序可能为了兼容IOS,所以标准是跟IOS系统一样,需要HTTPS,所以需要备案的域名,指向服务器。我的是腾讯云的服务器,已经备案过了。微信公众平台那边填写,小程序和其他一样通过get/post请求就可以了。
发表于 2020-4-16 15:32 来自手机 | 显示全部楼层
到时也试试测试这个传感器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:52 , Processed in 0.086662 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表