[ESP32+MicroPython]智能音响控制-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5488|回复: 1

[ESP32+MicroPython]智能音响控制

[复制链接]
发表于 2019-8-5 05:12 | 显示全部楼层 |阅读模式
[md]blinker支持多种智能音响控制,如天猫精灵、百度小度、小米小爱、京东叮咚等。
这里以天猫精灵控制为例,blinker DIY支持将设备模拟成三种类型的智能家居:插座、灯、传感器。
Blinker支持多种语音助手控制,如天猫精灵、百度小度,本节以天猫精灵控制为例。

## 示例程序及blinker模块  
你可以通过github获取blinker相关示例和模块  [https://github.com/blinker-iot/blinker-mpy](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账号密码登录,并完成绑定





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

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


发表于 2021-12-23 08:58 | 显示全部楼层
請教這個天猫的範例適用小愛嗎?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:29 , Processed in 0.245241 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表