1.环境配置: 参考Arduino IDE上手教程完成IDE安装, 并根据实际使用的开发板安装对应的板管理, 与需要的驱动库。
2.使用到的驱动库:
3.使用到的硬件产品:




Module ASR 采用串口的方式通讯,根据实际的电路连接修改程序中的引脚定义,设备连接后对应的串口 IO 为 G18 (RX),G17 (TX),实物引脚拨码开关位置如下图所示:
Module ASR 支持语音、串口唤醒与命令输入,并通过语音及串口返回当前的相关指令信息。Module ASR 默认固件中预置了一些命令词, 不局限于下方的 turn off 等命令,具体请见 Module ASR 出厂预设命令。
#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()));
}
}Module ASR 仅能通过重新生成固件来修改或添加新的交互命令,请参考教程 Module ASR 自定义固件生成与烧录 进行自定义指令固件生成与烧录。
上方例程中在自定义语音命令词汇 Add 的参数指令为AA 55 33 55 AA,其中指令码为 0x33,固件配置信息如下图所示,例程中使用 addCommandWord 函数将指令加入指令表中与注册回调函数。
PA4 input 为自定义命令,参数指令为 AA 55 5B 55 AA,其中指令码为 0x5B,固件配置需要在 Pin脚配置 中设置 GPIO_A4 为 输入模式,详细信息如下图所示,例程中使用 addCommandWord 函数将指令加入指令表中与注册回调函数。
Hi M Five命令唤醒,模块回应 I'm here,主控屏幕显示如下方右图所示。

串口监视器反馈如下所示:
wakeup command received!
Hi,M Five
0xFF
0xAA 0x55 0xFF 0x55 0xAA
1 Turn on 命令,模块回应 OK,主控屏幕显示 turn on!。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 PA2 high level 命令,模块回应 PA2 high level,主控屏幕显示 PA2 level: high 并且背景色变为绿色,PA2 输出高电平,LED 灯亮。PA2 low level 命令,模块回应 PA2 low level,主控屏幕显示 PA2 level: low 并且背景色变为黄色, PA2 输出低电平,LED 灯灭。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