查看: 6131|回复: 9

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

[复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

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

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

    blinker支持多种智能音响控制,如天猫精灵、百度小度、小米小爱、京东叮咚等。
    这里以天猫精灵控制为例,blinker DIY支持将设备模拟成三种类型的智能家居:插座、灯、传感器。
    Blinker支持多种语音助手控制,如天猫精灵、百度小度,本节以天猫精灵控制为例。

    天猫精灵基本接入方法

    通常语音助手都是对特定的设备类型进行支持,确定设备类型后,才能响应对应的语音指令。使用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



    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    开心
    2019-2-11 13:28
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-2-11 13:33 | 显示全部楼层
    厉害了,支持一个
  • TA的每日心情
    开心
    2019-9-4 11:17
  • 签到天数: 52 天

    [LV.5]常住居民I

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

    点评

    哈哈,同感!入手了一个小爱闹钟,要是以后支持接入就方便很多了  发表于 2019-2-12 15:56
  • TA的每日心情
    开心
    2019-9-4 11:17
  • 签到天数: 52 天

    [LV.5]常住居民I

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

    关键是感觉 国内小米才是智能家居一霸!而且已经习惯了小爱,天猫精灵其实不贵,只是感觉家里两个品牌智能音箱 总感觉怪怪的,我们要去适应它了。。。
  • TA的每日心情
    开心
    2019-9-10 14:05
  • 签到天数: 61 天

    [LV.6]常住居民II

    发表于 2019-4-9 16:26 | 显示全部楼层
    #define BLINKER_WIFI
    #define BLINKER_ALIGENIE_SENSOR
    这里我们只能声明设备为传感器么?能不能同时声明设备为传感器、灯和插座?
    因为设备可能是综合的呀~
  • TA的每日心情
    奋斗
    2019-7-12 18:42
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 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
    如果你觉得以上内容帮到了你,你可以打赏支持作者
  • TA的每日心情
    开心
    2019-7-15 17:13
  • 签到天数: 7 天

    [LV.3]偶尔看看II

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

    点评

    一样的,只是UI变了,选灯,再选blinker就行了,变通下吧  详情 回复 发表于 2019-4-18 17:13
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

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

    一样的,只是UI变了,选灯,再选blinker就行了,变通下嘛
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    开心
    2019-7-15 17:13
  • 签到天数: 7 天

    [LV.3]偶尔看看II

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

    是滴是滴
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    求ESP8266+0.96oled的天气代码
    求ESP8266+0.96oled的天气
    新人求助
    新人求助
    仿真出错!显示原因是这个,但是找不到该出错文件
    用Arduino制作支持ROS机器人操作系统的7轴机械臂
    用Arduino制作支持ROS机器
    参赛项目:[/backcolor] 用Arduino制作支持ROS机器人操作系统的7轴机械臂[/backcolor
    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    光敏电阻检测环境光实验
    光敏电阻检测环境光实验
    本文节选自《Arduino程序设计基础》 一些简单的电子元件就可以做传感器使用,例如我
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表