效果
通过小爱同学询问温湿度情况(天猫精灵或者小度小艺也可,具体调用方法可以看blinker api文档)。
准备
- Esp8266 node MCU
- dht11温湿度传感器(也可以用DHT22或者AM23系列)
- blinker库、dht库
- android blinker app
#define BLINKER_WIFI
#define BLINKER_MIOT_SENSOR //接入小爱同学
#include <Blinker.h>
#include <DHT.h>
char auth[] = "8f4520ad443e"; //blinker app 对应的开发板
char ssid[] = "<wifi帐号>"; //填入wifi帐号
char pswd[] = "<wifi密码>"; //填入wifi密码
BlinkerNumber HUMI("humi"); //使用数据(number)组件,命名为HUMI,key为humi
BlinkerNumber TEMP("temp"); //使用数据(number)组件, 命名为TEMP,key为temp
#define DHTPIN D7 //数据传输口定义D7,用于传输温湿度数据
#define DHTTYPE DHT11 // DHT 11 //使用DHT11模块
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE); //让dht模块知道传输引脚和实物模块类型
float humi_read = 0, temp_read = 0; //定义温适度的类型和初始值
//心跳包函数,用来同步数据,一切反馈由用户端发起,以节约服务器资源(所以数值不是连续显示的)
//每次打开app都是从0开始显示,然后读取到新的值
void heartbeat()
{
HUMI.print(humi_read); //主动读取湿度数据
TEMP.print(temp_read); //主动读取温度数据
HUMI.icon("fas fa-tint");
TEMP.icon("fas fa-temperature-low");
}
/*
使用小爱同学唤醒后,通过如下沟通:
{传感器名称}+室内+{温度}{湿度}
*/
void miotQuery(int32_t queryCode) //小爱同学接入
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_PM25_NUMBER :
BLINKER_LOG("MIOT Query PM25");
BlinkerMIOT.pm25(20);
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BLINKER_LOG("MIOT Query HUMI");
BlinkerMIOT.humi(20);
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BLINKER_LOG("MIOT Query TEMP");
BlinkerMIOT.temp(20);
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.temp(20);
BlinkerMIOT.humi(20);
BlinkerMIOT.pm25(20);
BlinkerMIOT.co2(20);
BlinkerMIOT.print();
break;
}
}
void dataStorage() //储存历史数据,可以通过表格显示历史走势
{
Blinker.dataStorage("temp", temp_read);
Blinker.dataStorage("humi", humi_read);
}
void setup()
{
//初始化串口
Serial.begin(115200);
//打开调试功能
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
//初始化blink
Blinker.begin(auth, ssid, pswd);
Blinker.attachHeartbeat(heartbeat);
BlinkerMIOT.attachQuery(miotQuery); //接入小爱同学
Blinker.attachDataStorage(dataStorage); //存储数据
dht.begin();
}
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(2000);
}