カテゴリー
IchigoJam

IchigoJamで超簡単ミニ表示器! I2C超小型OLED有機ELディスプレイ

アマゾンなどで市販されているSSD1306搭載の超小型I2C接続OLEDディスプレイ(128×64ドット)を、IchigoJam TのCN5へ接続し、BASICプログラムだけで文字を表示する実験を行ってみました。
IchigoJam基板上の5ピンのCN5端子の手前側に寄せて(+5V以外の端子)をOLEDモジュールへ接続します。
※接続するだけ:専用のハード改造が不要という意味です
(動作するIchigoJamやCN5の取り付けが必要です)
IchigoJam TのCN5へOLEDモジュールを接続。これだけでハードは完成。あとはBASICプログラムで表示可能。古い初代IchigoJamやIchigoJam Uには対応していない。
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html

SSD1306搭載 I2C接続OLED 128×64ドットを使用する

アマゾンなどで市販されているI2C接続のOLED(有機ELディスプレイ)を使用します。いくつかのタイプが売られています。ピン配列がGND、VCC、SCL、SDAの順になってかどうかを確認してください。I2Cアドレスは78(7ビット表示で3C)のタイプを使用します。
IchigoJam TのCN5へ接続するだけ。ピンソケットの一番奥の+5V以外の4ピンの部分へ装着する。※誤って+5Vに接続してしまうとOLEDモジュールが故障する恐れがある。取り付けは簡単だが、慎重に。
OLEDモジュール購入時の注意点
□ SSD1306搭載品である
□ 128 × 64 ドット品である

□ ピンの並びが、GND、VCC、SCL、SDAの順である

□ I2Cアドレスが0x78または0x3Cである
□ 単色発光品である(表示エリアの一部だけが異なる色になっているタイプがある)
□ (なるべく)過去に購入したことのある販売店を選ぶ

以下で販売されているものは、ピン配列が異なる可能性があります。

HiLetgo

表示用BASICプログラム・OLED用ライブラリ for IchigoJam

以下にBASICプログラムを示します。行番号800番台が初期化部、900番台が表示部です。
行番号1~3でテレビ画面上へ文字を表示します。この状態で、gsb 800を実行すると、左上隅から8桁×16行のテキスト文字をOLEDへ出力します。一度、gsb 800を実行した以降は、gsb 900で表示を更新できます。

 最新版は、https://bokunimo.net/ichigojam/oled.htmlをご覧ください。
new
' OLED ドライバ for IchigoJam
' CC BY Wataru KUNINO https://bokunimo.net
1 cls:?"OLED LIB":?:?"for15jam":?:?"    ";chr$(255):?
2 ?" http://":?" goo.gl/":?" re3i4s":?
3 ?"  CC BY":?:?" Wataru":?" KUNINO":?:?" クニノ ワタル"
5 gsb800
9 end
800 'OLED INIT
810 poke#708,0,64,33,0,127,34,0,7,#AE,#D5,#80,#8D,#14,#20,#00,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#710to#721:ifi2cw(60,#708,1,P,1)?"E:Init";hex$(P)
830 next
900 'OLED OUT
910 ifi2cw(60,#708,1,#70A,6)?"E:ADR
920 forX=0to7:forY=0to15:P=vpeek(7-X,Y)*8:copy#700,P,8:ifi2cw(60,#709,1,#700,8)?"E"
930 next:next
940 rtn
★ 本プログラムの製作時に下記の情報を参考にしました。

★ 本ライブラリの配布時には下記を表示してください。
CC BY 国野亘 https://bokunimo.net

美しいIchigoJamフォントが、より美しく

最大の特徴は、IchigoJamフォントが、そのまま表示されることです。見慣れた美しいフォントが、こんな感じで、より美しく表示され、これだけでも大満足です(ボク個人の感想です)。
I2C接続のキャラクタ液晶などへの表示と異なる点は、IchigoJamのフォントが、そのまま表示されること。あぁ、ライブラリ部を#700番台にしたのは失敗だったかも。

課題

BASICで画像を転送しているので表示に100tick(約1.7秒)がかかります。(マシン語を使ったサンプルについては後述)

(追加) 参考情報 2017/6/13

以下は、初期化時のパラメータを変更したい方に向けた参考情報です。本ブログで紹介したBASICプログラム「OLED LIB」を作成する際に、Adafruitが作成したライブラリの初期化手順を参考にしました。
以下に、Adafruit作成のコードを示します。
上記のコードについてはMITライセンスとなります
ボクが作成したOLED LIBとの違いは、コマンド5つ、計7バイト分です。
省略したコマンドのうち2つ(A1とC8)は、Adafruitが画面を180°回転するために使用していたものです。これら(A1とC8)を追加することで、元のコマンドと同じ設定になります(画面が180°回転します)。

(追加) マシン後で高速化と横表示 2017/6/13

Facebook のIchigoJam-FANグループのRuria Amanagiさんが、データ処理の一部にマシン語を使用して、高速化していただきましたので、紹介いたします。ゲームなどで高速表示が必要な方には、うれしい進化だと思います。
(プログラムが長くなりますが、行番号800~880は、一度、実行すれば電源を切るまで再実行する必要が無いので、プログラムを分割するなどの工夫で対策することが出来ます。)

最新版は、https://bokunimo.net/ichigojam/oled.htmlをご覧ください。
【縦表示】マシン語版
800 'OLED INIT
810 poke#780,#00,#40,#21,#00,#7F,#22,#00,#07,#AE,#D5,#80,#8D,#14,#20,#00,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#788to#799:ifi2cw(60,#780,1,P,1)?"E:Init";hex$(P)
830 next
840 poke #79a,#70,#b5,#40,#18,#07,#23,#1b,#02
850 poke #7a2,#c9,#18,#10,#24,#03,#78,#db,#00
860 poke #7aa,#d3,#18,#1d,#68,#0d,#60,#5d,#68
870 poke #7b2,#4d,#60,#20,#30,#08,#31,#01,#3c
880 poke #7ba,#f4,#d1,#70,#bd
900 'OLED OUT
910 forP=#782to#787:ifi2cw(60,#780,1,P,1)?"E:ADR";hex$(P)
915 next
920 forX=0to7:D=usr(#79A,#907-X):ifi2cw(60,#781,1,#700,128)?"E"
930 next
940 rtn

【横表示】マシン語版
800 'OLED INIT
810 poke#7D0,#00,#40,#21,#00,#7F,#22,#00,#07,#AE,#D5,#80,#8D,#14,#20,#00,#A1,#C8,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#7D8to#7EB:ifi2cw(60,#7D0,1,P,1)?"E:Init";hex$(P)
830 next
840 poke #79a,#f0,#b5,#40,#18,#07,#23,#1b,#02,#c9,#18,#94,#46,#10,#24,#03,#78
850 poke #7aa,#db,#00,#d2,#18,#08,#27,#00,#23,#07,#25,#56,#5d,#fe,#40,#5b,#41
860 poke #7ba,#01,#3d,#fa,#d2,#0b,#70,#01,#31,#01,#3f,#f4,#d1,#01,#30,#62,#46
870 poke #7ca,#01,#3c,#ec,#d1,#f0,#bd
900 'OLED OUT
910 forP=#7D2to#7D7:ifi2cw(60,#7D0,1,P,1)?"E:ADR";hex$(P)
915 next
920 forY=0to7:D=usr(#79A,#900+Y*32):ifi2cw(60,#7D1,1,#700,128)?"E"
930 next
940 rtn

by ボクにもわかるIchigoJam用マイコンボード
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es