0. 概要
ドットマトリクスLED(WAVESHARE-20591)にRaspberry Pi Picoを使用してmp4ファイルの動画データを表示しました。
YouTube
1. 成果物
2. 動作環境
- マイコン基板:Raspberry Pi Pico
- ドットマトリクスLED:WAVESHARE-20591
- PC
- OS:Windows11またはWindows10
※.NET Framework 4.X(4.6.2以上)がインストールされている必要がある。(Windows11はデフォルトでこの条件を満たす。)
- OS:Windows11またはWindows10
3. WAVESHARE-20591の仕様
- 64×32ドット
- RGB各2階調
- Raspberry Pi Picoを装着可能
4. FWの仕様
- 画面のリフレッシュレート:30Hz
5. データの流れ
- ①PCでmp4ファイルを読み込んでマトリクスデータに変換
- ②PCからPicoにマトリクスデータをUSB送信
- ③PicoがマトリクスLEDの表示を更新
6. mp4⇒マトリクスデータ変換のための画像処理
- ①mp4の画像が縦長の場合、左に90度回転して横長にする。
- ※WAVESHARE-20591が横長のため。
- ②画像の中央から幅:高さ=2:1で切り取り
- ※WAVESHARE-20591の幅:高さ=2:1のため。
- ③画像を64×32ピクセルにリサイズ
- ※WAVESHARE-20591が64×32ドットのため。
- ④画像に対して鮮鋭化フィルタを適用。
- ※64×32ピクセルは画素数が少ない(細部の情報が少ない)ので、ぼやけて見えがちなため、その対策としてエッジを強調する。
- ⑤画像のRGB成分それぞれに大津の二値化を適用。
- ※WAVESHARE-20591がRGB各2諧調のため。
7. 画像のリフレッシュレート30Hzを保つための処理
USBのアイソクロナス転送は実装が手間なので簡単な仮想COMを使用します。
- ①PicoのFWについて、TinyUSBのUSB-CDCの受信バッファサイズ:CFG_TUD_CDC_RX_BUFSIZEをカスタマイズして約30KBに増大。
- 備考
Pico SDKで、TinyUSBのUSB-CDCのカスタマイズしたバッファサイズを定義したヘッダファイルを使用する場合、例としてCMakeLists.txtに以下のように記述する。
target_compile_definitions(PicoMtrx PUBLIC CFG_TUSB_CONFIG_FILE="my_tusb_config.h" ) - 備考
- ②PicoのFWについて、30枚分のマトリクスデータを保存できるキューバッファを2つ用意。(バッファA, バッファB)
- ③PCからPicoに仮想COMで30枚分のマトリクスデータを送信する。
- PicoはそれをバッファAで受信する。
- ④PicoはバッファAのデータを参照してドットマトリクスの表示を更新。
- ⑤ ④の処理と並列して、PCからPicoに仮想COMで30枚分のマトリクスデータを送信する。
- PicoはそれをバッファBで受信する。
- ⑥PicoはバッファBのデータを参照してドットマトリクスの表示を更新。
- ⑦ ③~⑥を繰り返す。
