みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

raspberrypi3 yoctoでSSD1306 OLEDディスプレイを動かす

アマゾンで安価に入手できる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となる。

動作確認

f:id:mickey_happygolucky:20161007024414j:plain

OLEDにコンソールが表示されている。