Atom Echo
Atom Echoは3年ほど前に出たM5Atom系のスピーカーやマイク付きのモデルです。
出た当時結構トラブルが多くてあまり情報が出てない印象です。
Atom EchoでMP3再生してみたい
SPIFFSという領域にMP3などのバイナリデータを書き込む方式があり、これを使ってMP3を再生してみようと思いました。これだと別途SDカードなどを用意せずにできそうです。
arduino-esp32fs-plugin
SPIFFSを使ってMP3を再生してみるコードを調べると
#include "FS.h"
#include "SPIFFS.h"
/* You only need to format SPIFFS the first time you run a
test or else use the SPIFFS plugin to create a partition
https://github.com/me-no-dev/arduino-esp32fs-plugin */
#define FORMAT_SPIFFS_IF_FAILED true
・・・省略
と言った感じでこちらのプラグインを使うように公式サンプルが紹介されています。
arduino-esp32fs-pluginのインストールを試してみるが
Arduino IDE v2系ではまだ使えない模様でした。
インストール手順を進めてみましたが、Arduino IDE 2系ではツールを追加できませんでした。
https://github.com/me-no-dev/arduino-esp32fs-plugin/issues/44
みんな待ち望んでいる......
このためだけにArduino IDE 1系を今更インストールするのもちょっとなぁと思ったので調べるとPlatformIOだとそのまま書き込みできる模様でした。
PlatformIOの利用
こちらのサイトを参考にVS Codeにインストールしていきます。
C++のファイルに記述してビルドする環境となっています。
多少使ったことはあったのですがVS Codeで記述できるのは本当に楽ですね。
PlatFormIOでのプロジェクト書き込み準備
こちらはM5StampS3の記事ですが、同じような手順でプロジェクト作成からコード書き込みまでができます。
Atom Echoに書き込みする場合は、ボードマネージャーを以下に設定してライブラリをインストールします。
- ボードマネージャー: M5Stack-ATOM
- ライブラリ:
- M5Atom
- FastLED
- ESP8266Audio
platformi.ini
というファイルに設定ファイルができてるので、成功したときの設定を載せておきます。あるあるですが、バージョンが違うと動かないこともあるので注意。
[env:m5stack-atom]
platform = espressif32
board = m5stack-atom
framework = arduino
lib_deps =
m5stack/M5Atom@^0.1.0
fastled/FastLED@^3.5.0
earlephilhower/ESP8266Audio@^1.9.7
PlatformIOでのSPIFFS
プロジェクト作成などができたらSPIFFSでMP3の書き込みですが、
特に追加プラグインなどなしでできました。便利!
参考: https://labo.mycabin.net/electronics/arduino-esp32/1268/
-
- プロジェクトのルートにdataフォルダを作ってその中にファイルを入れる
-
-
PIOの蟻アイコン
を選択し、Upload Filesystem Image
をクリック
-
この2ステップでできちゃいます。
Atom Echo(ESP32)の内部に書き込むので、もちろんPCとAtom EchoはUSBシリアルで接続済みの必要があります。
一度この領域に書き込みをしてしまえばあとはArduino IDEなど別のツールでプログラムの書き込みをしても問題ないのでSPIFFSの書き込み部分だけPlatformIOを使うのでも良いかもしれません。
再生するプログラム
お馴染みLang-Shipさんのブログに同様のサンプルコードがあるのでこちらを使わせてもらいました。
popopo.mp3というのが再生させるMP3ファイル名です。
PlatformIOの場合はinoファイルではなくsrcフォルダ内のmain.cppに記載する形となります。
out->SetGain();
の箇所で音の調整ができますが、あまり大きい音を出すとスピーカーが壊れる事象がSNSで騒がれていたので大きい音は要注意です。後発の生産ロットは改善されたのかもしれないですがいまいち把握してないです。
#include <M5Atom.h>
#include "SPIFFS.h"
#include "AudioFileSourceSPIFFS.h"
#include "AudioFileSourceID3.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2S.h"
AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2S *out;
AudioFileSourceID3 *id3;
#define CONFIG_I2S_BCK_PIN 19
#define CONFIG_I2S_LRCK_PIN 33
#define CONFIG_I2S_DATA_PIN 22
#define FILENAME "/popopo.mp3"
void setup(){
M5.begin(true, false, true);
delay(50);
Serial.println();
SPIFFS.begin();
Serial.printf("MP3 playback begins...\n");
audioLogger = &Serial;
file = new AudioFileSourceSPIFFS(FILENAME);
id3 = new AudioFileSourceID3(file);
out = new AudioOutputI2S();
out->SetPinout(CONFIG_I2S_BCK_PIN, CONFIG_I2S_LRCK_PIN, CONFIG_I2S_DATA_PIN);
out->SetChannels(1);
out->SetGain(0.2);
mp3 = new AudioGeneratorMP3();
}
void loop(){
M5.update();
if (M5.Btn.isPressed())
{
if (!mp3->isRunning()) {
Serial.println("Play");
mp3->begin(id3, out);
}
}
if (mp3->isRunning()) {
if (!mp3->loop()){
mp3->stop();
}
}
delay(1);
}
ビルドと書き込みは右下の→マークです。
書き込み速度は確かにArduino IDEより速いような印象でした。
動作の様子
あとでツイートいれこみます。
所感
SPIFFSやATOM Echo、終わってみるとこんなもんかとなるのですが、情報が古いものばかりでなかなか苦労しました。。。
Atom Echo 音鳴らすだけだと味気ないので他の機能も試したいですね。