物联那点事儿专栏也要着手写啦。。
这次跟大家分享一下自制网络温湿度计的过程,当然这个作品也不是自己原创的,而且代码也是可以在点灯科技的官方文档里面找到的,当然我在模仿的过程中也认真地研究了一下工作原理。这里呢,跟大家分享一下我的过程以及我遇到的问题和解决的办法。
首先要说明一点,设备和手机使用不同的wifi也可使用其功能,也就意味着,不在家也可查看家里的温湿度。
 ;
图1-1 手机端app展示 图1-2实物展示
视频展示语音效果:点击观看
二、前期准备 1.采购配件 (1)esp8266烧录器一个。
图2-1esp8266烧录器 图2-2wifi模块esp01s 图2-3温湿度传感器DHT11
首先先了解一下esp8266烧录器。
转接板作用:可以将wifi模块连接到烧录器上,也可以将外部传感器和wifi模块连接。
转接板 | wifi模块esp01s | 转接板 | wifi模块esp01s |
---|---|---|---|
3v3 | 3v3 | RXD | RX |
RST | RST | IOO | IOO |
EN | EN | IO2 | IO2 |
TXD | TXD | GND | GND |
(2)用杜邦线将DHT11连接到转接板引脚上。
作用:将传感器获得的数据传输给wifi模块。
DHT11 | 转接板 | DHT11 | 转接板 | DHT11 | 转接板 |
---|---|---|---|---|---|
+ | 3v3 | - | GND | S(输出) | IO2 |
注:传感器的s输出口接转接板我这以IO2为例。
2.上传程序 可参考点灯科技官网: 点灯科技官网(2)安装esp8266扩展(如有安装可忽略)
(3)打开ardunio IDE,开发板选择esp8266Module,端口选择对应端口。
工具->开发板->esp8266Module
工具->端口->对应自己的端口(我这对应是COM5)
(4)获得手机点灯科技app的设备的key,写到代码中。
添加设备->arduino->wifi接入->复制key
(5)代码部分。代码详解写到注释里面了。
注:一定要添加blinker库和DHT库!!!没有添加库文件的话查看二、前期准备。
#include //包含Blinker头文件
#include //包含DHT头文件
#define BLINKER_WIFI //定义wifi模块
#define BLINKER_MIOT_SENSOR//小爱同学定义为传感器设备
#define DHTPIN 2 //定义DHT11模块连接管脚io2
#define DHTTYPE DHT11 // 使用温度湿度模块的类型为DHT11
char auth[] = "**********"; //你的设备key
char ssid[] = "**********"; //你的wifi 名称
char pswd[] = "**********"; //你的wifi 密码
//新建数据类型组件对象,作用:将数据传输到手机blinker app
BlinkerNumber HUMI("humi"); //定义湿度数据键名
BlinkerNumber TEMP("temp"); //定义温度数据键名
DHT dht(DHTPIN, DHTTYPE); //定义dht
float humi_read = 0, temp_read = 0;//定义浮点型全局变量 储存传感器读取的温湿度数据
void heartbeat()
{
HUMI.print(humi_read); //给blinkerapp回传湿度数据
TEMP.print(temp_read); //给blinkerapp回传温度数据
}
void miotQuery(int32_t queryCode) //小爱同学语音命令反馈
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
int humi_read_int=humi_read; //去掉湿度浮点数
BlinkerMIOT.humi(humi_read_int); //小爱反馈湿度属性
BlinkerMIOT.temp(temp_read); //小爱反馈温度属性
BlinkerMIOT.print();//将以上属性发送给小爱,使得小爱可以接收到温湿度的数据
}
void setup()//将设置代码放在此处,运行一次;
{
//初始化端口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
Blinker.begin(auth, ssid, pswd); // // 初始化blinker
Blinker.attachHeartbeat(heartbeat);//将传感器获取的数据传给blinker app上
dht.begin();//初始化DHT传感器
//在回调函数中反馈该控制状态
BlinkerMIOT.attachQuery(miotQuery);//每次呼出小爱同学,就会调用miotQuery()函数
}
//通过循环不断读取温湿度传感器获取的数据
void loop() //把主代码放在这里,重复运行:
{
Blinker.run();//运行Blinker
float h = dht.readHumidity();//读取DHT11传感器的湿度 并赋值给h
float t = dht.readTemperature();//读取传感器的温度 并赋值给t
if (isnan(h) || isnan(t))//判断是否成功读取到温湿度数据
{
BLINKER_LOG("Failed to read from DHT sensor!");//读取温湿度失败!
}
else//成功读取到数据
{
//打印
BLINKER_LOG("Humidity: ", h, " %");
BLINKER_LOG("Temperature: ", t, " *C");
humi_read = h;//将读取到的湿度赋值给全局变量humi_read
temp_read = t;//将读取到的温度赋值给全局变量temp_read
}
Blinker.delay(2000);//2秒延时
}
(6)编译。
点击左上角对号即可编译,点击编辑,下拉菜单也有。
(7)上传程序。
有人会问到给esp8266烧固件的问题,这里呢通过arduino IDE 点击上传的时候直接就给esp8266烧固件了。
注:一定要检查开发板选项和端口,不用烧录程序,上传即可。
1.一开始我以为需要烧录程序,发现出错,一直解决不了,最后发现只上传程序即可,不必烧录。
2.编译中遇到的问题基本同c语言相似,这里强调一点,添加Blinkder库和DHT库!!!
3…编译没错,上传的时候出现espcomm_upload_men failed问题或者是数字签名出错,可以按一下esp8266烧录器的白色复位键,再烧录,多试几次,如果还是出现这个问题,那可能就是wifi模块的问题了。
(1)可以通过代码实现记录最近几台的温湿度,并传给点灯科技app,做出曲线图。
(2)点灯科技不光支持小爱语音输入,同时还支持天猫精灵和百度小度,修改添加语音输入可添加代码即可。
第一次接触ardunio和硬件编程,使用的配件也是刚刚接触的,在使用期间也遇到了不少问题,遇到问题去解决的过程也很艰难,有的问题百度上也找不到答案,就比如我一开是遇到的那个不用烧录直接上传的问题,我一直没找到解决方法,一根筋走到天黑,后来才知道答案。中途换了好几次零件,买回来发现并不能用,关于稳定问题最让我头疼,一样的代码,重新上传可能也会造成不稳定传输。即使设备在线,小爱同学有可能和设备连接不上,时断时连,我怀疑是我手机不是小米的过,或者是wifi模块的过,过程基本没问题,还是得去进行大量的实验去发现问题。