利用ESP8266读DHT11温湿度
首先,本项目是以以下四篇文章作为参考(基本就是按照这个来的,稍微修改了一些) 链接如下 【巴法云】开源安卓App控制ESP8266,通过MQTT协议,APP Inventor 开发 利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示 ESP8266读DHT11温湿度,开发微信小程序实时显示 利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示
闲聊:我在帮我室友做毕设的时候发现的,他的题目就是这个智能浇花系统,大概就是一个测温湿度还有一个就是驱动这个电机浇水,这个确实挺简单的,之前APP端准备用易安卓写,但想着有没有现成的(O(∩_∩)O哈哈~),结果还真找到了。 也有好长一段时间没有写过博客了,之前由于大四实习一直没有功夫去弄这个,现在换了一份轻松点的工作,终于可以静下心来进行学习了。在找到这一份工作之前也经历了一些变故,也实实在在的影响到了我,但回过头来还是发现,人在学习的时候是心情最安静也是最舒服的,希望大家一起共勉!!!
好了,废话不多说,先测试DHT11,首先arduino IDE上得装一个库Simple DHT传感器库 测试程序:
#include <SimpleDHT.h>
int pinDHT11 = D4;
SimpleDHT11 dht11(pinDHT11);
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("=================================");
Serial.println("Sample DHT11...");
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("Sample OK: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
delay(1500);
}
上传到APP端
整体代码: 链接:https://pan.baidu.com/s/1DnC44mvc_GDg0oMtgqZA9A?pwd=wrwh 提取码:wrwh 包括arduino和APP Inventor代码 ESP8266的 D4引脚慎用,我感觉没其他引脚控制稳定,D4引脚为NodeMCU控制那个蓝灯的那个对应引脚 同时ESP8266给其他元器件供电时,选用RX,TX旁边的3V3 GND ,之前选择EN旁边的GND和VCC容易供电不稳
巴法云提供得代码是把数据通过TCP上传到服务器,然后用微信小程序显示与控制,还有一个版本是用APP Inventor显示但没有控制,我就是把这个APP Inventor添加了一个控制的作用,即通过APP给硬件发消息 详细看看逻辑设计, 框框中,我改变了之前只订阅一个主题的情况,修改为订阅temp和dian,这样APP既可以接收到temp发来的消息,也能通过dian发给硬件端消息(注意cmd=1,而不是cmd=3,具体看下面消息格式就懂了)
我还加了下面两个东西
当按钮被按下时,像APP发送以下消息,为什么要以这种格式发呢?看下面就知道了 这个topic后面接的‘dian’是因为我设置的收消息的topic叫这个名字,各位需要根据自己设计的进行更改
之前巴法云的APP Inventor设计的topic固定为‘temp’,我修改为订阅了两个topic,然后像专门收消息的topic发送开关指令即可实现相应开关状态。
下面是巴法云的TCP创客云的消息格式
TCP服务器地址IP: bemfa.com 服务器端口:8344 订阅主题,单次最多订阅八个主题(可以订阅多个,虽然是废话) cmd=1&uid=xxxxxxxxxxxxxxxxxxxxxxx&topic=xxx1,xxx2,xxx3,xxx4\r\n 正常返回: cmd=1&res=1
发布信息格式 cmd=2&uid=xxxxxxxxxxxxxxxxxxxxxxx&topic=light002&msg=off\r\n 正常返回: cmd=2&res=1(不发送也返回这个玩意)
订阅主题,并获取一条历史消息 cmd=3&uid=xxxxxxxxxxxxxxxxxxxxxxx&topic=light002\r\n 正常返回: cmd=3&uid=xxxxxxxxxxxxxxxxxxxxxxx&topic=light002&msg=on
获取一次时间 cmd=7&uid=xxxxxxxxxxxxxxxxxxxxxxx&type=1\r\n 正常返回: 2021-06-11 16:39:27
获取一次已发消息 cmd=9&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n 正常返回: cmd=9&uid=xxxxxxxxxxxxxxxxxxxxxxx&topic=light002&msg=on
发送心跳 ping\r\n 正常返回: cmd=0&res=1
通过上述可以看出 我们发送需要发送 cmd=2&uid=xxxxxxxxxxxxxxxxxxxxxxx&topic=light002&msg=off\r\n 这个字符串 其中只有‘&msg=off’会被处理,前面都是前缀会被自动省略 这是arduino代码里面接收TCP发送的字符串,我们设置检测到&msg=on就打开反之则关闭
硬件端
抽水泵用继电器连接着,这里没有画出来,除了DHT11以外都是NodeMCU上自带的,不用管
|