查看: 633|回复: 0

[ESP32+MicroPython]智能音响控制

[复制链接]
  • TA的每日心情
    奋斗
    2019-7-12 18:42
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-8-5 05:12 | 显示全部楼层 |阅读模式

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

    示例程序及blinker模块

    你可以通过github获取blinker相关示例和模块  https://github.com/blinker-iot/blinker-mpy

    天猫精灵基本接入方法

    通常语音助手都是对特定的设备类型进行支持,确定设备类型后,才能响应对应的语音指令。使用blinker方案开发设备,也需要先设定设备类型,支持的设备类型如下:

    设备类型 支持功能 blinker宏
    传感器 可以查询传感器获取到的数据 BLINKER_ALIGENIE_SENSOR
    开关灯、设置颜色、亮度、色温、模式 BLINKER_ALIGENIE_LIGHT
    插座 开关设备 BLINKER_ALIGENIE_OUTLET

    如,将设备设定为插座类型:

    Blinker.aliType('BLINKER_ALIGENIE_OUTLET')

    定义类型后,即可使用对象BlinkerAliGenie,进行相关操作。

    例如传感器类型的设备,支持状态查询操作,和对UI组件的操作类似,也需要编写并注册回调函数。可使用

    BlinkerAliGenie.attachPowerState(aligeniePowerState)
    BlinkerAliGenie.attachQuery(aligenieQuery)

    语句注册一个数据查询回调函数。完成注册操作后,每次天猫精灵收到对应语音指令,即会触发aligenieQuery回调函数。

    状态查询回调函数如下:

    def aligeniePowerState(state):
        ''' '''
    
        BLINKER_LOG('need set power state: ', state)
    
        BlinkerAliGenie.powerState(state)
        BlinkerAliGenie.print()
    
    def aligenieQuery(queryCode):
        ''' '''
    
        BLINKER_LOG('AliGenie Query codes: ', queryCode)
    
        if queryCode == BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG('AliGenie Query All')
            BlinkerAliGenie.powerState(oState)
            BlinkerAliGenie.print()
        elif queryCode == BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG('AliGenie Query Power State')
            BlinkerAliGenie.powerState(oState)
            BlinkerAliGenie.print()
        else :
            BlinkerAliGenie.powerState(oState)
            BlinkerAliGenie.print()
    

    完整示例如下:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from machine import Pin
    
    from Blinker.Blinker import Blinker, BlinkerButton, BlinkerNumber, BlinkerAliGenie
    from Blinker.BlinkerConfig import *
    from Blinker.BlinkerDebug import *
    
    # 此处填入blinker app中获取的密钥
    auth = 'Your Device Secret Key'
    ssid = 'Your WiFi network SSID or name'
    pswd = 'Your WiFi network WPA password or WEP key'
    
    BLINKER_DEBUG.debugAll()
    
    Blinker.mode('BLINKER_WIFI')
    Blinker.aliType('BLINKER_ALIGENIE_OUTLET')
    Blinker.begin(auth, ssid, pswd)
    
    button1 = BlinkerButton('btn-abc')
    number1 = BlinkerNumber('num-abc')
    
    counter = 0
    pinValue = 0
    oState = 'on'
    
    p2 = Pin(2, Pin.OUT)
    p2.value(pinValue)
    
    def aligeniePowerState(state):
        ''' '''
    
        BLINKER_LOG('need set power state: ', state)
    
        BlinkerAliGenie.powerState(state)
        BlinkerAliGenie.print()
    
    def aligenieQuery(queryCode):
        ''' '''
    
        BLINKER_LOG('AliGenie Query codes: ', queryCode)
    
        if queryCode == BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG('AliGenie Query All')
            BlinkerAliGenie.powerState(oState)
            BlinkerAliGenie.print()
        elif queryCode == BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG('AliGenie Query Power State')
            BlinkerAliGenie.powerState(oState)
            BlinkerAliGenie.print()
        else :
            BlinkerAliGenie.powerState(oState)
            BlinkerAliGenie.print()
    
    def button1_callback(state):
        ''' '''
    
        BLINKER_LOG('get button state: ', state)
    
        button1.icon('icon_1')
        button1.color('#FFFFFF')
        button1.text('Your button name or describe')
        button1.print(state)
    
        global pinValue
    
        pinValue = 1 - pinValue
        p2.value(pinValue)
    
    def data_callback(data):
        global counter
    
        BLINKER_LOG('Blinker readString: ', data)
        counter += 1
        number1.print(counter)
    
    button1.attach(button1_callback)
    Blinker.attachData(data_callback)
    
    BlinkerAliGenie.attachPowerState(aligeniePowerState)
    BlinkerAliGenie.attachQuery(aligenieQuery)
    
    if __name__ == '__main__':
    
        while True:
            Blinker.run()

    天猫精灵端配置

    设备上线后,还需要在天猫精灵App中绑定blinker账号,方法如下:

    1.打开天猫精灵App,在下方导航栏,点 我的 > 添加智能设备  

    2.搜索blinker,并点击要添加的设备类型

    3.点击绑定账号

    4.使用blinker账号密码登录,并完成绑定

    现在,可以对天猫精灵说,“天猫精灵打开插座”或者“天猫精灵,查询插座状态”等,都可以让天猫精灵播报当前传感器数据。

    你还是通过阅读开发文档和示例,可以将设备设为灯或传感器




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

    本版积分规则

    热门推荐

    Blynk与m5stack basic以及uiflow的交互玩法
    Blynk与m5stack basic以及
    Blynk与m5stack basic以及uiflow的交互玩法 [准备工作我们假设玩家已经熟悉下面的准备
    中文 字库 的8针 OLED 12864模块 arduino
    中文 字库 的8针 OLED 128
    屏幕电路SPI连线: 中文字库OLED Arduino UNO GND GND
    【零知ESP8266项目篇】1 OLED天气时钟
    【零知ESP8266项目篇】1 O
    引述: 我们一起学了这么久的零知ESP8266的教程,是不是该检验一下自己了呢?在前面的
    创客集结号:温馨水杯
    创客集结号:温馨水杯
    今天,在创客集结号平台看到一个能自动感应的杯子,不仅神奇还非常有创意,该作品主要
    下载库报错
    下载库报错
    我在编写arduino1602液晶屏温湿度下载DHT_sensor_library库时,下载了库后,还没有改
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表