アマゾンで安価に入手できるOLEDディスプレイを購入した。
I2Cで、VCC、GND、SCL、SDAの4本のみの結線で使用できる。 制御用のICはSSD1306とのこと。
このデバイスはArduinoなどの電子工作用となっているが、意外とラズベリーパイでの動作報告が見当たらない。 そこでこれを動かしてやろうと考えた。
Linuxにはssd1307fb.c
というドライバがあり、これがSSD1306にも対応している。
しかし、実際に動かそうとすると意外と問題があり、カーネル4.4ではLEDが光らなかったり、表示位置がずれていたりしたので、それらは力技で直した。
yoctoの基本環境およびmeta-raspberrypi
基本環境のダウンロード
$ mkdir ~/rpi3 $ cd ~/rpi3 $ git clone git://git.yoctoproject.org/poky.git $ cd ~/rpi3/poky $ git clone git://git.yoctoproject.org/meta-raspberrypi
meta-rpi-ssd1306
meta-rpi-ssd1306をダウンロード。
$ cd ~/rpi3/poky $ git clone https://github.com/mickey-happygolucky/meta-rpi-ssd1306.git
環境変数を設定
下記を実行してbitbakeの実行に必要な環境変数を設定する。
$ cd ~/rpi3 $ source poky/oe-init-build-env build
ビルド対象に追加
bitbake-layerでビルド対象に追加。
$ bitbake-layers add-layer ../poky/meta-raspberrypi $ bitbake-layers add-layer ../poky/meta-rpi-ssd1306
local.conf
今回は、SSD1306のディスプレイをコンソールとして使用するために次の行を追加する。
MACHINE ?= "raspberrypi3" ENABLE_I2C = "1" KERNEL_DEVICETREE_append = " overlays/ssd1306fb.dtbo" OLED_CONSOLE = "1"
bitbake実行
$ bitbake rpi-basic-image
イメージの書き込み
meta-raspberrypiではrpi-sdimgとしてSDカードのイメージが生成されるので、これをddコマンドで書き込む。
$ sudo dd if=./tmp/deploy/images/raspberrypi3-64/rpi-basic-image-raspberrypi3-64.rpi-sdimg of=/dev/sdb bs=40M
/dev/sdbは環境によってはsdbだったりsdcだったりするので適宜変更する。 内蔵HDDの追加など行ってなければ大抵はsdbとなる。
動作確認
OLEDにコンソールが表示されている。