ラズパイ電光掲示板用のOSをJessieからstretchにバージョンアップした

1.電光掲示板用OS交換の経緯

電光掲示板を操作しているラズパイ3の microSD カードの調子が悪いです。最近では、upgrade できない状態となっています。

どうやら、microSD カードが壊れかけている模様です。

この microSD カードに書き込んでいるOSは jessie でラズパイのOSとしては、二世代前に相当します。

root@raspberrypi:~# lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 8.0 (jessie)
Release:        8.0
Codename:       jessie

ラズパイOSの変遷

  • Lenny (Debian GNU 5.0) 2009年~2012年
  • Squeeze (Debian 6.0)2011年~2014年
  • Wheezy (Debian 7.0)2013年~2016年
  • Jessie (Debian 8.0)2015年~2018年
  • Stretch (Debian9.0)2017年~2020年
  • Buster        2019年6月~

そこで、完全に壊れてしまう前に、microSD カードを交換することにしました。OSは最新にした方が良いのですが、OSに追いついていないソフトがあったりして問題になることもあるようです。

そこで、それらの事情に詳しくない60爺としては、1世代前のものにした方が無難であるとの結論で、上記にある一世代前の Stretch を採用します。

2.ラズパイ電光掲示板microSD設定

それでは、電光掲示板の環境設定を行います。次の手順で実施しました。

(1) Stretch のダウンロード

参考記事に「stretchの入手について」がありますので、そこから、「Raspbian Stretch Full」をダウンロードします。

(2) microSD カードへの書込み

使用する microSD カードはこれです。最近は随分と安く手に入れることが出来るようになりました。

書き込みに使用したソフトは「Win32DiskImager」です。定番ですね。

「はい」をクリックしましょう

イメージファイル名と、Device名を間違えないようにして、write をクリックします。

「Complete」画面(Write Succesful.)が表示されたら終了です。

(3) ラズパイの設定開始

書き込みの終わった microSD カードをラズパイに設定して初期設定を行います。

(4) 電光掲示板のライブラリのコピー

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

(5) 関連アプリケーションのインストール

① imagemagick インストール

日本語を電光掲示板に出すためにイメージファイルを作成するために必要です。

電光掲示板でpythonのサンプルプログラム実行。ラズパイで電光掲示板 part3

sudo apt-get install imagemagick

以下の修正をしないとエラーが出ますので修正を加えます。。

【ファイル名】/etc/ImageMagick-6/policy.xml

旧)<policy domain="path" rights="none" pattern="@*" />
新)<!-- <policy domain="path" rights="none" pattern="@*" /> -->

② 日本語フォントをインストール

pi@raspberrypi:~ $ sudo apt-get install fonts-ipafont
pi@raspberrypi:~ $ ls /usr/share/fonts/truetype/
crosextra  fonts-japanese-gothic.ttf  gentium        liberation   openoffice
dejavu     fonts-japanese-mincho.ttf  gentium-basic  liberation2  piboto
droid      freefont                   lato           noto

③ PHPをインストール

NHKニュースを電光掲示板に書き出すプログラムは、PHPで作成しています。

sudo apt-get install php

インストール後、バージョンを確認しました。

pi@raspberrypi:~ $ php -v
PHP 7.0.33-0+deb9u7 (cli) (built: Feb 16 2020 15:11:40) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0+deb9u7, Copyright (c) 1999-2017, by Zend Technologies

jessieでは、PHP 5.6.33-0+deb8u1 (cli) (built: Jan 9 2018 05:01:31)したので、だいぶバージョンがアップしましたね。

ここでは合わせて、PHPでXMLを読み込むためのライブラリをインストールします。

pi@raspberrypi:~ $ sudo apt -y install php7.0-xml

(6) 開発プログラム、シェルのコピー

60爺の開発した天気予報やニュースを電光掲示板に表示するプログラムと実行shellをjessieの環境からコピーします。

① shell

SCPコマンドを使用してコピーします。

pi@raspberrypi:~ $ scp *.sh pi@192.168.XXX.XXX:/home/pi
pi@192.168.XXX.XXX's password:
00.sh             100%  252     0.3KB/s   00:00
30.sh             100%  259     0.3KB/s   00:00
jikan.sh          100% 1027     1.0KB/s   00:00
news.sh           100%   36     0.0KB/s   00:00
tenki_new.sh      100% 2482     2.4KB/s   00:00
tenki.sh          100%  426     0.4KB/s   00:00
time_display.sh   100%  250     0.2KB/s   00:00

② pythonプログラム

天気予報やNHKニュースを電光掲示板に書き出す元のテキストを作成しているpythonプログラムです。

天気予報を電光掲示板に表示! ラズパイで電光掲示板 part4
ニュース速報を電光掲示板でまとめて表示 ラズパイで電光掲示板 part5

ディレクトリ(python-pg)を作成後、ディレクトリに入った後、SCPコマンドでコピーします。

pi@raspberrypi:~/python-pg $ scp * pi@192.168.XXX.XXX:/home/pi/python-pg
pi@192.168.XXX.XXX's password:
jikan_file.py        100% 1749     1.7KB/s   00:00
tenki_file.py        100% 3323     3.3KB/s   00:00
tenki_out_gif.py     100% 3898     3.8KB/s   00:00
tenki_out.py         100% 4141     4.0KB/s   00:00
test_com.py          100%  105     0.1KB/s   00:00
test.py              100%  315     0.3KB/s   00:00
txt_print.py         100% 1433     1.4KB/s   00:00

③ phpプログラム

NHKニュースを電光掲示板に書き出すPHPプログラムをSCPコマンドでコピーします。

ニュース速報を電光掲示板でまとめて表示 ラズパイで電光掲示板 part5

pi@raspberrypi:~ $ scp test2.nhk_news.php pi@192.168.XXX.XXX:/home/pi
pi@192.168.XXX.XXX's password:

④ シェルコマンド停止シェル

stopafterというshell停止用のコマンドを作成していたので、これも同一ヶ所に設定します。

shellで Ctrl-c を実現した!最初はミスって電光掲示板5時間動きっぱなし

pi@raspberrypi:~ $ scp stopafter /home/pi/rpi-rgb-led-matrix/bindings/python/samples/stopafter
pi@192.168.XXX.XXX's password:

3.電光掲示板表示テスト

準備が整いましたので、電光掲示板用のラズパイに作成した microSD カードをセットして、実行テストをします。

crontabの中を見ると、2つの設定がなされています。

00 7,9,12,15,17,20 * * * sh /home/pi/00.sh
30 8,10,11,13,14,16,18,19 * * * sh /home/pi/30.sh

動かしているのは、00.sh と 30.sh ですね。

00.sh を実行してみると、最初の時間表示で先に進まなくなってしまいました。

最後の led-image-viewer が止まらないようです。

stopafter が正常に作動しません!

sudo /home/pi/rpi-rgb-led-matrix/bindings/python/samples/stopafter 10 sudo /home/pi/rpi-rgb-led-matrix/utils/led-image-viewer -C --led-rows=16 --led-chain=2 --led-no-hardware-pulse /home/pi/work/jikan2.gif

しかし、個別にみていくと、stopafter が正常に作動しているのです。どうやら、電光掲示板向けのライブラリの構成が変わったように思えます。

さんざん悩んだのですが、シェルコマンドを止める timeout コマンドがあるというのでテストしてみると、こちらは問題なく動きました。

sudo timeout 10 sudo /home/pi/rpi-rgb-led-matrix/utils/led-image-viewer -C --led-rows=16 --led-chain=2 --led-no-hardware-pulse /home/pi/work/jikan2.gif

このため、stopafter を使用している個所を全て timeout に変更して事なきを得ました。

最後に、crontab へ上記の設定を実施して、今回のミッションは終了です。

いやーーー、大変でした!

参考
stretchの入手について
一定時間でシェルコマンドを終了させるたった1つの方法