pdf-icon

Arduino Guide

Atomic Echo Base Arduino チュートリアル

1. 準備

2. サンプルプログラム

M5Atomic-EchoBase の RecordPlay サンプルプログラムを参考にしてください。接続するデバイスに応じて、プログラム内の使用する IO 設定を変更してください。本チュートリアルでは、主コントローラーとして AtomS3R を使用し、IO 設定は AtomS3 と一致しています。

注意点
Atomic Echo Base のマイクがサポートするサンプリングレート範囲は 16KHz~64KHz です。初期化時には有効な範囲内に設定する必要があります。

初期化

// ATOMS3 ピンマップで EchoBase を初期化
echobase.init(16000 /*サンプリングレート*/, 38 /*I2C SDA*/, 39 /*I2C SCL*/, 7 /*I2S DIN*/, 6 /*I2S WS*/, 5 /*I2S DOUT*/,
              8 /*I2S BCK*/, Wire);

echobase.setSpeakerVolume(50);             // スピーカーの音量を 50% に設定
echobase.setMicGain(ES8311_MIC_GAIN_6DB);  // マイクのゲインを 6dB に設定

録音と再生

// 録音
echobase.setMute(true);
delay(10);
echobase.record(buffer, RECORD_SIZE);  // バッファに音声を録音
delay(100);

// 再生
echobase.setMute(false);
delay(10);
echobase.play(buffer, RECORD_SIZE);  // バッファから音声を再生
delay(100);

完全なプログラム

M5Unified と M5GFX を基にした基本的な表示とボタン操作を追加し、ボタンを押すことで録音を開始し、録音後自動で再生するプログラムです。

/*
 * SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 *
 * SPDX-License-Identifier: MIT
 */

#include "M5Unified.h"
#include <Arduino.h>
#include <M5EchoBase.h>

#define RECORD_SIZE (1024 * 96)  // 録音バッファのサイズを 96KB に設定

M5EchoBase echobase(I2S_NUM_0);    // M5EchoBase クラスのインスタンスを作成
static uint8_t *buffer = nullptr;  // 音声バッファを保持するポインタ

void setup()
{
    M5.begin();
    M5.Display.setFont(&fonts::FreeMonoBold9pt7b);
    Serial.begin(115200);

    // ATOMS3 ピンマップで EchoBase を初期化
    echobase.init(16000 /*サンプリングレート*/, 38 /*I2C SDA*/, 39 /*I2C SCL*/, 7 /*I2S DIN*/, 6 /*I2S WS*/, 5 /*I2S DOUT*/,
                  8 /*I2S BCK*/, Wire);

    // ATOM ピンマップで EchoBase を初期化する場合:
    // echobase.init(16000 /*サンプリングレート*/, 25 /*I2C SDA*/, 21 /*I2C SCL*/, 23 /*I2S DIN*/, 19 /*I2S WS*/, 22 /*I2S
    // DOUT*/, 33 /*I2S BCK*/, Wire);

    echobase.setSpeakerVolume(50);             // スピーカーの音量を 50% に設定
    echobase.setMicGain(ES8311_MIC_GAIN_6DB);  // マイクのゲインを 6dB に設定

    buffer = (uint8_t *)malloc(RECORD_SIZE);  // 録音バッファのメモリを確保
    // メモリ確保が成功したか確認
    if (buffer == nullptr) {
        // メモリ確保に失敗した場合、無限ループに入る
        while (true) {
            M5.Display.println("Failed to allocate memory :(");
            Serial.println("Failed to allocate memory :(");
            delay(1000);
        }
    }

    Serial.println("EchoBase ready, start recording and playing!");
    M5.Display.println("Click! For Record and Play");
}

void loop()
{
    M5.update();
    if (M5.BtnA.wasClicked()) {
        M5.Display.fillScreen(BLACK);
        M5.Display.setCursor(0, 0);
        M5.Display.println("Recording");
        // 録音
        echobase.setMute(true);
        delay(10);
        echobase.record(buffer, RECORD_SIZE);  // バッファに音声を録音
        delay(100);

        M5.Display.println("Playing");
        // 再生
        echobase.setMute(false);
        delay(10);
        echobase.play(buffer, RECORD_SIZE);  // バッファから音声を再生
        delay(100);
        M5.Display.println("Done");
    }
}

3. コンパイルとアップロード

    1. ダウンロードモード:異なるデバイスではプログラム書き込み前にダウンロードモードに入る必要があります。この手順は使用するメインコントロールデバイスによって異なる場合があります。詳細については、 Arduino IDE のはじめにガイド を参照し、デバイスごとのダウンロード手順をご確認ください。
  • AtomS3R の場合、リセットボタンを 2 秒ほど長押しして、内部の緑色の LED が点灯したらボタンを離します。これでデバイスはダウンロードモードに入り、プログラム書き込みの準備が整います。

    1. デバイスのポートを選択し、Arduino IDE の左上にあるコンパイル&アップロードボタンをクリックして、プログラムのコンパイルとアップロードを行います。

4. 録音と再生

On This Page