【Raspberry Pi】電光掲示板にも応用できるマトリックスLEDを制御する方法

【Raspberry Pi】マトリックスLEDを制御する(64×32)

こんにちは! けい(Twitter)です。

今回は、ラズパイ4でマトリックスLEDを制御してみたので、その方法を紹介していきたいと思います。

けい

電光掲示板を簡単に作る方法を紹介していくよ!

用意するもの

ラズパイ

ラズパイ4で動作させましたが、モデルは何でも問題ないと思います。

マトリックスLED

aliexpressで一枚1600円ものを2枚買いました。リンク

64×32のサイズを使用します。

スイッチング電源

マトリックスLEDの消費電力が大きいので、5Vを出力できるスイッチング電源を用意しました。

スイッチング電源入力用端子

スイッチング電源にコンセントからAC100Vを供給するためのコードです。

デジタルマルチメーター

スイッチング電源の較正に用いました。

配線

スイッチング電源の較正

それでは、まずスイッチング電源の電圧の較正を行っていきます。
出力が5Vのスイッチング電源ですが、開封後に測ってみたら5.5Vが出力されていました。
そこで、5Vに調整する較正が必要です。

スイッチング電源入力端子を、下の画像の「入力」に固定します。
しっかり固定できたら、コンセントにプラグを挿します。

次にドライバーとテスターを用意して、テスターの+側をOUTPUTの+Vに、-側をOUTPUTの-Vに当てて、5Vになるように画像の丸の部分を回します。

マトリックスLEDの配線

下の画像の真ん中のPOWERに付属のコネクタを接続します。

コネクタのもう一方を、スイッチング電源の出力端子に接続します。

マトリックスLEDは「hub75」という規格です。上の画像の左と右にあるピン配列で統一されています。
左と右にそれぞれhub75のピンがあるのは、複数のパネルを接続できるようになっているからです。
上の画像だと、左側が「Input」で、右側が「Output」です。
「Input」から入ってきた制御信号を元にLEDを制御し、「Output」から次のパネルへと制御信号を伝えます。

ピン配列は何パターンかあるようです。

これを知らなくて苦戦しました。

32×16
64×32 or 32×32

上との違いは、一つだけです。
GNDピンが一つだけ’D’に変わっただけです。

画像元

ラズパイで使用するピンは14本です。

Pin番号は、6、7、11、12、13、15、16、18、19、21、22、23、24、26です。

この接続を配線図で見せても分かりにくいので、Pin番号をhub75のピンに対応する形で示します。

左の画像の赤色の番号がラズパイのPin番号です。右側の画像の同じ番号の所に接続します。

上の配線は64×32のマトリックスLEDの配線図です。
32×16の場合は、hub75の’D’の部分が’GND’となり、少し異なることに注意してください。

また、Inputの端子にコネクタを接続する場合は配線を左右対称に反転させる必要があることに注意してください。

2枚接続

1枚目のパネルの「Output」と2枚目のパネルの「Input」をケーブルで接続するだけです。
もちろん電源コネクタも接続します。

ソフトウェアの準備

ライブラリのインストール&ビルド

マトリックスLEDを制御するのに便利なライブラリがあるので、そちらを使います。リンク

ラズパイのターミナルを開いて次のコマンドを実行します。
githubからライブラリをダウンロードするコマンドです。


git clone https://github.com/hzeller/rpi-rgb-led-matrix/

次にビルドを行います。

cd rpi-rgb-led-matrix
make -C examples-api-use

これでコマンド操作でデモを動かす準備が出来ました。

ライブラリのオプションの確認

デモにどんな種類があるのかを以下のコマンドで確認できます。

sudo ~/rpi-rgb-led-matrix/examples-api-use/demo 

実行すると、オプション画面が出てきます。

pi@raspberrypi:~ $ sudo ~/rpi-rgb-led-matrix/examples-api-use/demo 
Expected required option -D <demo>
usage: /home/pi/rpi-rgb-led-matrix/examples-api-use/demo <options> -D <demo-nr> [optional parameter]
Options:
	-D <demo-nr>              : Always needs to be set
	--led-gpio-mapping=<name> : Name of GPIO mapping used. Default "regular"
	--led-rows=<rows>         : Panel rows. Typically 8, 16, 32 or 64. (Default: 32).
	--led-cols=<cols>         : Panel columns. Typically 32 or 64. (Default: 32).
	--led-chain=<chained>     : Number of daisy-chained panels. (Default: 1).
	--led-parallel=<parallel> : Parallel chains. range=1..3 (Default: 1).
	--led-multiplexing=<0..17> : Mux type: 0=direct; 1=Stripe; 2=Checkered; 3=Spiral; 4=ZStripe; 5=ZnMirrorZStripe; 6=coreman; 7=Kaler2Scan; 8=ZStripeUneven; 9=P10-128x4-Z; 10=QiangLiQ8; 11=InversedZStripe; 12=P10Outdoor1R1G1-1; 13=P10Outdoor1R1G1-2; 14=P10Outdoor1R1G1-3; 15=P10CoremanMapper; 16=P8Outdoor1R1G1; 17=FlippedStripe (Default: 0)
	--led-pixel-mapper        : Semicolon-separated list of pixel-mappers to arrange pixels.
	                            Optional params after a colon e.g. "U-mapper;Rotate:90"
	                            Available: "Mirror", "Rotate", "U-mapper", "V-mapper". Default: ""
	--led-pwm-bits=<1..11>    : PWM bits (Default: 11).
	--led-brightness=<percent>: Brightness in percent (Default: 100).
	--led-scan-mode=<0..1>    : 0 = progressive; 1 = interlaced (Default: 0).
	--led-row-addr-type=<0..4>: 0 = default; 1 = AB-addressed panels; 2 = direct row select; 3 = ABC-addressed panels; 4 = ABC Shift + DE direct (Default: 0).
	--led-show-refresh        : Show refresh rate.
	--led-limit-refresh=<Hz>  : Limit refresh rate to this frequency in Hz. Useful to keep a
	                            constant refresh rate on loaded system. 0=no limit. Default: 0
	--led-inverse             : Switch if your matrix has inverse colors on.
	--led-rgb-sequence        : Switch if your matrix has led colors swapped (Default: "RGB")
	--led-pwm-lsb-nanoseconds : PWM Nanoseconds for LSB (Default: 130)
	--led-pwm-dither-bits=<0..2> : Time dithering of lower bits (Default: 0)
	--led-no-hardware-pulse   : Don't use hardware pin-pulse generation.
	--led-panel-type=<name>   : Needed to initialize special panels. Supported: 'FM6126A', 'FM6127'
	--led-slowdown-gpio=<0..4>: Slowdown GPIO. Needed for faster Pis/slower panels (Default: 1).
	--led-daemon              : Make the process run in the background as daemon.
	--led-no-drop-privs       : Don't drop privileges from 'root' after initializing the hardware.
Demos, choosen with -D
	0  - some rotating square
	1  - forward scrolling an image (-m <scroll-ms>)
	2  - backward scrolling an image (-m <scroll-ms>)
	3  - test image: a square
	4  - Pulsing color
	5  - Grayscale Block
	6  - Abelian sandpile model (-m <time-step-ms>)
	7  - Conway's game of life (-m <time-step-ms>)
	8  - Langton's ant (-m <time-step-ms>)
	9  - Volume bars (-m <time-step-ms>)
	10 - Evolution of color (-m <time-step-ms>)
	11 - Brightness pulse generator
Example:
	/home/pi/rpi-rgb-led-matrix/examples-api-use/demo -D 1 runtext.ppm
Scrolls the runtext until Ctrl-C is pressed

デモは 0~11までの12種類用意されいるようです。
また、オプションでLEDの行数と列数、ディスプレイの接続数などを指定できます。

1枚のマトリックスLEDを制御する

デモ0:回転する正方形

次のコマンドを実行すると、回転する正方形が表示されます。

sudo ~/rpi-rgb-led-masudo ~/rpi-rgb-led-matrix/examples-api-use/demo -D 0 --led-rows=32 --led-cols=64 --led-slowdown-gpio=4 --led-no-hardware-pulse
オプションの説明
  1. -D 0
    デモ0を実行
  2. –led-rows=32
    32行のマトリックスLED
  3. –led-cols=64
    64行のマトリックスLED
  4. –led-slowdown-gpio=4
    GPIOの信号の遅延
  5. –led-no-hardware-puls
    サウンドがオンになっていると、このオプションの記述が必要

オプションの4つ目の「–led-slowdown-gpio」は、マトリックスLEDに対してラズパイの信号のスピードが高いため必要です。
表示がおかしい時はここを変更して、適切な値を探してください。(0~4の間で変更可能、デフォルトで0)

デモ1:画像のスクロール

ppmファイルの画像をスクロールしていくデモです。

sudo ~/rpi-rgb-led-matrix/examples-api-use/demo -D 1 --led-rows=32 --led-cols=64 --led-slowdown-gpio=4 --led-no-hardware-pulse ~/rpi-rgb-led-matrix/examples-api-use/runtext.ppm
オプションの説明
  1. -D 1
    デモ1を実行
  2. –led-rows=32
    32行のマトリックスLED
  3. –led-cols=64
    64行のマトリックスLED
  4. –led-slowdown-gpio=4
    GPIOの信号の遅延
  5. –led-no-hardware-puls
    サウンドがオンになっていると、このオプションの記述が必要
  6. ~/rpi-rgb-led-matrix/examples-api-use/runtext.ppm
    表示する画像ファイルの指定

2枚のマトリックスLEDを制御する

デモ0:回転する正方形

それでは、2枚に表示させてみましょう。配線をしてから次のコマンドを実行します。

sudo ~/rpi-rgb-led-matrix/examples-api-use/demo -D 0 --led-rows=32 --led-cols=64 --led-slowdown-gpio=4 --led-no-hardware-pulse --led-chain=2
オプションの説明
  1. -D 0
    デモ0を実行
  2. –led-rows=32
    32行のマトリックスLED
  3. –led-cols=64
    64行のマトリックスLED
  4. –led-slowdown-gpio=4
    GPIOの信号の遅延
  5. –led-no-hardware-puls
    サウンドがオンになっていると、このオプションの記述が必要
  6. –led-chain=2
    連結させるディスプレイ数

デモ1:画像のスクロール

sudo ~/rpi-rgb-led-matrix/examples-api-use/demo -D 1 --led-rows=32 --led-cols=64 --led-slowdown-gpio=4 --led-no-hardware-pulse ~/rpi-rgb-led-matrix/examples-api-use/runtext.ppm --led-chain=2
オプションの説明
  1. -D 1
    デモ1を実行
  2. –led-rows=32
    32行のマトリックスLED
  3. –led-cols=64
    64行のマトリックスLED
  4. –led-slowdown-gpio=4
    GPIOの信号の遅延
  5. –led-no-hardware-puls
    サウンドがオンになっていると、このオプションの記述が必要
  6. ~/rpi-rgb-led-matrix/examples-api-use/runtext.ppm
    表示する画像ファイルの指定
  7. –led-chain=2
    連結させるディスプレイ数