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" で設定ファイルを編集することまでなんとかできます。解像度は高くありませんが、超小型(27.3mm*27.3mm)のディスプレイなので、普段から接続したままでも邪魔になりません。
(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'" 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 で無効化できる)。
dtoverlay=i2c-gpio,i2c_gpio_sda=9,i2c_gpio_scl=10,i2c_gpio_delay_us=2
[Unit] Description = oled daemon #After = multi-user.target After=display-manager.service [Service] ExecStartPre=/bin/bash -c "echo 22 > /sys/class/gpio/export; echo out > /sys/class/gpio/gpio22/direction; echo 0 > /sys/class/gpio/ gpio22/value; /bin/sleep 10; /bin/chvt 1; /bin/fbset '128x64-60'; /bin/setfont 'alt-8x8'" ExecStopPost=/bin/bash -c "/bin/fbset '800x600-60'; /bin/setfont 'default8x16'" ExecStart = /bin/oled 250 0x3c /dev/i2c-3 /dev/fb0 0 Restart = always Type = simple [Install] WantedBy = multi-user.target
# loadkeys jp106
# service oled stopでサービスが停止し、有機 EL ディスプレイが更新されなくなり、コンソール1の解像度が 128*64 ドットから 800*600 ドットになります。
# service oled startでサービスを再開します(起動前に10秒間のウェイトが入りますので時間がかかります)。
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
(時刻を表示する例) # date -R > /dev/tty1
# convert file.png file.pbm # dispImg file.pbm
# oled [-h] waitTime i2cAddress i2cDeviceFile framebufferDeviceFile Brightness
引数 | 意味 | 省略時のデフォルト値 |
waitTime | 画面転送の周期(ms) | 100 |
i2cAddress | I2C のスレーブアドレス | 0x3c |
i2cDeviceFile | I2Cのデバイスファイル名 | /dev/i2c-0 と /dev/i2c-1(open できたほうを使用) |
framebufferDeviceFile | フレームバッファのデバイスファイル名 | /dev/fb0 |
Brightness | 明度(0-255) | 128 |
# oled 100 0x3c /dev/i2c-0 /dev/fb0 128
検索用キーワード:Raspberry pi, ラズベリーパイ, ラズパイ, OLED, 有機EL, LCD, 液晶, コンソール, ログイン、USB, キーボード, スクリーンエディタ, コマンド, サービス, login