作ったもの
以前M5Stackを使って作った時刻表タイマーに終電通知機能を実装しました。
**注: 音量に注意してください↑↑**終電が近くなるとお知らせしてくれる機能を実装しました。 pic.twitter.com/zR1s8UYbOI
— Keisuke KAWAHARA (@ktansai) August 10, 2019
経緯
以前のものに関しては下記の記事を参照してください。
[Qiita]次の電車があと何分で来るか分かるガジェットをM5stackで作ってみた
数ヶ月職場の入り口近くの目立つ場所に置かせていただいて運用していたのですが、夜型の自分は遅くまで会社にいたときに、終電を過ぎてしまうということが何度かありました。
そこで、終電10分前に音でお知らせしてくれる機能を追加しました。
仕組み
SDカードにmp3ファイルを配置し、ファイルを読み込んで、再生するという簡単な仕組みです。
ESP8266Audioというライブラリを使いました。
自分のArduino-esp32と互換性が悪いのか、コンパイルエラーが起きたので、
以下のバージョンに戻して、ビルドしたところ、うまく動いたのでこれで様子を見ています。
- Arduino-ESP32 1.0.0
- ESP8266Audio 1.1.2
おそらく最新版同士で検証するのが良いと思うのですが、自分の環境では他のライブラリがarduino-esp32最新版との相性が悪いようで、
arduino-esp32をアップデートできずにいます。
なので、今回はarduino-esp32が1.0.0がリリースされた日時に近いESP8266Audioを試したところ動いたことを確認しました。
ライブラリ導入方法などはESP8266AudioのREADME が詳しいので必要な方は参照してください。
コード
以下、サンプルコードなどから色々抽出して、自分的に使いやすく整理したコードです。
M5StackのボタンA,B,Cを押すと、対応するsample.mp3が再生されます。
ESPAudioのサンプルを見ていたら、wavや他のファイル形式もサポートされているようです。自分は試してません。
電車の時刻表示のやつと一緒に実装してある版はこちらから見れます。
#include <M5Stack.h>
#include <WiFi.h>
#include "AudioFileSourceSD.h"
#include "AudioFileSourceID3.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2S.h"
AudioGeneratorMP3 *mp3;
AudioFileSourceSD *file;
AudioOutputI2S *out;
AudioFileSourceID3 *id3;
void setup()
{
M5.begin();
WiFi.mode(WIFI_OFF);
delay(500);
M5.Lcd.setTextFont(2);
M5.Lcd.printf("Sample MP3 playback begins...\n");
Serial.printf("Sample MP3 playback begins...\n");
}
void playMP3(char *filename){
file = new AudioFileSourceSD(filename);
id3 = new AudioFileSourceID3(file);
out = new AudioOutputI2S(0, 1); // Output to builtInDAC
out->SetOutputModeMono(true);
out->SetGain(1.0);
mp3 = new AudioGeneratorMP3();
mp3->begin(id3, out);
while(mp3->isRunning()) {
if (!mp3->loop()) mp3->stop();
}
}
void loop()
{
M5.update();
if(M5.BtnA.isPressed()){
playMP3("/sound_A.mp3");
}
if(M5.BtnB.isPressed()){
playMP3("/sound_B.mp3");
}
if(M5.BtnC.isPressed()){
playMP3("/sound_C.mp3");
}
Serial.printf("MP3 done\n");
delay(10);
}
備考
色々な方がM5Stackのスピーカーの音質の悪さを指摘されています。
3500円程度の安価なデバイスなので、そこまで品質を求めるわけではないですが、
今回実装していて、mp3再生時の最初に「ブッー。ザザザーーーー。」という結構大きいノイズが結構びっくりする音量で再生され、その後にmp3が普通に再生されるという状況がありました。
色々試したのですが、暫定的にmp3ファイルの最初に無音期間を0.3秒程度入れると、ノイズが小さくなりました。
音質と定常ノイズ的に使いかたに成約があると思いますが、こういった効果音やアラート程度にmp3等を再生するのはユースケースとして向いているのかなと思いました。