IchigoJamを使った「ボクにもわかる I2C インタフェース方式」オープン

I2Cインタフェースを使うと、簡単に多機能なデバイスを接続することが出来るだけでなく、センサの校正や、得られたデータの補正も(アナログ出力のセンサと比べて)簡単に行える場合があります。
簡単といっても、多少の知識は必要につき、温度センサのドライバ作りを行う「まとめ」ページを作ってみました。
ボクにもわかる I2C インタフェース方式
IchigoJam TのCN5へ接続して実験してみよう
まだ、書きなぐっただけの初稿段階のものです。誤字脱字以外で間違っている部分があれば、教えてください(I2Cアドレスのピン設定は意図的です。ちゃんと動作検証してあるので、無視してください)。
もともと、Raspberyy Pi用に様々なドライバを作成しており、これらを活かしてRaspberry Piでのドライバ製作記事にしようと思っていたのですが、途中で方針を変更し、今回は完全にIchigoJam版です。
なお、Raspberry Pi用、Arduino用のドライバは以下で配布中。
Raspberry Pi 用の各種I2Cセンサ用ドライバ
Arduino用のセンサ用ドライバ
bu ボクにもわかるIChigoJam用マイコンボード
ボクにもわかる I2C インタフェース方式
IchigoJam TのCN5へ接続して実験してみよう

ほぼ全部入りIchigoJam用マイコンボードの製作例

ほぼ全部入りIchigoJam用マイコンボードと言えるかもしれない端末を製作してみました。
  • IchigoJam用マイコン搭載
  • MixJuiceのファームを書き込んだESP-WROOM-02無線LANモジュール搭載
  • 有機ELディスプレイOLED搭載
  • 小型液晶ディスプレイLCD搭載
  • 1.5V⇒5V昇圧回路搭載
  • USBシリアルインタフェース搭載
  • EEPROM搭載
  • サウンダ、ビデオ出力、キーボード入力、ファームウェア一発書き込みボタンなど

ほぼ全部入りと言えるかもしれないIchigoJam用マイコンボードを製作してみた。

「これと全く同じものを製作してみたい」という人は、居ないと思います。上の写真では、CQ出版社のIchigoJam用コンピュータ電子工作学習キットIF ICH-KITに付属のPersonal Computer基板とWireless Shieldを利用し、OLEDモジュールなどを追加しました(MixJuice機能は電池だけでは動かない)。
この夏休みに、自分だけの全部入りボードを作ってみてはいかがでしょう?
by ボクにもわかるIchigoJam用マイコンボード
有機ELディスプレイの「まとめページ」も完成!

ソースコードがゲームかもしれないIchigoJam BASICでSNAKE

このゲームでは、(どちらかといえば)ソースコードを楽しみましょう。
IchigoJam BASICで書かれたスネーク・ゲームです。
FacebookのIchigoJam-FANグループ、Ruria Amanagiさんが作られたものです。
new
1'SNAKE
2 VIDEO3:CLS
10 A=#900:POKEA,6:COPYA+1,A,16
20 COPY#91F,#90F,82
30 COPY#971,#970,15

40 GSB800
50 X=8:Y=3:D=0:S=0
60 LET[0],3,5,1,7
70 K=INKEY()-28:IF(-1<K)&(K<4)D=K
80 X=X+[D]%3-1:Y=Y+[D]/3-1

85 IFSCR(X,Y)END
90 LCX,Y:?"O";
95 S=S+1:LC0,0:?S;
99 GSB900:GOTO70
800 let[71],#4000,#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
810 ifi2cw(60,#88E,1,#890,20)E
820 let[72],#B5F0,#1840,#2307,#21B,#18C9,#4694,#2410,#7803,#DB,#18D2
830 let[82],#2708,#2507,#5D56,#40FE,#415B,#3D01,#D2FA,#700B,#3101,#3F01
840 let[92],#D1F5,#3001,#4662,#3C01,#D1ED,#BDF0
900 for[98]=0to7:ifusr(#890,#900+[98]*16)&0|i2cw(60,#88F,1,#700,128)E
910 next:rtn
このプログラムの良く出来ている部分は、四角の枠を高速に描く部分と、キー入力処理の部分です。
プログラムの行番号1から99を解読してみましょう。どうやら、ソースコードがゲームだったようです。
動かしてみる必要は無いかもしれませんが、もし動かしてみたい人が居ましたら、IchigoJam TのCN5へOLEDを接続して実行してください。IchigoJamのファームウェアには、最新の1.2.2が必要です。
by ボクにもわかるIchigoJam用マイコンボード/OLED

IchigoJam + OLEDで合計4本のゲームを公開しました

これまでに作成したOLED用ゲーム2本と、新たに作成した横画面表示の「あらしテニスゲーム」と「スロットゲーム」の2本をまとめました。
高速版「レーシングゲーム」
高速版・PCG対応版「いかジャンプゲーム」
高速・横画面表示「あらしテニスゲーム」 <new
高速・横画面表示・PCG対応版「スロットゲーム」 <new
スロットゲーム
いかジャンプの動きが面白いです。まだ、ご覧になられていない方は、下記の動画をご覧ください(音が出ます)。
by ボクにもわかるIchigoJam用マイコンボード×有機ELディスプレイOLEDモジュール

IchigoJam + OLEDで3Dディスプレイの実験への遠い道のり。。。

IchigoJamのCN5に接続した有機ELディスプレイOLEDの最後の実験は、
3Dディスプレイです。といった記事を書きたかったのですが、残念ながら時間切れです。

IchigoJamから表示した3Dコンテンツ。視差バリアを取り付ければ立体的に浮き上がるはずだった。。。

ディスプレイへ3D表示を行う方法にはいくつかありますが、試作しようとしていたのは視差バリア方式です。手持ちのOLEDモジュールの画面にはガラスが貼られているので、発光面から若干の距離があります。そこで、ガラス表面に格子状の視差バリアを貼ることで、3D化が出来ると考えました。
視差バリアは、インクジェットプリンタで作成します。対角0.96インチ、横64ピクセル、アスペクト比1:2から計算すると、149.1ピクセル/インチの解像度で32本の縦状格子を印刷し、OLEDモジュールのガラスカバーに貼り付ければ実現できるはずです。
冒頭の写真は、OLEDモジュールと、実際にインクジェットプリンタで普通紙へ印刷した視差バリアです。
しかし、残念なことに紙の厚みの部分で光が拡散してしまいました。
また、インクジェット用のOHPシートを注文していたのですが、残念ながら、保有するプリンタには対応しておらず、用紙を吸い込んだあとにエラーが発生して吐き出してしまいました。
用紙選択のメニューに「専用OHPシート」の選択が無いプリンタでは使えないそうです。
視差バリアの印刷用PDFは下記からダウンロードすることができます。
下図は製作したコンテンツです。2本の指を立てているように見えますが、実際には1本で、左目で見た指と右目で見た指です。視差バリアの貼り付けが難しいと思っているので、大きな視差が出るように設計しました。
製作した3Dコンテンツ;立てているのは人差し指1本だけ
MixJuice経由でダウンロードして、OLEDへ表示するには、以下を実行してください。IchigoJamマイコン内のファイル3へ自動的に保存します。ファイル3などにプログラムを保存している場合は、予め別の媒体にコピーしておいてください。
?"MJ GET bokunimowakaru.github.io/MJ/pg05/bmp/thr/c.txt
一か月ちかくにわたって、IchigoJamを使ったOLEDモジュールへの表示実験を行ってきましたが、そろそろ別の課題に取り組もうと思っています。
3D表示の再挑戦は夏休み明けになるかもしれません。
夏休みの宿題として、この実験を引き継いでいただける人が居ましたら、ぜひ挑戦ください。
(このまま製作しても成功するかどうか分かりませんし、何か課題が発生し、それを解決しなければならないかもしれません。)

OLED情報のまとめページ

今日は、これまでのOLED用ドライバを整理していました。最後に、がらりと修正したので更新前のものと整合性がとれていない部分残っているかもしれません(細かな不整合であっても、気づかれた場合は、教えていただければ幸いです)。
by ボクにもわかるIchigoJam用マイコンボード

IchigoJamのCN5へ接続した有機ELでアニメーション表示

これまで、有機ELディスプレイOLEDへのテキスト文字表示、グラフィック文字表示を行いましたが、今回はアニメーションです。IchigoJamのファイル領域へ画像を保存し、順次表示するアイデアをRuria Amanagiさんからいただきました。

クリックすると動画が再生される。音が出るので注意。

動画が見れない方は、こちらの写真から想像してください。

コンテンツをダウンロードする

コンテンツとプログラムは、MixJuiceを使ってダウンロードすることが出来ます。画像ダウンロード時にファイル1~3へ自動的に保存してしまうので、大切なプログラムを保存している場合は、予め別の媒体へコピーしておいてください。
ダウンロードするには、ボクニモワカルfor MixJuiceのメニュー[8]⇒[5]⇒[8]または、下記のコマンドを入力してください。

?"MJ GET bokunimowakaru.github.io/MJ/pg05/8.txt

ご注意
・ダウンロードに5分くらいかかります。
・ファイル番号1~3が上書きされます。
もしくは、GitHubへアクセスして、直接ダウンロードすることも出来ます。GitHubにはジャンケン用に6枚の画像が保存されており、このなかから3枚をダウンロードして表示します。

プログラム

コンテンツをダウンロードすると、自動的に下記のプログラムがダウンロードされます。必要に応じて、SAVE 0でファイル番号0へ保存してください。
実行中に、タクトスイッチBTNを押下するとプログラムが終了し、ボクニモワカルfor MixJuiceのトップページに遷移します。
' I2C OLED BMP Loader [GRAPHICS] for IchigoJam :' https://bokunimo.net/ichigojam/oled.html
' CC BY (c) 2017 Ruria Amanagi and Wataru KUNINO @ IchigoJam-FAN (Facebook)
10 let[0],#b5f0,#2207,#0212,#1852,#2310,#c8f0,#c2f0,#3b01
20 let[8],#d1fb,#bdf0
30 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
40 ifi2cw(60,#8A8,1,#8B0,18)?"E
50 ifi2cw(60,#8A8,1,#8AA,6)?"E
60 A=#6000:D=USR(#800,A):ifpeek(#700)=255letA,A+4096
100 'MAIN
110 for I=1 to 3:for J=0 to 3
120 D=usr(#800,A+1024*I+256*J)|i2cw(60,#8A9,1,#700,256)
140 next:wait10:next:if!btn()goto 100
150 ?"MJ GET bokunimowakaru.github.io/MJ/0.txt"
160 end

OLEDをIchigoJamへ接続するための詳しい情報は、

OLEDをIchigoJamで使用する方法をまとめたウェブページ:
https://bokunimo.net/ichigojam/oled.html

2組、作れば、こんなことも

2台のIchigoJamで動かしてみた。どっちが勝っているんだか。

by ボクにもわかるIchigoJam用マイコンボード

なんと! IchigoJamのCN5へSPI接続用OLEDモジュールを接続してみた

SPI接続用であれば、GND、VCC、D0、D1の順に端子が並んでいるOLEDモジュールが多く売られています。
そこで、「IchigoJamへSPI接続用のOLEDモジュールを簡単に接続」といった記事を書こうと思いました。ただし、ハンダ付け初心者には難しいと思います。(教室などで利用するには、予めハンダ付け作業を行っておく必要があるでしょう。)
下図のようにCN5へ接続して、動かすことが出来ました。
SPI接続用のOLEDモジュールを改造して、IchigoJam Tへ接続したときの様子。改造にはハンダ付け作業が必要なので、初心者には難しい。ロゴはjig.jpの登録商標
CN5はI2Cインタフェース用の接続端子です。SPIインタフェースを接続することは出来ません。
一方、OLED用のコントローラICには、SPIとI2Cの両方のインタフェースが搭載されています。したがって、I2C用かSPI用かの違いは基板や部品だけです。
また、手持ちのSPI接続用のOLEDモジュールの裏面には「I2C」の記載もあったので、改造によって両対応に出来るのではないかと考えました。
改造前の基板の状態。「IIC」の印刷があり、R1、R4、R6、R7、R8に何らかの対応が必要なことが分かる。
まずは、OLEDコントローラ SSD1306 データシートを確認し、改造方法を知る、、、と言いたいところですが、本モジュールの回路図が見当たらなかったので、テスターで回路の接続から確認しました。以下に、要改造のポイントを示します。
        R1  ショート:ジャンパー線 0Ωを追加
        R2  オープン:チップ抵抗を取り外す
        R3  オープン:チップ抵抗を取り外す
        R4  ショート:ジャンパー線 0Ωを追加
        R8  ショート:ジャンパー線 0Ωを追加
        RES端子 リセット回路が必要
        DC端子 GNDへ接続
R1、R2、R3、R4、R8の改造は簡単でしょう。一方、RES端子とDC端子の改造については、ちょっとした手術的な対応が必要です。ブレッドボードなどで外部で構成したほうが簡単ですが、ここでは教室などで手軽に使えるように、OLEDモジュールの基板上で対応します。
まずは、下図の様に改造してください。
R2とR3の抵抗を外し、R1、R4、R8にジャンパ線を半田付けし、DC端子をGNDへ接続した。またRES端子には、R2またはR3から取り外した抵抗を電源(U2の出力側)へ接続(フレキ基板の中央付近)。
ところがこの回路だと、リセットをかけることが出来ません。RES端子へコンデンサを追加することで対応しました。上部のピンヘッダ付近に実装したほうが簡単だったことに、後で気づきました。
RES端子にコンデンサを追加してリセット回路を構成したときの様子。コンデンサを放電する回路は無いので、モジュールをCN5から取り外したあと、すぐに取り付けると動かないかもしれない。コンデンサを放電するために10秒くらい待ってから再接続すれば、動作するだろう
RES信号の部分に取り付けたコンデンサについては、ピンヘッダのRESとDCに接続した方が、簡単です。抵抗については、VCCへ接続する方法が考えられますが、タイミングが合わなくなるかもしれませんので、事前に動作検証してから実施ください。
OLEDをIchigoJamで使用する方法をまとめたウェブページ:
by ボクにもわかるIchigoJam用マイコンボード:

IchigoJam + MixJuice でグラフィック表示~有機ELディスプレイOLED~

IchigoJamから有機ELディスプレイ(OLED)へ、グラフィック表示する実験を行ってみました。
画像のダウンロードと転送にはMixJuiceを使用します。IchigoJam TへMixJuiceを接続し、さらにOLEDモジュールを接続すればハードウェアは完成です。
ハードウェアはIchigoJam TとMixJuice、OLEDモジュール。これらを接続するだけ超簡単。自己発光しているOLEDで見ると、より美しく見える。ぜひ実機へ表示してみてください。

必要なもの

必要なものは、IchigoJam T、MixJuice、OLEDモジュールです。ただし、OLEDモジュールのピン配列は、GND、VCC、SCL、SDAの順番になっているものを使用してください。ピン配列が異なる場合は、ブレッドボードなどで配線を入れ替える必要があります。

プログラム

下記は、MixJuiceから画像ファイルをダウンロードし、OLEDへ転送するためのプログラムです。MixJuiceを無線LANアクセスポイントへ接続してから、実行してください。1枚の画像のダウンロード時間に、2~3分かかります。
new
100 cls:?"OLED BMP":?"ダウンローダ":?:?"by":?"W.Kunino":gsb800
110 ifi2cw(60,#8A8,1,#8AA,6)?"E
120 B=-1:goto300
200 'LINE
210 cls:uart0:forI=0to15:?chr$(#E0+I);:next:?:?"Step ";B+1;"/8"
220 ifi2cw(60,#8A9,1,#700,128)?"E
300 'MJ
310 B=B+1:ifB<8uart1:?"MJ GET bokunimowakaru.github.io/MJ/pg05/bmp/ras/";B;".txt"
320 end
800 'INIT
810 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
820 ifi2cw(60,#8A8,1,#8B0,18)?"E
900 'OUT
910 ifi2cw(60,#8A8,1,#8AA,6)?"E
920 for[98]=0to7:for[99]=0to15:copy#8A0,vpeek(7-[98],[99])*8,8:ifi2cw(60,#8A9,1,#8A0,8)?"E
930 next:next:rtn
run
本プログラムのライセンスはCC BY 国野亘 https://bokunimo.netです。
OLEDへグラフィックを転送し、表示したときの様子。拡大するとドットが目立ち、分かりにくい。実物のほうが美しい。IchigoJam ロゴは jig.jp (ichigojam.net jig.jp) の登録商標。イチゴの画像の一部に、パロディの考えに基づいて、ラズベリーパイ財団の権利物の影響を受けた図柄を使用。瓶入りのイチゴジャムは「いらすとや」のイラストを利用(権利表示不要で利用可能・http://www.irasutoya.com/2014/09/blog-post_65.html)。

仕組み

64ドット×128ドットの2値BMPファイルを作成し、IchigoJamのPCGキャラクタ(変更可能な文字フォント)へ変換したファイルをGitHubに置いてあります。下図は元のBMPファイルです(ブログへ掲載するためにPNG形式へ変更)。
GitHubへ置いた変換後のファイルは以下のようなテキストファイルです。このファイルをMixJuiceでダウンロードし、末尾の行のgoto200で、前記プログラムの行番号200以降を実行します。
poke#700,0,0,0,0,0,0,0,0
poke#708,0,0,0,0,0,0,0,0
poke#710,0,0,0,0,0,0,0,0
poke#718,0,0,0,0,0,0,0,0
poke#720,0,0,0,#C0,#C0,#E0,#F0,#F0
poke#728,#78,#B8,#FC,#9C,#FE,46,#DF,#BE
poke#730,#FC,#FC,#F8,#E0,#80,0,0,0
poke#738,0,0,0,0,0,0,0,0
poke#740,0,0,0,0,0,0,0,0
poke#748,0,0,0,0,0,0,#E0,#E8
poke#750,#F8,#E4,28,8,24,#F0,0,#C0
poke#758,#E0,#70,#F0,#70,#D8,#F8,#FC,#FE
poke#760,0,2,#84,2,0,2,0,24
poke#768,58,#B8,#BA,#E8,#E8,#DA,24,2
poke#770,0,10,0,2,#FC,#FC,#6C,#F8
poke#778,#F8,#F0,#E0,#C0,0,0,0,0
goto200
IchigoJamのPCGの容量は128バイト(16文字分)です。一方、OLEDモジュールの全体にグラフィックを表示するには1024バイトの容量が必要です。そこで、128バイトごとに8回に分けてデータを転送しています。

名刺を作ってみた

この仕組みを利用し、ボクの名刺を作ってみました。IchigoJam FANグループの一員という位置づけです(私はIchigoJamおよびjig.jpの関係者ではありません)。
IchigoJam + MixJuiceで、いまどき珍しい縦書きの名刺。私はIchigoJamのロゴにFANを追加した。
有機ELディスプレイOLEDへ表示したときの様子。行番号310の「ras」の部分を「wat」に変更するとダウンロードすることが出来る。

その他の画像配信

行番号310のGitHubのURL中の「ras」を、「wat」に書き換えると、「国野亘」の画像をダウンロードすることが出来ます。また、「por」にするとボクの似顔絵が表示されます。
ボクの似顔絵を表示してみた。普段は左手にグリコのポッキーを持っているが、消してみたところ、こぶしで威嚇しているように見える。ポッキーはあったほうが良い。

[応用編] 超ミニ掲示板 追記 2017/7/1 19:00

会社や展示会の受付などに、電子掲示板が置いてあります。応用編として、IchigoJam + MixJuice + OLEDモジュールで実現してみました。以下のプログラムの行番号400番台で、ダ
ンロードするコンテンツを切り替え、次々に画面を表示します。
new
100 cls:?"OLED BMP":?"ケイジバン":?:?"by":?"W.Kunino":gsb800
110 ifi2cw(60,#8A8,1,#8AA,6)?"E
120 B=-1:P=1:goto300
200 'LINE
210 cls:uart0:forI=0to15:?chr$(#E0+I);:next:?:?"Step ";B+1;"/8"
220 ifi2cw(60,#8A9,1,#700,128)?"E
300 'MJ
310 B=B+1:ifB>7goto500
320 uart1:?"MJ GET bokunimowakaru.github.io/MJ/pg05/bmp/";
330 goto 400+10*P
400 'Page
410 ?"ras/";B;".txt":end
420 ?"por/";B;".txt":end
430 ?"pin/";B;".txt":end
440 ?"wat/";B;".txt":end
500 'Next
510 WAIT 600
520 P=P+1:B=-1:ifP>4letP,1
530 ifi2cw(60,#8A8,1,#8AA,6)?"E
540 goto300
800 'INIT
810 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
820 ifi2cw(60,#8A8,1,#8B0,18)?"E
900 'OUT
910 ifi2cw(60,#8A8,1,#8AA,6)?"E
920 for[98]=0to7:for[99]=0to15:copy#8A0,vpeek(7-[98],[99])*8,8:ifi2cw(60,#8A9,1,#8A0,8)?"E
930 next:next:rtn
run
本プログラムのライセンスはCC BY 国野亘 https://bokunimo.net です。
以下は、実行画面です。何の絵かわかるでしょうか?
DIPタイプのIchigoJamマイコンにつけられていたラベルを真似た図をダウンロードしてみた。図やIchigoJamのロゴはCC BY jig.jpのライセンスにしたがって使用。1枚の画像をダウンロードするのに、約2分を要する。実際に使用するときは、行番号510の待ち時間は、もっと長くしないと、いつも書き換え中になる。

IchigoJamでOLEDモジュールを使う方法

このところ、IchigoJamを使ってOLEDモジュールへ表示する記事について、いろいろと紹介してきました。これらをまとめてウェブページを作成中です。
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html
その他
BMPファイルからの変換ツール(C言語)を下記に公開しました。OLEDが広まってくれば、横画面版や、JavaScript版を作るかも。
by ボクにもわかるIchigoJam用マイコンボード