*概要 [#nd4d04e0]
RaspBerry Pi に I2C 接続の単色 128*64 ドットの OLED(有機 EL) ディスプレイを接続して、コンソール画面(CTRL+ALT+F1 を押したときの画面)を表示するディスプレイとして使う手順です。RaspBerry Pi 本体に接続した USB キーボードから 16x8 文字表示のコンソールにログインして、シェル上で操作できます。

&ref(oled01.jpg,zoom,500x400);
&ref(oled02.jpg,zoom,300x240);
&ref(oled03.jpg,zoom,300x240);

-動画 &ref(oled01.mpg); ([[Twitter:https://twitter.com/milktolait/status/827124644125609984]] の動画)
-機種: RaspberryPi(Model-B, Model-B+)で動作確認
-OS
--Linux pi 4.1.13+ #826 PREEMPT Fri Nov 13 20:13:22 GMT 2015 armv6l GNU/Linux
---NOOBS v1.5.0, v1.9.2 でインストール
--Linux raspberrypi 4.4.34+ #930 Wed Nov 23 15:12:30 GMT 2016 armv6l GNU/Linux
---Raspbian Jessie Lite Release date: 2017-01-11

-OLED(有機 EL) ディスプレイ: SSD1306 制御の製品(4ピン, I2C インタフェースのもの, I2C スレーブアドレス=3CH[1bit左シフトして78Hと表記される場合もあり])
--[[Aitendo1:http://www.aitendo.com/product/14958]] [[Aitendo2:http://www.aitendo.com/product/14959]]
--[[Amazon:https://www.amazon.co.jp/HiLetgo-128%C3%9764-OLED%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-%E6%B6%B2%E6%99%B6%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-Arduino/dp/B01MF97E87/ref=sr_1_cc_3?s=aps&ie=UTF8&qid=1486539163&sr=1-3-catcorr&keywords=oled+i2c]]

*動作 [#t1aefde1]
-CTRL+ALT+F1 で表示されるコンソールが有機 EL ディスプレイに表示されます。解像度は128*64になります。同時に HDMI にも出力されます
-CTRL+ALT+F2 以降のコンソールは通常通り使用できます。X Window も通常通りです。こちらに切り替えている間は有機 EL ディスプレイには表示されません

*設定 [#s155fee4]
-自動設定スクリプト Install.sh を書きました。oled.zip に含まれています。"sh Install.sh" を実行すると下記の (2)-(7) が自動で行われます。ただし「(4)I2Cの有効化」は別途手動で行う必要があります。

(1) 配線
-RaspberryPi の I2C 出力と OLED ディスプレイを結線する(4本)
--参考ページ: [[Raspberry PiでI2C接続の128×64 OLEDに日本語を表示(美咲フォント):http://ytkyk.info/blog/2016/06/19/raspberry-pi%E3%81%A7128x64%E3%81%AEoled%E3%81%AB%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E7%BE%8E%E5%92%B2%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88/]]

(2) oled コマンド(VRAM の内容を I2C に繰り返し出力するオリジナルプログラム)を /bin/oled に置いて実行パーミションを付ける
-&ref(oled.zip);

 # cp oled /bin/oled
 # chmod a+x /bin/oled

(3) 8dot フォント(alt-8x8 他)をインストール
 # export DEBIAN_FRONTEND=noninteractive
 # apt-get install console-data
-フォントファイルが /usr/share/consolefonts に追加される
-ここでキーボードの設定もできる

&ref(console.png,zoom,300x200);

(4) I2C  の有効化

 # raspi-config
-メニューから "Advenced Options" → "I2C" を選択して有効化
-ここで "4 Internationalisation Options" メニューから日本語キーボードの設定もできる
-再起動


(5) 解像度の追加
-/etc/fb.modes を編集して、末尾に下記の行を追加

 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 サービスの追加
-/etc/systemd/system/oled.service を新規作成して下記の内容を入力

 [Unit]
 Description = oled daemon
 After = multi-user.target
 # After=display-manager.service
 [Service]
 ExecStartPre=/bin/bash -c "/bin/sleep 15; /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 で無効化できる)。

*補足 [#xdb433d7]
-自動設定スクリプト Install.sh を書きました。oled.zip に含まれています。"sh Install.sh" を実行すると上記の (2)-(7) が自動で行われます。ただし「(4)I2Cの有効化」は別途手動で行う必要があります。
-%%サービスを停止しても X-Window の解像度が 128*64 のままで、本来の解像度に戻りません 。COLOR(RED){解決方法が分かる方がいましたら教えてください}%%
--原理を正確に把握していませんが、上記 (6) の /etc/systemd/system/oled.service ファイルの [Unit] セクションに "After = multi-user.target" を追加し、ExecStartPre に /bin/sleep 15 を追加してスリープを入れることで希望通りの動作になりました。すなわち、通常は本来の解像度で X Window を使うことができ、本体に接続した USB キーボードで CTRL+ALT+F1 を押したときだけ、解像度 128*64 のコンソール1が有機 EL ディスプレイに表示されます。その後 CTRL+ALT+F7 を押すと X Window に戻ります。
-手動でのサービスの停止と再開
 # service oled stop
でサービスが停止し、有機 EL ディスプレイが更新されなくなり、コンソール1の解像度が 800*600 になります。
 # service oled start
でサービスを再開します。
-I2C スレーブアドレスが 3CH(78H) 以外のディスプレイを使う場合はソースファイルoled.c 中の定数 OLED_ADDR を修正して再コンパイルが必要です(gcc -o oled oled.c)
-CPU 負荷を軽減するために、1フレーム表示ごとに 100ms のウェイトを入れています(10fps程度?)。top コマンドで表示される oled コマンドの CPU 負荷は 1~2% になっています。
-/etc/rsyslog.conf の末尾を次のように編集すると、システムログを OLED ディスプレイに表示させることができます。
--旧: xconsole に出力
 daemon.*;mail.*;\
         news.err;\
         *.=debug;*.=info;\
         *.=notice;*.=warn       |/dev/xconsole
--新: OLED(/dev/tty1) に出力
 daemon.*;mail.*;\
         news.err;\
         *.=debug;*.=info;\
         *.=notice;*.=warn       |/dev/tty1 ←この行を修正

-「(6) oled サービスの追加」の "export TERM=linux; setterm -blank 0 > /dev/tty1" の部分は、ディスプレイの省電力機能を無効にするためのものです。これを付けなければ、一定時間(600秒)の無操作でディスプレイ表示が OFF になります。その場合 USB キーボードのキーを押せば再度表示されます。
-下記のコマンドでカーソルが非表示になります
 # setterm -cursor off > /dev/tty1

-日本語キーボードを使うには
 # loadkeys jp106 

*ダウンロード [#cae08b6d]
-&ref(oled.zip);

----
#counter
RIGHT:[https://goo.gl/ZAZqIj]
RIGHT:fanoutsendai@lait.sakura.ne.jp

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS