RaspBerry Pi に I2C 接続の単色 128*64 ドットの OLED(有機 EL) ディスプレイを接続して、コンソール画面(CTRL+ALT+F1 を押したときの画面)を表示するディスプレイとして使う手順です。RaspBerry Pi 本体に接続した USB キーボードから 16x8 文字表示のコンソールにログインして、シェル上で操作できます。
DHCP 環境で RaspBerry Pi にリモートでログインしたいけれども IP アドレスが分からない場合、通常は外部ディスプレイを接続する必要があって面倒ですが、このコンソール画面があれば "ifconfig | less" コマンドで調べられます。調べるだけでなく "ifconfig eth0 192.168.0.1" などとして IP アドレスを変更したり "vi /etc/dhcpcd.conf" で設定ファイルを編集することまでできます。解像度は低いですが、超小型のディスプレイなので、普段から接続したままでも邪魔になりません。
(1) 配線
(2) oled.zip をダウンロードして展開し、root 権限で自動設定スクリプト Install.sh を実行する
# sh Install.sh
(3) I2C の有効化
# raspi-config
(1) 配線
(2) oled.zip をダウンロードして展開し oled コマンドを /bin/oled に置いて実行パーミションを付ける
# cp oled /bin/oled # chmod a+x /bin/oled
(3) 8dot フォント(alt-8x8 他)をインストール
# export DEBIAN_FRONTEND=noninteractive # apt-get install console-data
(4) I2C の有効化
# raspi-config
(5) 解像度の追加
mode "128x64-60" # D: 25.175 MHz, H: 31.469 kHz, V: 59.94 Hz geometry 128 64 128 64 8 timings 39722 48 16 33 10 96 2 endmode
(6) oled サービスの追加
[Unit] Description = oled daemon After = multi-user.target # After=display-manager.service [Service] ExecStartPre=/bin/bash -c "/bin/sleep 10; /bin/chvt 1; /bin/fbset '128x64-60'; /bin/setfont 'alt-8x8'; export TERM=linux; setterm -blank 0 > /dev/tty1" ExecStopPost=/bin/bash -c "/bin/fbset '800x600-60'; /bin/setfont 'default8x16'" ExecStart = /bin/oled Restart = always Type = simple [Install] WantedBy = multi-user.target
(7) OS 起動時にサービスを開始するように指定
# systemctl enable oled
を実行する(不要になったら systemctl disable oled で無効化できる)。
# service oled stopでサービスが停止し、有機 EL ディスプレイが更新されなくなり、コンソール1の解像度が 128*64 ドットから 800*600 ドットになります(起動前に10秒間のウェイトが入りますので時間がかかります)。
# service oled startでサービスを再開します。
daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/xconsole
daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/tty1 ←この行を修正
# setterm -cursor off > /dev/tty1
# loadkeys jp106
# oled [-h] waitTime(100) i2cAddress(0x3c) i2cDeviceFile(/dev/i2c-0) framebufferDeviceFile(/dev/fb0)
オプション | 意味 | デフォルト値 |
waitTime | 画面転送時のフレーム間ウェイト時間 | 100 |
i2cAddress | I2C のスレーブアドレス | 0x3c |
i2cDeviceFile | I2Cのデバイスファイル | /dev/i2c-0 |
framebufferDeviceFile | フレームバッファのデバイス名 | /dev/fb0 |
# oled 100 0x3c /dev/i2c-0 /dev/fb0