Categories: 工作・開発

ラズパイPicoで電光掲示板風LEDパネルを駆動、炎や虹色のアニメーションを滑らかに表示するライブラリ

駅や商業施設で見かける電光掲示板には「HUB75」と呼ばれる規格のLEDパネルが使われていることが多い。安価で入手しやすく自作派にも人気だが、マイコンで駆動しようとすると高速なデータ転送が必要で、CPUに大きな負荷がかかる。McSlayR01氏がGitHubで公開した「Pi-Pico-Hub75-Driver」は、Raspberry Pi Picoのハードウェア機能を活用してこの問題を解決したMicroPythonライブラリだ。

DMAとPIOでバックグラウンド処理

RP2040やRP2350(Raspberry Pi Pico 2)は、DMAコントローラとPIOという2つのハードウェア機能を持つ。DMAはCPUを介さずにメモリとペリフェラル間でデータを転送でき、PIOはプログラマブルなI/O処理を専用のステートマシンで実行できる。

このライブラリでは、フレームバッファからLEDパネルへのデータ転送をDMAが担当し、HUB75プロトコルのタイミング制御をPIOが処理する。CPUはエフェクトの計算だけに専念でき、フレーム表示中も次のフレームの準備を並行して進められる。

作者によると、64×64のHUB75パネル2枚をチェイン接続した128×64構成で、24bitカラー、約200FPSを達成している。動画に映っているファイアエフェクトやプラズマエフェクトはプリレンダリングではなく、フレーム間でリアルタイムに生成されている。

ネイティブCモジュールで演算を高速化

MicroPythonは手軽だが、純粋なPythonコードでは演算速度に限界がある。このライブラリでは、MicroPythonの「動的ネイティブCモジュール」機能を使い、CPUに依存する処理部分をC言語で実装している。MicroPythonからは通常の関数として呼び出せるが、内部ではネイティブコードとして実行されるため、高速なエフェクト生成が可能になる。

デモに含まれるエフェクトは「balatro」(アニメーションスパイラル)、「plasma」(プラズマ)、「fire」(Doomスタイルの炎)、「spiral」(虹色スパイラル)の4種類。REPLから関数名を入力するだけで切り替えられる。

高校時代のプロジェクトを再構築

作者は高校時代に同様のプロジェクトを作成しており、当時実現できなかった構想を技術力がついた今、改めて形にしたという。Reddit投稿には「Doomを動かせるか」というコメントがつき、作者は「ファイアエフェクトはできた。フルDoom実装はバージョン2.0で」と回答している。

ライブラリはRP2040とRP2350の両方に対応し、MicroPythonのパッケージマネージャ(mip)でインストールできる。配線図やセットアップ手順はGitHubリポジトリに記載されている。ライセンスはオープンソース。

関連情報

GitHub(dgrantpete/Pi-Pico-Hub75-Driver)

FabScene編集部

FabScene編集部