"raspberry pi", ラズパイ, vcgencmd, gnuplot, LCD, 3.5インチ, 3.5inch, fbi
Raspberry Pi の 3.5インチLCDに、C言語やPythonを使わず、Shellscriptだけでどこまで出来るか試してみます。(Shellscriptもちゃんとしたプログラミング言語ですが)
当初は何かセンサーを繫いでデータを収集しグラフ表示しようと考えましたが、液晶モジュールがラズパイのピンヘッダを専有してしまっているので外部センサーはあきらめ、ラズパイ自身のCPU温度を収集し、グラフをLCDに表示しました。
ラズパイは次の2つの方法でCPU温度を取得できます。
cat コマンドでファイルを直接参照します。
$ cat /sys/class/thermal/thermal_zone0/temp
44925
$ vcgencmd measure_temp
temp=44.9'C
vcgencmd コマンドは、CPU温度以外にも 周波数、メモリ使用量などいろいろな値を取得できます。 詳細は http://www.elinux.org/RPI_vcgencmd_usage で確認出来ます。
CPU温度以外をグラフ化することも考慮し、今回はvcgencmd で取得しました。 定期的にCPU温度を取得してファイルに保存します。
定番の gnuplot を使用します。 作成したグラフ画像を fbiコマンドで画面に表示します。
今回作成する処理フローは以下のようになります。
CPU温度の収集側です。
時刻と温度のペアをCSV形式で書き出しています。
これを cronで1分毎に実行します。
$ crontab -l
*/1 * * * * /home/pi/bin/collect_temp.sh
gnuplot --> fbi の無限ループになっています。
(補足)
行 | コード | 説明 |
---|---|---|
10 | set terminal png size 480,320; | 生成する画像サイズです。 LCDの解像度と同じ値を指定します。 |
11 | set output '$PNG'; | 生成する画像ファイル名です。 |
18 | set yrange[40:75]; | Y軸の温度の範囲です。 |
22 | plot '< tail -n 20 $CSV' ... | 収集結果の最新20件でグラフ作成します。 |
CSVファイルにデータが蓄積されてからこのスクリプトを実行すると、次のようなグラフ画像ファイルが作成されます。
そして、ラズパイの画面には次のように表示されます。
表示だけならShellscriptでもこれくらいは可能です。 更に高度な表示や、タッチパネルなどのUIが必要になると厳しくなります。 そうなると、Python(Pygame)やその他のグラフィックライブラリを使って本格的なプログラミングになります。
ラズパイの3.5インチLCDに画像表示を行います。
jinja2を使って、JSONファイルをImagemagick用データに変換します。
Imagegagick を使って、業務に耐えうるレベルのPDF帳票を作成します。