これまでRaspberry Pi 2 Model B、Raspberry Pi 3 Model B+、Raspberry Pi 400と購入してきたのですが、これらを電子工作に使ったことは一度もありませんでした。古いパソコンとかゲーム機のデバイスにするにはAVRやPICなどと比べて不向きだったのもありますが、一番の理由は配線ミスなどでうっかり壊したくなかったからです。
Raspberry PiはLinuxマシンとして普通に使えてしまうので、最新のプログラム言語の学習やフリーソフトのコンパイル、libretroベースのエミュレータの動作確認にうってつけなのです。PCのUbuntuよりも軽量で気軽に使える環境を壊してしまうのは嫌だったので、これまで電子工作には使ってきませんでした。
ところがRaspberry Pi 400を使い始めると、その使い勝手の良さと性能の良さからPi2やPi3はほとんど利用しなくなってしまいました。
それでも、Pi3は32ビット・64ビットどちらのRaspberry Pi OSも動くので動作確認に利用することもあります。しかしPi2は32ビットOSでしか動かせないので使う必要がありません。そんなPi2を遊ばせておくのはもったいないので、電子工作に使い倒すことにしました。主にPi400やPi3で使うデバイスの開発専用機にしようと思います。
実はPi3用にちょっと作りたいものがあるのです。
Pi3を使うときに困るのがメモリが1GBしかないことで、アプリ(特にブラウザ)をいくつも動かしているとすぐメモリ不足になってアプリが起動しなくなってしまいます。そこでスワップファイルを使っているのですが、スワップファイルはSDカードに置いてあります。でもこの場合、スワップ発生時に頻繁に書き込みが発生するとフラッシュメモリの寿命を縮める要因になります。なのでなるべくスワップは避けたいのです。
そのためリソースモニタを起動しておくか、タスクバーにリソースメーターを表示することで、フリーメモリがなくなってスワップが発生しそうになったらバックグラウンドのアプリを停止してメモリ不足を回避するようにしていました。でも、リソースモニターは使用中に別のアプリケーションの下に隠れてしまいますし、タスクバーのインジケータも小さくて見にくいのです。そこで、Pi3にLCDディスプレイを付けてリソース表示を行えたら見やすくていいなと思っていました
今回はこれを作ってみたいと思います。
まず最初に行うのは開発環境の構築です。Raspberry PiにはGPIOを扱うためのライブラリがいくつもあります。一般的にはPythonのライブラリとして用意されているものが多いのですが、C言語に対応しているものもあります。Pythonは手軽で扱いやすいのですが、電子工作には速度的に有利なCを使いたいところです。
そこでライブラリが充実していて、マイクロ秒レベルの操作がおこなえるpigpioを使うことにしました。CとPythonどちらにも対応しています。
インストール手順はDownloadのページに書かれているので、そのまま実行するだけです。
気をつける点はPythonを使うときはpigpiodを起動しておく必要があるのですが、Cを使うときはその必要はありません。逆にpigpiodを起動しておくと、Cで書いたプログラムはエラーで停止してしまいます。
ダウンロードのページにはインストール終了後のライブラリチェックについても記述があります。Raspberry PiのGPIO25(ピン番号22)にLED(と抵抗)をつないでチェックプログラムを動かすとPWMによる高速点灯でLEDが様々な明るさで光ります。
チェックで問題がなかったので、さっそく配線にとりかかりました。
LCDの表示に必要な線は電源除き7本で、なるべくGPIOがひと並びにのところにつなげました。具体的には以下のようになります。
RaspberryPi | ー | HD44780互換LCD |
5V | ー | 1ピン VDD 5V(GNDの物もある) |
GND | ー | 2ピン GND(VDDの物もある) |
GPIO26(37ピン) | ー | 4ピン RS |
GPIO19(35ピン) | ー | 5ピン R/W |
GPIO13(33ピン) | ー | 6ピン E |
GPIO6(31ピン) | ー | 11ピン DB4 |
GPIO5(29ピン) | ー | 12ピン DB5 |
GPIO11(23ピン) | ー | 13ピン DB6 |
GPIO9(21ピン) | ー | 14ピン DB7 |
プログラムはこちらから。
memdisp.zip (ページ右上のダウンロードボタンを押してください)
解凍したらmakeでプログラムをコンパイルしてください。コンパイル後にmake runと入力するとプログラムが実行されLCD画面にメモリの空き容量とスワップファイルの使用量がバイト単位で表示されます。表示は2秒間隔で更新されるようにしてみました。
プログラムをバックグラウンドで実行したいときはmake backと入力します。このときnohup.outファイルが作成されますが、これはバックグラウンドで実行しているプログラムの標準出力、標準エラー出力が書き込まれるファイルです。今回作成したプログラムには関係ないので無視してください。削除したい場合はスーパーユーザーの権限で消してください。
LCDの表示はこれまでマイコンで行ってきた処理をそのまま移植しただけです。メモリ使用量などのシステム情報の取得はsysinfoシステムコールを使いました。sysinfoは色々な統計情報を返してくれるので自分の欲しい情報を表示するようにプログラムを書き換えるのもいいでしょう。
ちなみに32ビットのRaspberry Pi OSでコンパイルしたバイナリは64ビットOSで動きません。その逆も同じです。改めてそれぞれのOSにpigpioをインストールしてコンパイルし直す必要があります。
Raspberry Pi 3の64ビットOSで動作
※コメント投稿者のブログIDはブログ作成者のみに通知されます