ラズパイで電光掲示板を作る!配線とデモプログラムを実行して楽しむ

2017年8月4日

ラズパイで、電光掲示板を作ってみようと思います。

LED電光掲示板の画像

この機器ですが、以前購入した後、デモを行ってから保管してあったものです。

以前見ていた電光掲示板のページを改めて見てみましたら、内容が一新されておりまして、以前行ったデモのほか、色々と実施できるようです。

さらに、Pythonのモジュールの追加などもあり、天気予報の表示や、その他諸々できそうな感じですので、少しいじってみようかと・・・。

どうかゆっくりとご覧になってください。

スポンサーリンク

電光掲示板の作成手順

今回、電光掲示板を作成して実行する手順は次の通りです。

電光掲示板の作成手順

作成手順は、至極簡単ですよ~!

  1. ラズパイの配線
  2. デモプラグラムの実行

ご覧の通り、たったの2手順です。

ラズパイと電光掲示板を配線するだけで電光掲示板は完成します。

その後、デモプログラムを実行するだけで簡単に楽しめちゃいます。

実際にエラーで引っ掛かったところもお見せしますので、皆様の参考になれば幸いです。

ラズパイの配線

ということで、まずは、電光掲示板とラズパイの配線を実施します。

その前に、次のページからライブラリをダウンロードしておきましょう。

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

次に、RaspberryPiのGPIOと電光掲示板の配線を行います。

参考としたページに配線の図が示してありますが、ちょっとわかりにい(GPIOとコネクタの図が別ページにある)ので、次のようにひとつにまとめてみました。

左がGPIOで、右が電光掲示板のコネクタです。これを間違えちゃうと、電光掲示板が正しく作動しないので、落ち着いて配線しましょう。

GPIOと電光掲示板のコネクタの画像
※Dは使用しません!

ちなみに、60爺は16X32の電光掲示板を、現在ひとつしか持っていませんので、この配線になっていることを追記しておきます。

配線すみのラズパイと電光掲示板の画像

準備はこれだけです。これで、電光掲示板の完成です!

いよいよデモを実行しますよ。


C言語によるデモプログラム紹介

さて、配線が終わったので、「Let’s do it」で述べているexamples-api-use/ directoryに行きます。ここに、デモプラグラムが用意されております。

デモプログラム一覧

まずは、makeして、ロードモジュールを作成しましょう。

cd rpi-rgb-led-matrix/
make

次の5つのプログラムを動かせるようです。

  1. demo
  2. minimal-example
  3. c-example
  4. text-example
  5. clock

まずは、最初に紹介してあるdemoです。

ページにある内容をコピーしてきて翻訳をかけてみました。

【ページの内容】

Options:
-D : Always needs to be set
-L : Large display, in which each chain is 'folded down'
in the middle in an U-arrangement to get more vertical space.
-R : Sets the rotation of matrix. Allowed: 0, 90, 180, 270. Default: 0.
-t : Run for these number of seconds, then exit.
--led-gpio-mapping= : Name of GPIO mapping used. Default "regular"
--led-rows= : Panel rows. 8, 16, 32 or 64. (Default: 32).
--led-chain= : Number of daisy-chained panels. (Default: 1).
--led-parallel=
: For A/B+ models or RPi2,3b: parallel chains. range=1..3 (Default: 1).
--led-pwm-bits=<1..11> : PWM bits (Default: 11).
--led-brightness=: Brightness in percent (Default: 100).
--led-scan-mode=<0..1> : 0 = progressive; 1 = interlaced (Default: 0).
--led-show-refresh : Show refresh rate.
--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-no-hardware-pulse : Don't use hardware pin-pulse generation.
--led-slowdown-gpio=<0..2>
: Slowdown GPIO. Needed for faster Pis and/or 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.

【翻訳内容】

オプション:
-D :常に設定する必要あり
-L:各チェーンが「折り畳まれた」大きな表示
中央のU字配列では、より多くの垂直スペースを得ることができます。
-R :行列の回転を設定します。指定可能:0、90、180、270。デフォルト:0。
-t :これらの秒数だけ実行して終了します。
--led-gpio-mapping = :使用されるGPIOマッピングの名前。デフォルト: "regular"
--led-rows = <行>:パネルの行。 8,16,32または64です(デフォルト:32)。
--led-chain = <連鎖>:デイジーチェーンパネルの数。 (デフォルト:1)。
--led-parallel = :A / B +モデルまたはRPi2,3bの場合
:平行チェーン。範囲= 1..3(デフォルト:1)。
--led-PWM-bits== <1.11>:PWMビット(デフォルト:11)。
--led-brightness = <パーセント>:パーセント単位の明るさ(デフォルト:100)。
--led-scan-mode = <0..1>:0 =プログレッシブ。1 =インターレース(デフォルト:0)。
--led-show-refresh:リフレッシュレートを表示します。
--led-inverse:行列の色が反転している場合に切り替えます。
--led-rgb-sequence:マトリックスの色を交換した場合に切り替わります(デフォルト: "RGB")。
--led-pwm-lsb-nanoseconds:LSBのPWMナノ秒(デフォルト:130)
--led-no-hardware-pulse:ハードウェアのピンパルス生成を使用しません。
--led-slowdown-gpio = <0..2>:GPIOの低下。より速いPisおよび/またはより遅いパネル(デフォルト:1)に必要です。
--led-daemon:プロセスをデーモンとしてバックグラウンドで実行します。
--led-no-drop-privs:ハードウェアを初期化した後に、'root'から権限を削除しないでください。

プログラム demo のパラメータです。

Demos, choosen with -D
0 - some rotating square :回転する正方形
1 - forward scrolling an image (-m ) :イメージを前方にスクロールする(-m )
2 - backward scrolling an image (-m ) :イメージの後方スクロール(-m )
3 - test image: a square :テスト画像:正方形
4 - Pulsing color :脈打つ色
5 - Grayscale Block :グレースケールブロック
6 - Abelian sandpile model (-m ) :アベル・サンドファイル・モデル(-m )
7 - Conway's game of life (-m ) :Conwayの命のゲーム(-m )
8 - Langton's ant (-m ) :Langtonのant(-m )
9 - Volume bars (-m ) :音量バー(-m )
10 - Evolution of color (-m ) :色の進化(-m )
11 - Brightness pulse generatorデモ、-Dで選択 :輝度パルス発生器

パラメータが0~11まであり、12種類の動きを見ることができるようです。

デモプログラム実行1:snd_bcm2835エラー

それでは、実行してみます。パネルの行は16なので、オプションで指定しました(–led-rows=16)。

pi@raspberrypi:~/rpi-rgb-led-matrix/examples-api-use $ sudo ./demo -D 0 --led-rows=16
=== snd_bcm2835: found that the Pi sound module is loaded. ===
Don't use the built-in sound of the Pi together with this lib;
it is known to be incompatible and cause trouble and hangs (you
can still use external USB sound adapters).
See Troubleshooting section in README how to disable the sound module.
You can also run with --led-no-hardware-pulse to avoid the incompatibility,
but you will have more flicker.

【日本語訳】
=== snd_bcm2835:Piサウンドモジュールがロードされています。===
Piのビルトインサウンドをこのライブラリとともに使用できない;
互換性がなく、トラブルやハングアップの原因となる(外部USBサウンドアダプタは引き続き使用できます)ことは良く知られている。サウンドモジュールを無効にする方法については、READMEのトラブルシューティングのセクションを参照のこと。
また、–led-no-hardware-pulseで実行すると、非互換性を避けることができるが、ちらつきが増加する。

エラーが発生しました。

どうやら、RaspberryPiのビルトインサウンドが電光掲示板のライブラリとともに使用できないことが原因らしいです。

トラブルシューティングを見に行くと、 カーネルモジュールのブラックリストファイルを作成し、initramfsを更新しろと言っています。コマンドが書いてあります。

cat <<EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf
blacklist snd_bcm2835
EOF

ただ、オプションを良く見ると、–led-no-hardware-pulse があります。
これを使用すれば、上記エラーは出ない
ようです。
ちらつきが増えますが、デモは行えそうです。まず、そちらで対応してみます。

デモプログラム実行

次のデモプログラムを実行します。

  1. 正方形の回転
  2. 画像を前方にスクロール
  3. 画像を後方にスクロール
  4. 3~11のデモをまとめて実行

それでは、個別に実行していきます。

正方形の回転

正方形が回転します。

時間指定(tオプション)してしてやると、その時間になると同時に終了します。10秒でやってみます。

pi@raspberrypi:~/rpi-rgb-led-matrix/examples-api-use $ sudo ./demo -D 0 -t 10 --led-rows=16 --led-no-hardware-pulse
Size: 32x16. Hardware gpio mapping: regular
Press to exit and reset LEDs

動きました。正方形が回転しているのがわかります。

画像を前方にスクロール

一つ動いたので、ほっとしました。

それでは、次のデモ、イメージをスクロールしてみます。

前方の意味は、イメージが右から左へ流れていくことを示しています。

pi@raspberrypi:~/rpi-rgb-led-matrix/examples-api-use $ sudo ./demo -D 1 -t 10 runtext.ppm --led-rows=16 --led-no-hardware-pulse
Size: 32x16. Hardware gpio mapping: regular
Read image 'runtext.ppm' with 500x32
Press to exit and reset LEDs

ありゃ、イメージが大きすぎて、16ドットでは半分しか表示されません。フォルダを見ると、16ドット用のイメージ(runtext16.ppm)が用意されています。これでを使って、やり直してみましょう。

pi@raspberrypi:~/rpi-rgb-led-matrix/examples-api-use $ sudo ./demo -D 1 -t 10 runtext16.ppm --led-rows=16 --led-no-hardware-pulse
Size: 32x16. Hardware gpio mapping: regular
Read image 'runtext16.ppm' with 281x16
Timeout reached. Exiting.

こちらも、ご覧のように実行できました。

画像を後方にスクロール

イメージを逆方向にスクロールしてみます。

後方の意味は、イメージが先ほどとは逆に、左から右へ流れていくことを示しています。

pi@raspberrypi:~/rpi-rgb-led-matrix/examples-api-use $ sudo ./demo -t 10 -D 2 -t 10 runtext16.ppm --led-rows=16 --led-no-hardware-pulse
Size: 32x16. Hardware gpio mapping: regular
Read image 'runtext.ppm' with 500x32
Timeout reached. Exiting.

こちらも問題なく動きます。

残りのサンプルをまとめて実行

ひとつずつ実行するのはいいのですが、ちと時間がかかるので、残りのデモはまとめて実行します。以下のシェルを作成しました。

#!/bin/bash
sudo ./demo -D 3 -t 3 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 4 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 5 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 6 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 7 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 8 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 9 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 10 -t 10 --led-rows=16 --led-no-hardware-pulse
sudo ./demo -D 11 -t 10 --led-rows=16 --led-no-hardware-pulse

これを実行したものが、次の動画です。

ちょっと長いです。

最初のテスト画像は、何の変哲も無い正方形ですが、いろいろなことがやれそうな可能性を示してくれます。

スポンサーリンク

最後に

ラズパイで電光掲示板を操作してきました。

まずは、電光掲示板を用意して配線します。子の配線さえ間違わなければ問題なく電光掲示板は作動します。

その後は、デモプログラムを実行するだけです。

ちゃんと動くと面白いですよ!

参考
ラズパイ2でLED電光掲示板を作る

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら

電光掲示板

Posted by 60爺