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されていない。

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"

動作

パスコンを入れたM5 Speaker HATを装着し、良い音色を聞くことができた。音声の時間波形やスペクトル表示の作りこみが非常によく、完成度として素晴らしい。

気づいた点

  • その他スピーカーも試してみたが、アンプ無しでは音量が小さかったり、ボーカルの音が聞こえなかったりであった。
  • M5Stack Greyは音声のDAC出力に雑音がのる。巷のメイカーがI2Sを使っている理由だろうか。
  • 時々音が途切れる原因や、一部playlistが再生できない原因は今度調べて見ようと思う。

疑問点

  • M5Stackシリーズで音声が良い機種はあるのだろうか?