[md]
上一篇:[blinker开发实战3-语音、定时与设备共享](https://www.arduino.cn/thread-83175-1-1.html)
blinker支持多种智能音响控制,如天猫精灵、百度小度、小米小爱、京东叮咚等。
这里以天猫精灵控制为例,blinker DIY支持将设备模拟成三种类型的智能家居:插座、灯、传感器。
Blinker支持多种语音助手控制,如天猫精灵、百度小度,本节以天猫精灵控制为例。
**添加设备时,请选择 阿里云broker,点灯broker暂不支持语音控制**
## 天猫精灵基本接入方法
通常语音助手都是对特定的设备类型进行支持,确定设备类型后,才能响应对应的语音指令。使用blinker方案开发设备,也需要先设定设备类型,支持的设备类型如下:
| 设备类型 | 支持功能 | blinker宏 |
| -------- | :--------------------------------: | ----------------------- |
| 传感器 | 可以查询传感器获取到的数据 | BLINKER_ALIGENIE_SENSOR |
| 灯 | 开关灯、设置颜色、亮度、色温、模式 | BLINKER_ALIGENIE_LIGHT |
| 插座 | 开关设备 | BLINKER_ALIGENIE_OUTLET |
如,将设备设定为传感器类型:
```
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_SENSOR
```
定义类型后,即可使用对象**BlinkerAliGenie**,进行相关操作。
例如传感器类型的设备,支持状态查询操作,和对UI组件的操作类似,也需要编写并注册回调函数。可使用
```
BlinkerAliGenie.attachQuery(aligenieQuery)
```
语句注册一个数据查询回调函数。完成注册操作后,每次天猫精灵收到对应语音指令,即会触发aligenieQuery回调函数。
状态查询回调函数如下:
```
void aligenieQuery(int32_t queryCode)
{
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.humi(humi_read);
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BlinkerAliGenie.humi(humi_read);
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.temp(20);
BlinkerAliGenie.humi(20);
BlinkerAliGenie.print();
break;
}
}
```
每次天猫精灵收到查询指令后,都会转发到设备上,例如当说“查询温度”、“温度多少”,设备对应收到的queryCode为BLINKER_CMD_QUERY_TEMP_NUMBER,可以自定义该指令对应的设备动作。
本示例中,使用
```
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.print();
```
返回当前温度状态。
完整示例如下:
```
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_SENSOR
#include <Blinker.h>
#include <DHT.h>
char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID or name";
char pswd[] = "Your WiFi network WPA password or WEP key";
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
#define DHTPIN D7
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float humi_read = 0, temp_read = 0;
void heartbeat()
{
HUMI.print(humi_read);
TEMP.print(temp_read);
}
void aligenieQuery(int32_t queryCode)
{
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.humi(humi_read);
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BlinkerAliGenie.humi(humi_read);
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.temp(20);
BlinkerAliGenie.humi(20);
BlinkerAliGenie.print();
break;
}
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Blinker.begin(auth, ssid, pswd);
Blinker.attachHeartbeat(heartbeat);
BlinkerAliGenie.attachQuery(aligenieQuery);
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);
}
```
## 天猫精灵端配置
设备上线后,还需要在天猫精灵App中绑定blinker账号,方法如下:
1.打开天猫精灵App,在下方导航栏,点 **我的** > **添加智能设备**
2.搜索blinker,并点击要添加的设备类型
3.点击绑定账号
4.使用blinker账号密码登录,并完成绑定
现在,可以对天猫精灵说,“天猫精灵读出传感器数据”或者“天猫精灵,传感器数据是多少”、“天猫精灵查询温湿度数据”等,都可以让天猫精灵播报当前传感器数据。
下一篇:[blinker开发实战4-天猫精灵控制2](https://www.arduino.cn/thread-83828-1-1.html)
[/md]
|