一、背景
很久以前购买的DHT11温湿度传感器,被无情遗忘。终于在今天倒腾器件时,给翻了出来。压箱这么久,也是亏欠了这位小老弟,怎么也得让它实现点自我价值才行啊!想了很久,这玩意似乎也只能做点温湿度检测的活了。说干就干,那就让你继续做温湿度数据上报吧!以后有更好的想法的时候,再让你实现更多的价值!
二、实现原理
本次使用到的器件如下:
- ESP8266 WIFI模块
- DHT11 温湿度传感器模块
- 3.3~5.0V电源适配器
ESP8266通过DHT11将温湿度数据监测,并上传至blinker物联网平台,同时在APP端显示对应的数据。PS:实现原理极为简单,不复杂,体验电子DIY的快乐,才是我们玩电子的初衷嘛!
三、电路连接
![88fafe796f31d9ff9cf73f0d86915805.png](https://img-blog.csdnimg.cn/img_convert/88fafe796f31d9ff9cf73f0d86915805.png)
网上直接购买的模块,上电即用
四、APP配置
![c10de3d169d5a70fc563a77191444c16.png](https://img-blog.csdnimg.cn/img_convert/c10de3d169d5a70fc563a77191444c16.png)
APP端配置,两个图表组件即可
五、编码实现
#define BLINKER_WIFI#include #include // 定义温湿度传感器引脚#define DHTPIN 2#define DHTTYPE DHT11// 认证信息char auth[] = "XXXXXXXX";char ssid[] = "XXXXXXXX";char pswd[] = "XXXXXXXX";// 创建组件BlinkerNumber HUMI("humi");BlinkerNumber TEMP("temp");// DHT11初始化DHT dht(DHTPIN, DHTTYPE);uint32_t read_time = 0;float humi_read, temp_read;// 数据读取void dataRead(const String & data){ BLINKER_LOG("Blinker readString: ", data); Blinker.vibrate(); uint32_t BlinkerTime = millis(); Blinker.print("millis", BlinkerTime);}// 温湿度数据发送void heartbeat(){ HUMI.print(humi_read); TEMP.print(temp_read);}void setup(){ Serial.begin(115200); BLINKER_DEBUG.stream(Serial); Blinker.begin(auth, ssid, pswd); Blinker.attachData(dataRead); Blinker.attachHeartbeat(heartbeat); dht.begin();}void loop(){ Blinker.run(); if (read_time == 0 || (millis() - read_time) >= 2000) { read_time = millis(); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { BLINKER_LOG("Failed to read from DHT sensor!"); return; } float hic = dht.computeHeatIndex(t, h, false); humi_read = h; temp_read = t; BLINKER_LOG("Humidity: ", h, " %"); BLINKER_LOG("Temperature: ", t, " *C"); BLINKER_LOG("Heat index: ", hic, " *C"); }}
六、展望一下
其实DHT11也不能说一点用都没有,曾经用它实现过一个想法:通过DHT11采集室内温度,并上报,然后通过米家的多个设备设置自动化任务,最后实现在一定温度条件下控制某个插座或者开关打开。尤其针对南方的东西,尤为有效的。每天定时、定温度将电热毯打开,等你到床上躺着的时候,那叫一个舒服,一个享受!各位小伙伴还可以有其他想法,通过物联网平台的各种自动化、智能化任务,使多个设备联动,从而达到一个物物联通为自己服务,岂不快哉!