ラズパイにミニ液晶を付ける

ラズパイ(Raspberry Pi)イイですよね。省スペース、省エネ、静音。CPUがarmなのだけど、普通に使うにはそんなこと全く気にせずに普段使うツールを利用できます。モニタなどを直接接続して使っているのなら、そんな事はなさそうですが、リモートで使っていると「電源切るのを忘れてしまう」事が多々あったりします。

一応、ちっこいLEDが付いていて、それが緑に光っていると電源が入って動いている事が分かるのです。が、LEDがちっこいのとケースが透明じゃないと見えづらかったりするんです。

透明なケースは魅力的なんですが、放熱対策とノイズ対策で金属製を選んたので、私が購入したケースは電源LEDが見えないんですねぇ。 そんなこんなで、電源が入っているのに電源ケーブルを抜いてしまう事がなんどもあって、もう少し電源はいってるよアピールしてくれるといいんだけどなぁ。

消費電力が表示されるUSBケーブル

なんか良いモノないかなぁ?とAmazonをうろうろしていると、流れている電力を表示してくれるUBSケーフルを発見。今はこんなUSBケーブルがあるのですね。おもしろいなとポチってみました。

消費電力が表示されるUSBケーブル

電源が入っていて、ほぼアイドル状態では「2W」だそうです。

これを見れば電源が入っているかどうか、すぐに分かると思いますよね?まぁ分かるんですが、文字が小さめ。老眼では、0Wなのか2Wなのか、判別が付きません!

小さな液晶(OLED)を付けたい

USBケーブルでもいいのですが、もう少しアピールしてくれるモノはないかなぁ?とAmazonをうろうろしていると、ラズパイ用なのにPCのミニタワーみたいなケースを見つけました。

ファンが光る必要は無いと思っているんですが、電源ボタンは大きいし、なによりケースの左上に小さな液晶画面が付いています。Amazonのページの画像を貼り付けるのは良くないと思うんでリンクから飛んだ先の画像を見てほしいのですが

  • IPアドレス
  • CPU使用率
  • CPU温度
  • メモリ使用量
  • Disk使用量

が、小さな液晶に表されています。なんかかっこいいですね。

ケースの購入前でしたらポチっていたかもしれませんが、既に金属製のケースを買ってしまったし、なにより結構お高い。この小さな液晶はOLED(有機EL)と呼ばれる物だそうでI2Cで接続できる物が安価で売られています(1枚 600-700円くらい)

このOLEDモジュールで使われている SSD1306 というチップ用のライブラリが公開されていて、それを使うことで簡単に文字や画像を表示させることができます。解像度や表示色などが違う様々な種類のモジュールがあるのでこれだ!というものを探してみてください。

ちなみに私が購入したものは、解像度:128×64どっとで上から16ドットが黄色,17-64ドットが水色です。

ラズパイとの接続

I2C接続なので、ラズパイのピン配置を調べて4本接続するだけです。簡単ですね。
https://pinout.xyz/ この辺りを参考にして・・・

Pin 1 : 3.3V(VDD)
Pin 3 : SDA
Pin 5 : SCL(SCK)
Pin 6 or 9 : GND

と、OLEDモジュールに印字されているピンにメス – メス のジャンパーで接続します。ジャンパーを持っていない方は、いい機会なので 40本セットをポチるのもよろしいかと。

正しく認識されているかどうかはコマンドラインから確認できます。アドレス「0x3c」に今回接続したOLEDが見えていますね。

pi@RP5:~$ i2cdetect -l
i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-13  i2c             107d508200.i2c                          I2C adapter
i2c-14  i2c             107d508280.i2c                          I2C adapter
pi@RP5:~$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@RP5:~$

見えていない場合は・・・raspi-config を起動して、Interface Options -> I2Cが有効になっているか確認しましょう。それで駄目ならジャンパーの可能性もあります。テスタでちゃんと導通しているかをチェックです。

pi@RP5:~$ sudo raspi-config
┌───────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├───────────┐
│                                                                                 │
│        1 System Options       Configure system settings                         │
│        2 Display Options      Configure display settings                        │
│        3 Interface Options    Configure connections to peripherals              │
│        4 Performance Options  Configure performance settings                    │
│        5 Localisation Options Configure language and regional settings          │
│        6 Advanced Options     Configure advanced settings                       │
│        8 Update               Update this tool to the latest version            │
│        9 About raspi-config   Information about this configuration tool         │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                      <Select>                      <Finish>                     │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘
┌───────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├───────────┐
│                                                                                 │
│      I1 SSH         Enable/disable remote command line access using SSH         │
│      I2 RPi Connect Enable/disable Raspberry Pi Connect                         │
│      I3 VNC         Enable/disable graphical remote desktop access              │
│      I4 SPI         Enable/disable automatic loading of SPI kernel module       │
│      I5 I2C         Enable/disable automatic loading of I2C kernel module       │
│      I6 Serial Port Enable/disable shell messages on the serial connection      │
│      I7 1-Wire      Enable/disable one-wire interface                           │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                                                                                 │
│                      <Select>                      <Back>                       │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

なにを表示するか?

先の立派なケースの画像では

  • IPアドレス
  • CPU使用率
  • CPU温度
  • メモリ使用量
  • Disk使用量

が表示されていました。

IPアドレスを表示させるのは良いアイディアだと思います。IPアドレスをDHCPで取得している場合、たまに変わってしまう事があるんですよね。モニタ等接続せずに使っていると、arpから調べたりとチョット面倒です。

適度に値が変化した方が面白いし、CPU使用率/温度は監視しておきたい値の一つですね。まぁ温度が上がったらCPUが周波数下げるし、CPU使用率が跳ね上がったからって個人用PCではなんの影響もないんですが。

同じようにメモリ、ストレージの使用量をグラフ化して表示するのもいいなぁ。

いろいろと表示させたい物はありますが、購入したOLEDは128×64ですから、全て表示するわけにもいきません。とりあえず

  • IPアドレス
  • uptime
  • CPU温度
  • CPU使用率
  • CPU使用率のグラフ

をすることにします。

ソースコードはGithubにあげてありますのでそこからどうぞ。
https://github.com/acemomiage/pi-oled 使い方はREADMEに書きましたが大体こんな感じ。

# まず、venv環境を作ります
$ mkdir -p ~/venv
$ cd !$
$ python3 -m venv --copies pi-oled
$ source $HOME/venv/pi-oled/bin/activate
$ pip install -U pip
$ pip install adafruit-circuitpython-ssd1306 lgpio pillow psutil

# 次に、githubからソースをダウンロード
$ mkdir -p $HOME/work/repo/github.com/
$ cd !$
$ git clone https://github.com/acemomiage/pi-oled.git
$ cd pi-oled

# systemdへ登録してサービス実行
$ sudo cp pi-oled.service /etc/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable pi-oled
$ sudo systemctl start pi-oled

目で見るとチラつきはないのでけれど、人間の目には判別できない頻度で書き換えられているようでカメラで写真を撮ると書き換え途中の部分が黒く抜けてしまっています。

最下段の横棒はCPU使用率のグラフのつもりで書いたのですが、ラズパイ5のCPUは4コアなもので1コアを100%使ってもCPU使用率は25%。ほとんど変化がありません。空きメモリとディスクの空き容量を表示する方が面白いかなぁ。なんて今は思っています。

この「adafruit_ssd1306」ライブラリは、128×64ドットの画像を転送して表示させるという書き方をします。ソースを見てもらえれば分かると思いますが、Pillowライブラリで文字やら線をイメージとして書き込んでいます。

0.5秒毎に画像を生成しなおして表示していますが、5秒毎にPU関連データ、メモリ/ストレージ量の数値を交互に表示するようにするのもいいかもしれませんね。

最後に

うちのラズパイは有線接続しているのでIPアドレスはeth0の値を表示しています。無線で接続する方はwlan0とかになるのかな?その場合は、-i wlan0 と表示するデバイス名を変更できます。

pi@RP5:~$ cat -n /etc/systemd/system/pi-oled.service
     1  [Unit]
     2  Description=display system info to OLED.
     3  After=network.target
     4
     5  [Service]
     6  Type=simple
     7  ExecStart=/home/pi/venv/pi-oled/bin/python3 /home/pi/work/repo/github.com/pi-oled/pi-oled.py -i eth0
     8  #ExecStop=/bin/kill -TERM $MAINPID
     9  Restart=on-failure
    10  User=pi
    11  WorkingDirectory = /tmp/
    12
    13  [Install]
    14  WantedBy=multi-user.target
pi@RP5:~$

具体的には7行目の -i eth0 を -i wlan0へ書き換えて daemon-reloadしてrestartしてみて下さい。

カテゴリー PC

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)