M5StickCでM5Unified WebRadio
はじめに
ESP32-2432S028-RでESP Radioを試してみようと思い、まずはM5StickCで動かしてみる事にした。
失敗例
ESP32 Audio Project - Part I: Internet Radio with I²S DAC を参考に、 M5Stick WebRadioを試してみたが、
[WiFiClient.cpp:253] connect(): select returned due to timeout 250 ms for fd 48
のエラーに陥る。どうやらWiFi clientとHttp clientのタイムアウトに問題があるようだ。 検索してみると、2022年後半頃のソースから問題が生じているような気配があり、6676は以前mergeされていない。
- https://github.com/espressif/arduino-esp32/issues/7057
- https://github.com/espressif/arduino-esp32/pull/6676
VS1053Bチップを搭載したハードウェアデコードモジュールを使ったWebRadioで類似のエラーに陥っている人が居り、部分的にしか解決していないようだ。
結局自分でも解決方法が分からなかった。
M5Unified WebRadio
諦めて他のコードで動くものが無いか探してみた所、かの有名なlovyan03殿のM5unifiedを使うコードに辿り着いた。 kokensha.xyz
ArduinoIDE v2.1.0やPlatformIOの両者でbuildでき、M5unifiedのおかげでM5Stack GreyやM5StickC plusの両者で使うことができた。
特に変更した点はないが、M5Stack GreyはM5Unifiedに対応しておらずboardをm5stack-core-esp32にする必要がある。 platformio.ini の設定だけ記載しておく。
[env:m5stack-core-esp32] platform = espressif32 board = m5stack-core-esp32 framework = arduino lib_deps = M5unified earlephilhower/ESP8266Audio@^1.9.7 [env:m5stickc] platform = espressif32 board = m5stick-c framework = arduino lib_deps = M5unified earlephilhower/ESP8266Audio@^1.9.7
失敗例に記載したエラーは起きなかった。
- プレイリストの参照先の問題なのか
- 他にあるのか
失敗例のエラー原因は不明のままであるが、起動時から選曲を変えた時のコンソール出力と分かっている点を記載する。
- [ 9693][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" → リンク切れの場合に出力
- [103957][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" → 選曲の瞬間に頻繁に発生する
E (472) esp_core_dump_flash: Core dumpxata check failed: Calculated checksum='f4f477a0' Image checksum='e10282ff' E (1716) wifi:Association refused temporarily, comeback time 1499 mSec E (3221) wifi:Association refused temporarily, comeback time 1499 mSec [ 9693][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" //"Asia Dream" , "http://igor.torontocast.com:1025/;.-mp3" リンク切れ [ 16174][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [ 31140][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [ 47578][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" //"Asia Dream" , "http://igor.torontocast.com:1025/;.-mp3" リンク切れ [103957][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [109491][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [128016][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [145165][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [152261][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [175722][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [181211][E][WiFiClient.cpp:268] connect(): socket error on fd 48, errno: 104, "Connection reset by peer" //"Asia Dream" , "http://igor.torontocast.com:1025/;.-mp3" リンク切れ [190870][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [199162][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [201592][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [204542][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [207962][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes" [219993][E][WiFiClient.cpp:517] flush(): fail on fd 48, errno: 11, "No more processes"
動作
M5Unified WebRadioの完成度が凄すぎる。https://t.co/f2wBxaThMb pic.twitter.com/nk8gX1RF7p
— kenji (@uecken) June 11, 2023
パスコンを入れたM5 Speaker HATを装着し、良い音色を聞くことができた。音声の時間波形やスペクトル表示の作りこみが非常によく、完成度として素晴らしい。
気づいた点
- その他スピーカーも試してみたが、アンプ無しでは音量が小さかったり、ボーカルの音が聞こえなかったりであった。
- M5Stack Greyは音声のDAC出力に雑音がのる。巷のメイカーがI2Sを使っている理由だろうか。
- 時々音が途切れる原因や、一部playlistが再生できない原因は今度調べて見ようと思う。
疑問点
- M5Stackシリーズで音声が良い機種はあるのだろうか?