[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してスピーカーを操作してみました

2021.07.06

1 はじめに

IoT事業部の平内(SIN)です。

M5Stack Core2 for AWSを使うために、ここまで、PlatformIOで新規プロジェクトを作成し、Core2 for AWS IoT EduKit BSPの動作を色々試してみました。


Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してLEDを光らせてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してディスプレイに表示してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して仮想ボタンの動作を確認してみました
[M5Stack Core2 for AWS] LVCLを使用してディスプレイ上のボタンの動作を確認してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して電源を操作してみました

BSPでは、スピーカーを制御するライブラリが含まれています。

最初に、動作しているサンプルです。 再起動すると数秒間スピーカーから音が再生されます。

2 NS4168

このライブラリは、ESP32-D0WDマイクロコントローラとI2Sで接続された、オンボードスピーカー(NS4168)を操作することができます。

アンプとマイクロフォンは、GPIOを共有しているため、一度に使用できるのは1つだけです。切り替えの際に初期化が必要な事に注意が必要です。


https://docs.m5stack.com/#/en/api/system

3 CONFIG_SOFTWARE_SPEAKER_SUPPORT

スピーカーを利用するためには、sdkconfigで、CONFIG_SOFTWARE_SPEAKER_SUPPORTを有効にする必要があります。(必要なヘッダが読み込まれないため、コンパイル自体ができません)

sdkconfig.defaultsでは、デフォルトで無効となっているため、明示的に設定が必要です。

menuconfigを利用する場合は、「Component」>「Core2 for AWS hardware enable」>「Speaker-NS4168」にチェックを入れて保存します。

$ pio run -e sample001 -t menuconfig

設定できるとsdkconfigに以下の行が追加されます。(直接、sdkconfigを書き換えても同じです)

sdkconfig

CONFIG_SOFTWARE_SPEAKER_SUPPORT=y

4 コード

試してみたコードは、以下のとおりです。 スピーカー再生の前後で、ディスプレイの明度を変化させています。

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "core2forAWS.h"
 
static const char *TAG = "SPEAKER_SAMPLE";
 
static void speaker_task(void *arg){


    // スピーカーの利用開始
    Speaker_Init();
    Core2ForAWS_Speaker_Enable(1);
 
    const unsigned char sound[16] = {
       0x08,0x08,0x08,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
    };
    
    Core2ForAWS_Display_SetBrightness(255);
    ESP_LOGI(TAG, "Noise Start.");
    for(int i=0;i<10000;i++){
        Speaker_WriteBuff((uint8_t*)sound, 16, portMAX_DELAY);
    }
    ESP_LOGI(TAG, "Noise Stop.");
    Core2ForAWS_Display_SetBrightness(50);
 
    // スピーカーの利用停止
    Core2ForAWS_Speaker_Enable(0);
    Speaker_Deinit();
    vTaskDelete(NULL);
}
 
void app_main(void){
    Core2ForAWS_Init();
 
    /* Usage of the speaker must be pinned to a specific core since I2S ISR 
    is assigned per core */
    xTaskCreatePinnedToCore(speaker_task, "play_sound", 4096*2, NULL, 4, NULL, 1);
}

5 最後に

今回は、スピーカーを制御するライブラリについて確認してみました。

作業を進めれば進めるほど、FreeRTOSのハードルの高さを感じています。もう少し踏ん張って、Core2 for AWS IoT EduKit BSPの使い方について確認を進めたいと思います。

6 参考リンク


Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してLEDを光らせてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してディスプレイに表示してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して仮想ボタンの動作を確認してみました
[M5Stack Core2 for AWS] LVCLを使用してディスプレイ上のボタンの動作を確認してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して電源を操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してスピーカーを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して静電容量式タッチパネルを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してジャイロセンサーを操作してみました
[M5Stack Core2 for AWS] PlatformIO を使用して、ArduinoでHello Worldしてみました
[M5Stack Core2 for AWS] ArduinoでLED (Adafruit NeoPixel フルカラーLED) を点灯してみました
[M5Stack Core2 for AWS] Arduinoで仮想ボタンを作成してみました
[M5Stack Core2 for AWS] ArduinoでMQTT接続してみました
[M5Stack Core2 for AWS] Arduinoでオーディオファイルを再生してみました
[M5Stack Core2 for AWS] Arduinoでマイクの利用方法を確認してみました
[M5Stack Core2 for AWS] ArduinoでGroveポートのGPIOを使用しててみました