本帖最后由 17865566707 于 2020-3-16 15:48 编辑
一、开发环境搭建
1.1 Arduino IDE(建议此论坛搜索最新版或者在Arduino官网下载最新版本:https://www.arduino.cc/)
1.2 安装blinker Arduino库(https://doc.blinker.app/?file=001-快速开始/02-esp8266-WiFi接入)
下载.zip文件,解压缩到ARDUINO安装目录的“libraries”文件夹中。
1.3 安装DHT库(见附件)
下载.zip文件,解压缩到ARDUINO安装目录的“libraries”文件夹中。
1.4 安装ESP8266支持包(https://github.com/esp8266/Arduino/releases)
下载.exe文件,双击自动安装就可以。
1.5 安装blinker APP(https://doc.blinker.app/?file=001-快速开始/02-esp8266-WiFi接入)
二、程序设计
#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG//采用EspTouch/SmartConfig方式配网
#define BLINKER_DUEROS_SENSOR
#include <Blinker.h>
#include <DHT.h>
char auth[] = "XXXXXXXXX";
BlinkerNumber HUMI("humi"); //定义湿度数据键名
BlinkerNumber TEMP("temp"); //定义温度数据键名
#define DHTTYPE DHT11 // 使用DHT 11温度湿度模块
#define DHTPIN 2 //定义DHT11模块连接管脚io2
DHT dht(DHTPIN, DHTTYPE, 11);//定义DHT
float humi_read = 0, temp_read = 0;
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
Blinker.begin(auth);
Blinker.attachData(dataRead);
Blinker.attachHeartbeat(heartbeat);
dht.begin();
BlinkerDuerOS.attachQuery(duerQuery);
}
void loop()
{
Blinker.run();
float h = dht.readHumidity();
float t = dht.readTemperature();
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;
temp_read = t;
}
Blinker.delay(100);
}
void heartbeat() //心跳包
{
if (humi_read < 45)
{
HUMI.color("#DC143C");//红
HUMI.unit("%RH(干燥)");
}
else if (humi_read > 75)
{
HUMI.color("#1E90FF");//蓝
HUMI.unit("%RH(湿润)");
}
else
{
HUMI.color("#00DE00");//绿
HUMI.unit("%RH(舒适)");
}
if (temp_read < 15)
{
TEMP.color("#1E90FF");//蓝
TEMP.unit("℃(寒冷)");
}
else if (temp_read > 25)
{
TEMP.color("#DC143C");//红
TEMP.unit("℃(炎热)");
}
else
{
TEMP.color("#00DE00");//绿
TEMP.unit("℃(舒适)");
}
HUMI.print(humi_read ); //给blinker app回传湿度数据
TEMP.print(temp_read ); //给blinker app回传温度数据
}
void duerQuery(int32_t queryCode)
{
BLINKER_LOG("DuerOS Query codes: ", queryCode);
int humi_read_int = humi_read; //去掉湿度浮点
switch (queryCode)
{
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BLINKER_LOG("DuerOS Query HUMI");
BlinkerDuerOS.humi(humi_read_int + 7); //小度接收湿度
BlinkerDuerOS.print();
break;
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BLINKER_LOG("DuerOS Query TEMP");
BlinkerDuerOS.temp(temp_read - 7); //小度接收温度
BlinkerDuerOS.print();
break;
case BLINKER_CMD_QUERY_TIME_NUMBER :
BLINKER_LOG("DuerOS Query time");
BlinkerDuerOS.time(millis()); //小度接收运行时间
BlinkerDuerOS.print();
break;
default :
BlinkerDuerOS.temp(0);
BlinkerDuerOS.humi(0);
BlinkerDuerOS.time(millis());
BlinkerDuerOS.print();
break;
}
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
程序说明:1.配网方式由直接写入程序改为采用EspTouch/SmartConfig方式配网,使用更加方便。
2.加入了根据测量数据划分三个区间的逻辑判断,反馈汉字及颜色到手机APP(因为数字组件不能回传文字信息,曲线救国将文字放在了单位里一起回传)。
3.所有状态反馈均放在了心跳包里,所以理论上30~60秒自动反馈一次测量结果。
三、用到的硬件
1.ESP8266-01s模块(https://m.tb.cn/h.V4BejDe?sm=07fb46 )
2.DHT11 温湿度WiFi节点模块(https://m.tb.cn/h.V49AD6i?sm=f2305f )
3.8266烧录器(https://m.tb.cn/h.V4BfGqS?sm=2245f2 )
注:链接仅供参考,可以自行寻找更合适的。
四、具体制作过程
1.连接ESP-01S和下载器,插入电脑USB口
2.打开手机APP,添加DIY设备 arduino,WiFi接入,复制key
3.打开ide,将key复制到程序里替换 4.下载程序到esp-01s 5.将01s和DHT组装,接入3.7~5v直流电源 6.打开手机APP,点击左上角,开发者,开发工具,使用第一个方式配置网络 7.配网成功后即可在添加的设备详情里看到回传的数据
最后,即可在APP中看到测量数据反馈+APP舒适度反馈+小度音箱(想接入小爱、天猫的话修改起来也很简单)语音查询数据了!
|