ここでは、Raspberry Piを用いたマトリクスLEDのデモ動作の例を紹介する。
マトリクスLEDにはWS2812BというRGBLEDが使われている。このLEDを使用するためには、いくつかのモジュールを新たにインストールする必要がある。
以下のコマンドをターミナル上で実行する。
sudo pip3 install --break-system-packages adafruit-blinka
以下のコマンドをターミナル上で実行する。
sudo pip3 install --break-system-packages adafruit-circuit-neopixel
以下のPythonプログラムをダウンロードし、Raspberry Piの任意の場所に移動する。今回は例としてホームディレクトリに保存したとする。
Pythonプログラム:Demo1.py
移動後、以下のコマンドを実行することで、Demo1.pyを動作させることができる。
sudo python3 Demo1.py
実行すると、「Fill」→「円」→「バツ」→「三角」→「上矢印」→「下矢印」→「左矢印」→「右矢印」→「0から9の数字」が1秒間隔で順に表示される。
ターミナル上には何をLEDに表示しているのかが示されている。
LEDの制御を行う変数は主に以下の2つである。
BRIGHT(プログラム9行目 Default: 0.2)
LEDの明るさを調整する変数。0~1までの範囲で調整することが可能。
pixels(プログラム11行目 Default: neopixels.NeoPixel(board.D18, NUM_PIXELS, brightness = BRIGHT, auto_write = False))
LEDの設定を行う変数である。第1引数の部分が接続するピン番号である。ここはPWMに対応しているピンであるならば、そのピンに変更が可能である。
マトリクスLEDの制御を行う関数は14行目、「fig_light」という関数である。
引数は2つである。
第1引数:表示させる形
表示させる形を小文字アルファベットで指定する。
第2引数:点灯する色の指定
光らせたいLEDの色をRGB形式で指定する。例えば、赤色で光らせたい場合は「"FF0000"」、青色で光らせたい場合は「"0000FF"」と指定する。
プログラムからもわかるように、8x8の2次元配列でどこのピクセルを光らせるのか指定している。光らせる場所は1を、光らせない場所は0を入力する。
42~52行目の内容を239行目以下に追加して、elifの条件と2次元配列の0,1を変更することで、自身の図形を光らせることが可能である。
左の図はマトリクスLED内部の配線を表した図である。左図の順番でLEDの指定を行うことになる。しかし、fig_lightの2次元配列の指定順は右の図であり、このままLEDの制御を行うと、期待しない結果を表示することになってしまう。
そこで、fig_lightの2次元配列において、偶数行の要素を入れ替えることで、左図のようにLEDを指定できるように変更している。その処理が243~247行目の内容である。
2次元配列のままでもLEDの制御を行うことは可能であるが、制御をより簡単にするために2次元配列を1次元配列に変換する。
上の図のように、各行を連結させることで1次元配列に変更している。この処理を行なっているのが、250~254行目の内容である。
257, 258行目で全64個のLEDの色指定を行っている。260行目で全64個のLEDを点灯させている。
while True内で先ほどのfig_light関数を使ってマトリクスLEDの制御を1秒間隔で行っている。Ctrl+C(強制終了)のコマンドを外部から受け取った場合、最後にfig_light関数で全64個のLEDを消灯させてプログラムを終了させている。