pdf-icon

Arduino入門

2. デバイス&サンプル

5. 拡張モジュール&サンプル

アクセサリー

6. アプリケーション

Module ASR Arduino チュートリアル

1. 準備作業

2. 注意事項

ピン互換性
各ホストのピン配置が異なるため、ご使用前に製品ドキュメントのピン互換表を参照し、実際の配線に合わせてサンプルプログラムを修正してください。

3. サンプルプログラム

  • 本チュートリアルで使用するメインコントローラはCoreS3-SEで、Module ASRと組み合わせて音声インタラクションを実現します。使用前に下図を参考に、DIPスイッチを指定の位置に切り替えてください。

3.1 DIPスイッチ

Module ASRはUART通信を採用しています。実際の配線に合わせてプログラム内のピン定義を修正してください。接続後の対応UART IOはG18 (RX)G17 (TX)です。DIPスイッチの実物位置は下図の通りです:

3.2 IO端子

  • Module ASRは5つのIO端子を備え、音声コマンドで各IOの出力レベルを制御したり、IO入力で特定の音声応答をトリガーできます。IO端子は下図の通りです:

3.3 サンプルコード

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です。ファームウェア設定ではピン設定でGPIO_A4を入力モードに設定する必要があります。詳細は下図の通り。例ではaddCommandWord関数でコマンドをテーブルに追加し、コールバックを登録しています。

4. コンパイルと書き込み

    1. ダウンロードモードに入る:CoreS3-SEのリセットボタンを約2秒間長押しし、内部の緑色LEDが点灯したら離します。これでデバイスはダウンロードモードに入り、書き込み待機状態になります。
注意
デバイスによってダウンロードモードへの入り方が異なる場合があります。詳細はArduino IDE 入門ガイドページ下部のデバイス書き込みガイドリストをご参照ください。
    1. デバイスのポートを選択し、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がHigh出力となります。
    2. 音声コマンドPA2 low levelを使用すると、モジュールはPA2 low levelと応答し、ホスト画面にPA2 level: lowと表示され、背景色が黄色になり、PA2がLow出力となります。
    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