|
構成
- 第14作と同様にMP3データをホストに置くことにし、WIFIを通じてWindows上のコントローラPGから制御する方式とする。
- ホストは、MP3デコーダのVS1063、PICマイコン(ファイルシステム)、ESP-WROOM-02(WIFI)、で構成する。
- コントローラ側に置くファイルはマスタファイルだけである。
- PIC ⇔ ESP-WROOM-02 ⇔ コントローラPGの通信データは16バイト固定長として簡略化を目指した。
|
|
ロジック部回路
- ミニコンポのUSBメモリ用端子の電源により本機のWIFI部(ESP-WROOM-02とPIC)だけが起動し、外部コントローラ(Windows上のコントローラPG)からのアクセスによって全体を起動する。
- 本機自体の電源スイッチは起動だけの機能にし、停止は外部コントローラからの指示かタイムアウトによることにします。
|
|
アナログ部回路
- MP3デコーダはVS1063で、第5作を解体して取り出したVS1063モジュール(SparkFun/SFE-BOB-11684)。このモジュールは残念ながら廃番になっている。
- ミニコンポでCDやFMを聴くときと同じボリュームレベルで再生できるようにオーディオアンプを追加。
|
|
作成したプログラム(ホスト/PIC)
- SDメモリでMP3ファイルを管理する。ファイルシステムにFatFs R0.10aを使用している。ファイル名はすべて8.3形式。
- コントローラからの指示に基づいてMP3デコーダ(VS1063)を操作する。
- CCS社のPIC18用コンパイラ(PCH V5.046)+MPLAB X IDE(v3.26)で開発した。ソースはこちら
|
|
作成したプログラム(ホスト/ESP-WROOM-02)
- 基本的にはPICとコントローラとのパケットの交換を行うだけに機能を絞った。
- しかし、SSID/パスワードやIPアドレスなどをハードコードするのでなくSDメモリ上に置き、PICを通じて取得するようにした。この部分のプログラムが結構大きい。
- Arduino 1.8.13 で開発。ソースはこちら
|
|
作成したプログラム(コントローラ/Windows)
- ディレクトリ構成をTreeViewで表示。選択したディレクトリの下のMP3ファイルを一覧表示。
- 再生開始、次の曲へ、再生停止、ランダム再生開始、前回再生の再開(曲の途中で終了していたら、そこから再開)、再生中の曲の中で15秒戻す・1分進める・10分進める、音量調整、メッセージ表示エリア
- ホストとの接続・切断。接続ではホストのマスタファイルのタイムスタンプを取得して、同一のマスタファイルをローカルで探す。切断ではホストのシャットダウンも行う。
- SDメモリをWindowsのローカルに装着したときは次のマスタファイル生成プログラムを起動できるようにした。
- C#2019(Visual Studio Community 2019)で開発した。ソースはこちら
|
|
作成したプログラム(マスタファイル生成/Windows)
- SDメモリ上のディレクトリ/ファイルの名前を8.3形式に変更
- MP3ファイルの演奏時間、MPEGフレーム数、ID3タグサイズを取得する
- ランダム再生の再生順を決定する
- マスタファイル(ディレクトリ構成ファイル・MP3ファイルリスト・ランダム再生順リスト)を生成する
- VC++2019で開発。ソースはこちら。(第12作、第16作とソースを共用している)
- タグ情報取得のため、libid3tag-0.15.1b と zlib-1.1.4 をリンクしている。どちらもそれぞれに付属のmsvc++用dspファイルでコンパイルできた。zlibのダウンロードサイトは失念。
- libid3tag の使い方はたとえばこちら:[mad-dev] libid3tag demystified。
|
|
ホスト実装
- 回路はいつも通りユニバーサル基板に実装。
- タカチのPF20-4-20Wに収めた。
|
|
結果
- 128GByteのSDメモリで運用中。バッファローの"DISK FORMATTER"でFat32にフォーマットしています。
- PICとESP-WROOM-02との間のUSART部分でごくまれに不調になります。一応回復を試みるようにプログラムしてみたが、いかなる場合も機能するかわからない。
回復に成功したら何事もなかったように再生を続行しますが、回復できない場合はホストをシャットダウンする。(現象の頻度が小さいので十分なテストができていない。)
|