温湿度传感器HDC1080+8266+led+小程序交互
本帖最后由 Leslie1995 于 2020-7-1 12:27 编辑前言
最近获得一块8266,一直想做过远程交互之类的东西,正好可以最一下,已经很久没有使用arduino了,基本啥都不会,重头学习一下,下面是这几天做的东西,由于会点小程序,就使用小程序尝试来进行交互实验。
主要功能:
[*]ESP8266通过HDC1080采集到温湿度,送到服务器,再到小程序显示,也可以网页或者其他方式。
[*]小程序能远程控制led的亮灭。
这里很感谢群主奈何的温湿度传感器的测评和HDC1080例程,还有海神的dth11教程,虽然最终没有使用dth11,但是最初是用dth11,因为HDC1080还没有到,后面只是直接换成了HDC使用,同时也感谢博哥ESP8288系列,提供很多思路和基础知识。
一、材料
[*]esp8266-12(e)
[*]HDC1080高精度温湿度(原本用dth11,后来看了群主奈何的帖子就采用了这个)
[*]led
[*]电源
[*]备案服务器(小程序要求比较多,不使用小程序可以不需要)
[*]小程序测试号
二、原理
[*]ESP8266通过HDC1080采集到温湿度,送到服务器,再到小程序。ESP8266——》》服务器———》》小程序
[*]控制LED亮灭。小程序——》》服务器———》》ESP8266(进行交互)
[*]个人觉得使用用服务器的好处在于无论网页,还是APP,小程序都可以多端交互。
[*]注意:由于本人不太熟ESP8266,技术水平有限,这里是偷懒行为,由ESP8266发送数据到服务器的同时,服务器返回LED的状态,所以并不是完全实时控制,有延时,本实验使用的是每秒发送数据(向服务器发GET的请求),所以LED的状态的实际变化由delay的时间决定。
三、程序
[*]ESP8266的blink例程
这为什么需要一个blink例程呢,因为ESP8266的针脚和arduino并不通用,因为第一次使用ESP8266,被坑了,大体没有差别唯一差别在于初始化定义方式#define PIN D2//ESP8266
#define PIN 2//Arduino
blink例程/**
* ESP8266-12(E)blink例程
*@author 沉默
* @date 2019/09/21
*/
void setup() {
pinMode(D2, OUTPUT); // 初始化D2引脚为输出引脚,arduino不需要D,ESP8266需要D
}
void loop() {
digitalWrite(D2, HIGH); // 亮灯
delay(1000); // 延时1s
digitalWrite(D2, LOW);// 灭灯
delay(1000); // 延时1s
}
[*]HDC1080例程
参考群主奈何的帖子
[经验] 九种温湿度传感器使用对比体验
[分享] HDC1080温湿度传感器接入blinker演示
驱动库:https://github.com/closedcube/ClosedCube_HDC1080_Arduino
本人简化例程:
* HDC1080例程
*@author 沉默
* @date 2019/09/21
*/
#include <ClosedCube_HDC1080.h>
ClosedCube_HDC1080 hdc1080;
void setup()
{
Serial.begin(115200);
hdc1080.begin(0x40);
}
void loop()
{
Serial.print("Temperature: ");
Serial.print(hdc1080.readTemperature());
Serial.println( "℃");
Serial.print("Humidity: ");
Serial.print(hdc1080.readHumidity());
Serial.println( "%");
delay(2000);
}
[*]BasicHTTPClient例程
这个由博哥ESP8266系列,学习得来,这里非常感谢博哥ESP8266系列教程,从里面得到很多启发。
关于ESP8266基于arduino开发的相关库安装方法参考
[教程] 《博哥ESP8266系列1》- Arduino IDE for esp8266
BasicHTTPClient例程
这里完全可以有上面的库得到例程。
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
ESP8266WiFiMulti WiFiMulti;
void setup() {
Serial.begin(115200);
// Serial.setDebugOutput(true);
Serial.println();
Serial.println();
Serial.println();
for (uint8_t t = 4; t > 0; t--) {
Serial.printf(" WAIT %d...\n", t);
Serial.flush();
delay(1000);
}
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("SSID", "PASSWORD");
}
void loop() {
// wait for WiFi connection
if ((WiFiMulti.run() == WL_CONNECTED)) {
WiFiClient client;
HTTPClient http;
Serial.print(" begin...\n");
if (http.begin(client, "http://jigsaw.w3.org/HTTP/connection.html")) {// HTTP
Serial.print(" GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf(" GET... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf(" GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.printf("[HTTP} Unable to connect\n");
}
}
delay(10000);
[*]关于如何控制LED代码
主要通过indexOf()函数,检查服务器返回的LED状态,来控制LED的变化。
String payload = http.getString();
if ( payload.indexOf("open") > 0) {
Serial.println("open");
digitalWrite(D3, HIGH);// 灭灯
} else if (payload.indexOf("close") > 0) {
Serial.println("close");
digitalWrite(D3, LOW); // 亮灯
} else {
Serial.println("find null");
}
[*]数值转换
由于HDC1080返回的数值是float(好像是double),需要转换成String才可以,发送到服务器。
//Temperature
float temp = hdc1080.readTemperature();
char tempstr;
sprintf(tempstr, "%.2f", temp);
String tempstring = tempstr;
[*]最终代码
DHC1080ESP8266.rar
四、服务器和小程序
每个人都架构服务器的语言不一样所以这里不贴出来,(主要我写得太烂了),小程序也是。这里主要提供一些思路,由于我使用是小程序,小程序正式上线,需要审核,所以我这里只是用了测试,另外小程序连的服务器需要有合法域名,最好有证书(https),所以不一定用服务器+小程序,可以直接本地架构一个服务器,采用网页式,或者像其他一样使用别人的一些物联网平台。
五、成果展示
主要接线实在太丑了,而且没有只有一个手机,有需要或有机会再补充图片或视频。
串口数据:
小程序:
六、补充
上面有说,由于ESP8266跟arduino的根脚有区别,具体详细的可以去查资料,这里补充一个ESP8266的iic的接线图。
看起来不错 麻雀虽小五脏俱全 单片机菜鸟 发表于 2019-9-20 09:08
看起来不错 麻雀虽小五脏俱全
博哥系列帮助很大,有什么问题都基本在里面可以找到解答,谢谢 Leslie1995 发表于 2019-9-20 09:53
博哥系列帮助很大,有什么问题都基本在里面可以找到解答,谢谢
https://blog.csdn.net/dpjcn1990以后可以参考这个 这个属于完整版本 单片机菜鸟 发表于 2019-9-20 10:42
https://blog.csdn.net/dpjcn1990以后可以参考这个 这个属于完整版本
好的,谢谢 请问一下,小程序连服务器是怎么操作的你是连接了什么服务器 cslcsl 发表于 2019-12-9 10:24
请问一下,小程序连服务器是怎么操作的你是连接了什么服务器
唔,微信小程序可能为了兼容IOS,所以标准是跟IOS系统一样,需要HTTPS,所以需要备案的域名,指向服务器。我的是腾讯云的服务器,已经备案过了。微信公众平台那边填写,小程序和其他一样通过get/post请求就可以了。 到时也试试测试这个传感器
页:
[1]