ここでは、Raspberry Piを用いたマトリクスLEDのデモ動作の例を紹介する。
Raspberry Pi 4B(Zero 2Wでも動作を確認しています。Raspberry 5では動作しません。)
Micro SDカード(任意の容量 16GBを推奨)
8x8のマトリクスLED
マトリクスLEDにはWS2812BというRGBLEDが使われている。このLEDを使用するためには、いくつかのモジュールを新たにインストールする必要がある。
以下のコマンドをターミナル上で実行する。
sudo pip3 install --break-system-packages adafruit-blinka
以下のコマンドをターミナル上で実行する。
sudo pip3 install --break-system-packages adafruit-circuit-neopixel
必ずGUIでRaspberry Piを起動すること。
以下のPythonプログラムをダウンロードし、Raspberry Piの任意の場所に移動する。今回は例としてホームディレクトリに保存したとする。
Pythonプログラム:Demo2.py
移動後、以下のコマンドを実行することで、Demo2.pyを動作させることができる。
sudo python3 Demo2.py
実行すると、ディスプレイ上、指定エリアの画面がマトリクスLEDに表示される。エリアサイズは256x256pixelsである。このエリアの位置は自由に指定することが可能である。指定エリア内にGIF画像や動画などを配置することで、マトリクスLEDでもその内容が反映されていることがわかりやすい。
ターミナル上にはどのピクセルを何色で光らせているかの配列情報が表示される。
LEDの制御を行う変数は主に以下の2つである。
BRIGHT(プログラム17行目 Default: 0.2)
LEDの明るさを調整する変数。0~1までの範囲で調整することが可能。
pixels(プログラム19行目 Default: neopixels.NeoPixel(board.D18, NUM_PIXELS, brightness = BRIGHT, auto_write = False))
LEDの設定を行う変数である。第1引数の部分が接続するピン番号である。ここはPWMに対応しているピンであるならば、そのピンに変更が可能である。
ディスプレイの画面はmssを用いて取得を行っている。mssでディスプレイ全画面のスクリーンショットを撮影し、そこから指定サイズで指定領域を切り抜いている。
また、画像処理モジュール「Pillow」で処理できる形式に変換を行っている。これらの処理を36~42行目で行っている。
マトリクスLEDの制御を行う関数は14行目、「color_led_matrix」という関数である。
引数は2つである。
第1引数:取得したいディスプレイ領域の左上のX座標
整数で指定する。
第2引数:取得したいディスプレイ領域の左上のY座標
整数で指定する。
プログラムからもわかるように、8x8の2次元配列でどこのピクセルを光らせるのか指定している。光らせる場所は1を、光らせない場所は0を入力する。
42~52行目の内容を239行目以下に追加して、elifの条件と2次元配列の0,1を変更することで、自身の図形を光らせることが可能である。
while True内で先ほどのfig_light関数を使ってマトリクスLEDの制御を1秒間隔で行っている。Ctrl+C(強制終了)のコマンドを外部から受け取った場合、最後にfig_light関数で全64個のLEDを消灯させてプログラムを終了させている。