查看: 44595|回复: 47

[使用文档] [Arduino物联网开发实战4]天猫精灵控制1

[复制链接]

该用户从未签到

发表于 2019-1-13 23:58 | 显示全部楼层 |阅读模式

上一篇:blinker开发实战3-语音、定时与设备共享

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,在下方导航栏,点 我的 > 添加智能设备
app1.png
2.搜索blinker,并点击要添加的设备类型
QQ截图20190505133029.jpg
3.点击绑定账号
app3.png
4.使用blinker账号密码登录,并完成绑定
app4.png

现在,可以对天猫精灵说,“天猫精灵读出传感器数据”或者“天猫精灵,传感器数据是多少”、“天猫精灵查询温湿度数据”等,都可以让天猫精灵播报当前传感器数据。

下一篇:blinker开发实战4-天猫精灵控制2



该用户从未签到

发表于 2019-2-11 13:33 | 显示全部楼层
厉害了,支持一个

该用户从未签到

发表于 2019-2-12 15:00 | 显示全部楼层
手里只有小爱!貌似开发小爱不对普通用户,看来要淘个天猫精灵了!

点评

哈哈,同感!入手了一个小爱闹钟,要是以后支持接入就方便很多了  发表于 2019-2-12 15:56

该用户从未签到

发表于 2019-2-12 16:58 | 显示全部楼层
ecstart 发表于 2019-2-12 15:00
手里只有小爱!貌似开发小爱不对普通用户,看来要淘个天猫精灵了!

关键是感觉 国内小米才是智能家居一霸!而且已经习惯了小爱,天猫精灵其实不贵,只是感觉家里两个品牌智能音箱 总感觉怪怪的,我们要去适应它了。。。

该用户从未签到

发表于 2019-4-9 16:26 | 显示全部楼层
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_SENSOR
这里我们只能声明设备为传感器么?能不能同时声明设备为传感器、灯和插座?
因为设备可能是综合的呀~

签到天数: 1 天

[LV.1]初来乍到

发表于 2019-4-9 17:19 | 显示全部楼层
jpolo 发表于 2019-4-9 16:26
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_SENSOR
这里我们只能声明设备为传感器么?能不能同时声明设 ...

不能,这是天猫精灵的限制
详见:
https://doc-bot.tmall.com/docs/d ... 08271&docType=1

该用户从未签到

发表于 2019-4-18 15:30 | 显示全部楼层
目前新版本天猫精灵APP好像没有这绑定选项了,哎

点评

一样的,只是UI变了,选灯,再选blinker就行了,变通下吧  详情 回复 发表于 2019-4-18 17:13

该用户从未签到

 楼主| 发表于 2019-4-18 17:13 | 显示全部楼层
brt2017 发表于 2019-4-18 15:30
目前新版本天猫精灵APP好像没有这绑定选项了,哎

一样的,只是UI变了,选灯,再选blinker就行了,变通下嘛

该用户从未签到

发表于 2019-4-30 11:41 | 显示全部楼层
奈何col 发表于 2019-4-18 17:13
一样的,只是UI变了,选灯,再选blinker就行了,变通下嘛

是滴是滴

该用户从未签到

发表于 2019-10-13 21:43 | 显示全部楼层
可以做货运无人机吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

ESP8266结合blinker使用小爱同学电脑远程开机
ESP8266结合blinker使用小
blinker是点灯科技开发的面向广大物联网爱好者和创客公司研发的APP,可以安全快速有效
【Arduino】168种传感器模块系列实验(159)---MAX9814咪头传感器
【Arduino】168种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
【干货分享】mega2560原理图PCB图纸altium designer18
【干货分享】mega2560原理
分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
【限时免费领】1000 块 Wi-Fi+BLE MCU 开发板
【限时免费领】1000 块 Wi
有! >>涂鸦智能 Wi-Fi+BLE MCU 开发板
Stduino UNO mini来了,你确定不了解下嘛
Stduino UNO mini来了,你
Stduino UNO mini基于Arduino UNO板型支持数字式调用引脚,例如:pinMode(13,OUTPUT)
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表