pdf-icon

Arduino 上手教程

2. 设备开发 & 案例程序

6. 应用案例

Module ASR Arduino 使用教程

1.准备工作

2.注意事项

引脚兼容性
由于每款主机的引脚配置不同,使用前请参考产品文档中的引脚兼容表,并根据实际引脚连接情况修改案例程序。

3.案例程序

  • 本教程中使用的主控设备为 CoreS3-SE ,搭配 Module ASR 实现语音交互。使用前请参考下图,将引脚拨码开关,切换到指定位置。

3.1 引脚拨码开关

Module ASR 采用串口的方式通讯,根据实际的电路连接修改程序中的引脚定义,设备连接后对应的串口 IO 为 G18 (RX)G17 (TX),实物引脚拨码开关位置如下图所示:

3.2 IO 端口

  • Module ASR 具有 5 路 IO 端口,可通过语音命令控制对应 IO 输出高低电平或通过 IO 输入触发特定语音回应,IO 端口如下图所示:

3.3 程序代码

Module ASR 支持语音、串口唤醒与命令输入,并通过语音及串口返回当前的相关指令信息。Module ASR 默认固件中预置了一些命令词, 不局限于下方的 turn off 等命令,具体请见 Module ASR 出厂预设命令

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#include <M5Unified.h>
#include <unit_asr.hpp>

ASRUnit asr;

void turnOnHandler()
{
    Serial.println("turn on command received!");
    M5.Display.clear();
    M5.Display.drawCenterString("turn off!", 160, 110);
}

void turnOffHandler()
{
    Serial.println("turn off command received!");
    M5.Display.clear();
    M5.Display.drawCenterString("turn off!", 160, 110);
}

void wakeupHandler()
{
    Serial.println("wakeup command received!");
    M5.Display.clear();
    M5.Display.drawCenterString("wakeup!", 160, 110);
}

void PA2_HighHandler()
{
    Serial.println("set PA2 level to high");
    M5.Display.clear(TFT_GREEN);
    M5.Display.drawCenterString("PA2 level: high", 160, 110);
}

void PA2_LowHandler()
{
    Serial.println("set PA2 level to low");
    M5.Display.clear(TFT_YELLOW);
    M5.Display.drawCenterString("PA2 level: low", 160, 110);
}

void AddHandler()
{
    Serial.println("Add command received!");
    M5.Display.clear();
    M5.Display.drawCenterString("Add", 160, 110);
}

void PA4_InputHandler()
{
    Serial.println("PA4 key pressed");
    M5.Display.clear();
    M5.Display.drawCenterString("PA4 key pressed", 160, 110);
}

void setup()
{
    M5.begin();
    M5.Display.setFont(&fonts::FreeMonoBold12pt7b);
    Serial.begin(115200);
    asr.begin(&Serial1, 115200, 18, 17);
    asr.addCommandWord(0x14, "turn on", turnOnHandler);
    asr.addCommandWord(0x15, "turn off", turnOffHandler);
    asr.addCommandWord(0x31, "Hi,ASR", wakeupHandler);
    asr.addCommandWord(0x32, "hello", wakeupHandler);
    asr.addCommandWord(0x50, "PA2 high level", PA2_HighHandler);
    asr.addCommandWord(0x51, "PA2 low level", PA2_LowHandler);
    asr.addCommandWord(0xFF, "Hi,M Five", wakeupHandler);
    asr.addCommandWord(0x33, "Add", AddHandler);
    asr.addCommandWord(0x5B, "PA4 input", PA4_InputHandler);
    asr.printCommandList();
    M5.Display.clear();
    M5.Display.drawCenterString("Say", 160, 60);
    M5.Display.drawCenterString("\"Hi,M Five\"", 160, 80);
    M5.Display.drawCenterString("\"Hello\"", 160, 100);
    M5.Display.drawCenterString("\"Hi,ASR\"", 160, 120);
    M5.Display.drawCenterString("to wakeup!", 160, 140);
}

void loop()
{
    M5.update();
    if (asr.update()) {
        Serial.println(asr.getCurrentCommandWord());
        Serial.printf("0x%X\n", asr.getCurrentCommandNum());
        Serial.println(asr.getCurrentRawMessage());
        Serial.println((asr.checkCurrentCommandHandler()));
    }
}

3.4 自定义命令设置

  • Module ASR 仅能通过重新生成固件来修改或添加新的交互命令,请参考教程 Module ASR 自定义固件生成与烧录 进行自定义指令固件生成与烧录。

  • 上方例程中在自定义语音命令词汇 Add 的参数指令为AA 55 33 55 AA,其中指令码为 0x33,固件配置信息如下图所示,例程中使用 addCommandWord 函数将指令加入指令表中与注册回调函数。

  • 上方例程中 PA4 input 为自定义命令,参数指令为 AA 55 5B 55 AA,其中指令码为 0x5B,固件配置需要在 Pin脚配置 中设置 GPIO_A4输入模式,详细信息如下图所示,例程中使用 addCommandWord 函数将指令加入指令表中与注册回调函数。

4.编译上传

  • 1. 进入下载模式:CoreS3-SE 长按复位按键 (大约 2 秒) 直到内部绿色 LED 灯亮起,便可松开,此时设备已进入下载模式,等待烧录。
说明
不同设备进行程序烧录前需要进入下载模式,不同的主控设备该步骤可能有所不同。详情可参考Arduino IDE上手教程页面底部的设备程序下载教程列表,查看具体的操作方式。
  • 2.选中设备端口, 点击Arduino IDE左上角编译上传按钮, 等待程序完成编译并上传至设备。

5.命令交互

  • 唤醒操作
    上电后,主控屏幕显示如下方左图所示,语音使用 Hi M Five命令唤醒,模块回应 I'm here,主控屏幕显示如下方右图所示。

串口监视器反馈如下所示:

wakeup command received!
Hi,M Five
0xFF
0xAA 0x55 0xFF 0x55 0xAA 
1
  • 预设命令交互
    1. 语音使用 Turn on 命令,模块回应 OK,主控屏幕显示 turn on!
    2. 语音使用 Turn off 命令,模块回应 OK,主控屏幕显示 turn off!

串口监视器反馈如下所示:

turn on command received!
turn on
0x46
0xAA 0x55 0x14 0x55 0xAA 
1
turn on command received!
turn on
0x46
0xAA 0x55 0x15 0x55 0xAA 
1
  • IO 控制命令交互
    1. 语音使用 PA2 high level 命令,模块回应 PA2 high level,主控屏幕显示 PA2 level: high 并且背景色变为绿色,PA2 输出高电平,LED 灯亮。
    2. 语音使用 PA2 low level 命令,模块回应 PA2 low level,主控屏幕显示 PA2 level: low 并且背景色变为黄色, PA2 输出低电平,LED 灯灭。
    3. 按动 Unit Dual Button 的 B 键(红色按键),模块回应 PA4 key pressed,主控屏幕显示 PA4 key pressed


串口监视器反馈如下所示:

set PA2 level to high
PA2 high level
0x50
0xAA 0x55 0x50 0x55 0xAA 
1
set PA2 level to low
PA2 low level
0x51
0xAA 0x55 0x51 0x55 0xAA 
1
PA4 key pressed
PA4 input
0x5B
0xAA 0x55 0x5B 0x55 0xAA 
1
  • 自定义命令交互
    语音使用 Add 命令,模块回应 Add successfully,主控屏幕显示 Add successfully!

串口监视器反馈如下所示:

Add command received!
Add
0x33
0xAA 0x55 0x33 0x55 0xAA 
1
On This Page