専用コントローラ for MP3プレーヤ第14作


更新: 2020/08/06, 2020/08/09, 2020/09/01, 2021/04/25

概要

  • 左のMP3プレーヤ第14作(MP3_14)構成図の赤色の部分になる
  • 機能は、ディレクトリ/曲の選択と再生開始、ランダム再生、音量調整

回路

  • PICのクロックは内蔵の発振回路を使っている(これの精度で問題ないかどうかが不安だったので発振子用のピンを空けてあるが)。ただし、8MHzではだめで16MHzが必要だった。
  • ESP-WROOM-02 は秋月電子のDIP化キットを使用
  • 表示器は0.96インチ 128×64 OLEDディスプレイを使用。制御チップ:SSD1306、制御方式:I2Cのもの

実装

  • ケースはTAKACHIの LCS145-M4-WB
  • ケースの高さが厳しいので、ESP-WROOM-02/PICともにユニバーサル基板に直接はんだ付けしている
  • PICのプログラムはCCS社のPIC18用コンパイラ(PCH V5.046)+MPLAB X IDE(v5.05)で開発した。ソース一式はこちら
  • データファイルについて、ホスト側にあるものとコントローラ側にあるものとが一致していなければならない。一致しているかどうかのチェックは行っているが、一致しないときファイル転送を自分で実装するのが面倒なので、WindowsPC上でSDカードにファイルコピーするやり方にした。
  • ディレクトリ名や曲名の表示イメージは事前に作成してデータファイルに含まれている。2バイト文字のイメージをリアルタイムに作成するのはPIC18には重いため。データファイルの作成はホスト側のプログラムmp3_14_mkflが行う。
  • 本機のローカルには半角文字のフォントファイルだけを置き、固定メッセージの表示と再生進行時間の表示に使っている。

結果

  • 消費電流は30mA前後で、瞬間的に85mAぐらいになる。
  • 再生中もディレクトリ選択操作中も本機とホストとの間で数秒ごとに通信をしているが、ごくまれに送信でエラーが発生する(具体的には "AT+CIPSEND"コマンドを送ってもプロンプト'>'が返ってこない、など)。そうなると復旧するにはESP-WROOM-02をリセットするしかないようだ。ただしRSTピンでハードウエアリセットする必要はなく、AT+RSTコマンドで対処できた。再生中であっても再生に影響はなく、ディスプレイの表示もそこから再開する。
  • 再生中にコントローラの電源をオフにしても再生はそのまま続行する。ただ、再起動には時間が掛かるのですぐに音量を調整したいときに不便である。



改定(2020/09/01)

  • フォントファイルを事前処理しておき、表示文字のイメージデータをリアルタイムに作成する。(ウインドウズ版コントローラには不要で、本コントローラにのみ必要な処理をホスト側で対処する構成が今一つ奇麗でないので)
    • 半角・全角フォントを1ファイルに収める。(FatFsのFIL構造体を半角・全角それぞれに用意するのはPIC18のメモリサイズ上苦しい)
    • ビットの縦横配列をOLEDに合わせて並べ替えておく
    • 全角部分についてコードブロックテーブルをなくして、文字コードから直接シーク(f_lseek)できるようにする。
    • 事前処理プログラムをWindows10上のVisual C++ 2019で開発。ソースはこれ
  • 改訂版の開発中、SDカードのファイル読み込みで急にエラーが多発しだした。根本的な解決ではないが、FatFsのエラー発生時にはf_mount/f_openからやり直して続行できるようにした。再生中にエラー発生しても再生には影響ない。
    (2021/04/25加筆) SDカードのSPI(特にDO)はプルアップが必要です。原因はこれかも。
  • PICのメモリ不足のためルータとサーバ(mp3_14)へのアカウント情報をソースにハードコードする。
  • PICプログラムの改訂版はこれ


MP3プレーヤのページに戻る トップページに戻る