



Module ASRはUART通信を採用しています。実際の配線に合わせてプログラム内のピン定義を修正してください。接続後の対応UART IOはG18 (RX)、G17 (TX)です。DIPスイッチの実物位置は下図の通りです:
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です。ファームウェア設定ではピン設定で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がHigh出力となります。 PA2 low levelを使用すると、モジュールはPA2 low levelと応答し、ホスト画面にPA2 level: lowと表示され、背景色が黄色になり、PA2がLow出力となります。 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