ボクにもわかる IchigoJam用
I2Cキャラクタ液晶LCDの接続方法
AE-AQM0802, AE-AQM1602A, AQM1602Y

[IchigoJam メニューへ戻る]

I2Cキャラクタ液晶の接続例 (IchigoJam SにAE-AQM0802を接続した)

 ここでは、秋月電子で売られているI2C接続小型キャラクタLCDモジュール用ピッチ変換モジュールAE-AQM0802のほか、AE-AQM1602A、AQM1602Yを IchigoJamに接続する方法について説明します。
 (お手持ちのIchigoJam BASICがバージョン 1.2.1以前の場合や、IchigoJam U 以前の場合、Arduino用シールドなどで使われているHD44780互換LCD、I2C用ICにPCF8574を使用したLCDについては、下表のリンクから別ページへアクセスしてください。)

液晶LCDの種類と関連ページへのリンク
No. 内容 I2C部 LCD部 関連ページ(リンク)
1 IchigoJam BASIC Ver.1.2.2〜4
AE-AQM0802, AE-AQM1602A, AE-AQM1602Y
ST7032 本ページの次節へ進む
2 IchigoJam BASIC Ver.1.2.1以前
初代 IchigoJam、IchigoJam U
ST7032 別ページへ
3 SC1602BS-B(HD44780互換)
Arduino用 LCDシールドなど
なし HD44780 別ページへサンプルBとC
4 I2C変換ボードつきLCD
Arduino用 LCDユニットなど
PCF8574 HD44780 ブログを参照


I2C液晶LCD AE-AQM0802 をIchigoJamへ接続する


I2Cキャラクタ液晶のLCD接続回路図

 液晶LCDモジュールのRESET以外の4つの端子を、IchigoJam S または T のCN5へ接続します。LCDのI2Cクロック(SCL)をCN5のSCL端子へ、I2Cデータ(SDA)をSDAへ、電源(VDD)を3.3Vへ、VSSをGNDに接続してください。液晶モジュールの裏側の「PU」と書かれた部分はプルアップ抵抗のジャンパー部です。完成品はハンダが盛ってありますが、キットの場合は自分でハンダを盛ってください(下図の一つ後の図)。


小型ブレッドボードを使って配線する
(上から、赤=3.3V、黄=SCL、橙=SDA、黒=GND)


LCDモジュール裏面のPU部にハンダ

 ここで使用するLCDモジュールは、秋月電子通商のI2C接続小型LCDモジュール(8x2行)ピッチ変換モジュール(完成品)[AE-AQM0802]です。ハンダ付け不要の完成品なので、ブレッドボードに実装することで、簡単に製作することが出来ます。

 接続が完了したら、動作確認のために、デモソフトを動かしてみましょう。下記は、IchigoJam BASIC Ver 1.1.1, 1.2.1, 1.2.3, 1.2.4(β版)で動作確認済みです。

I2C液晶用デモソフト
IchigoJam BASIC
 Ver 1.1.1〜1.2.4用
download/LC_DEMO.zip
I2C液晶用デモソフト
(動画と同一)
download/CQ_DEMO.zip


YouTube 動画[音が出ます]

 プログラムの製作に進む場合は、「ドライバ」をクリックしてください。



I2C液晶 AE-AQM1602A(KIT) をIchigoJamへ接続する


I2Cキャラクタ液晶AE-AQM1602A(KIT)をIchigoJamへ接続したときの様子

 こんどは、16桁×2行のI2C液晶 AE-AQM1602A(KIT) をIchigoJamへ接続してみます。ただし、AE-AQM0802のような完成品ではなく、狭ピッチのピンのハンダ付け作業が必要です。また、ガラス製の液晶の角が破損しやすい構造です。やや上級者向けのキットですが、表示量が多く、また文字も大きく読みやすい製品です。
 接続方法は、ピンの配列順序が異なるだけです。写真の左から+V、SCL、SDA、GNDの順に並んでおり、+VをIchigoJamのCN5の3.3Vへ、SCL、SDA、GNDをNC5の同じ名前の端子へ接続してください。

 プログラムの製作に進む場合は、「ドライバ」をクリックしてください。



I2C液晶 AE-AQM1602Y をIchigoJamへ接続する


I2Cキャラクタ液晶AE-AQM1602YをIchigoJamへ接続したときの様子

 こちらも16桁×2行ですが、AE-AQM1602A(KIT) の半分くらいの大きさの製品です。また、ピンピッチがブレッドボードと同じ2.54mmになっている点も特徴の一つです。
 ただし、コンデンサ(1μF)2つと抵抗(10kΩ)2本、ジャンパ線などの外付け部品が必要です。下図は、外付け部品の実装例です。


I2Cキャラクタ液晶AE-AQM1602Yの外付け部品


AE-AQM0802A, AE-AQM1602A, AQM1602Y 用ドライバ

 下記のプログラムの行番号996以降がドライバ部です。ドライバ部のプログラム容量(サイズ)は、136バイトです。以前に掲載していた旧バージョン(V1)に比べ、約半分(-47%)の削減を図りました。

プログラム I2C LCD Driver 2 for IchigoJam
1 cls:?"I2C LCD Driver 2 2 ?"by IchigoJam-FAN 3 gsb @LC_INI 995 end 996 @LC_INI:let[96],640,64,#5639,#C6C,#C080,64:ifi2cw(62,#8C3,5)?"E 997 @LC:ifi2cw(62,#8C0,3,#900,16)+i2cw(62,#8C8,3,#920,16)?"E 998 rtn
【使い方】
 行番号3の「gsb @LC_INI」でI2C液晶を初期化し、テレビの左上の16桁×2行をI2C液晶に転送します。初期化時に最小限必要なコマンドしか使用していないので、うまく初期化できないときは、一度、I2C液晶の電源を切ってから再実行してください。
 表示内容を変更したいときは、「gsb @LC」でテレビの左上の16桁×2行をI2C液晶に転送します。つまり画面の左上の一部分だけを使ったプログラムを作成し、行番号900を呼び出せば、I2C液晶に文字を表示することができるというカラクリです。
 配列変数の[96]〜[101]をデータ転送用に使用します。配列を使いたい場合は、[0]〜[95]の空き領域を使用してください。なお、IchigoJam BASICのバージョン1.2.3で動作確認を行いました。

 ドライバ部に「ifi2cw」のような命令がありますが、これは「if」と「i2cw」を続けて表記したものです。I2Cの応答が無かった場合は「エラー」の「E」をテレビに表示します。



IoT用 省略版1行ドライバ

 前記のドライバでは@LC_INIと@LCの2つの呼び出し方法を準備しましたが、頻繁に表示を変更しない場合は、@LC_INIだけでも十分です。IoT用に@LCの呼び出しを削除したドライバを以下に示します。プログラム容量(サイズ)は、124バイトです。

プログラム I2C LCD Driver 2 for IchigoJam IoT
1 cls:?"I2C LCD Driver 2 2 ?"by IchigoJam-FAN 3 gsb @LC_INI 997 end 998 @LC_INI:let[96],640,64,#5639,#C6C,#C080,64:[95]=i2cw(62,#8C3,5)+2*i2cw(62,#8C0,3,#900,16)+4*i2cw(62,#8C8,3,#920,16):rtn
【使い方】
 表示内容の変更機能を削除したバージョンです。表示内容を変更したいときも「gsb @LC_INI」で初期化コマンドを含めてI2C液晶に転送します。配列変数の[95]〜[101]のうち[96]以降をデータ転送用に、[95]にI2C通信の応答結果を代入します。正常時は0を、エラー時は1〜7の値となります。

 この改良は、IchigoJamの開発者である福野泰介さんのブログ記事「IchigoJam x IchigoROM x IchigoSensors でつくるGPSロガー(http://fukuno.jig.jp/2208)」で紹介していただいた内容をフィードバックしたものです。



実用プログラム キャラクタ表示

 もう少し実用的なI2C液晶用サンプルプログラムを紹介します。キーボードから入力した文字(キャラクタ)および文字コードをテレビ画面とI2C液晶画面に表示します。多くの場合、テレビに表示されるIchigoJam用の文字と液晶に表示されるLCD用の文字は同じですが、双方に独自のキャラクタがあるので、それらを比較するときに便利です。
 下図は、キーボードの「S」を押下したときの実行例です。


キャラクタ表示プログラムの実行例(バックライト付きLCD)

 このキャラクタ表示プログラムを以下に示します。行番号2でI2C液晶の初期化を行い、行番号20でキーボードから入力した文字を取得し、行番号30でテレビ画面へ表示、行番号40でテレビ画面の内容をLCDへ転送します。

プログラム I2C LCD Example for IchigoJam
' I2C LCD Example for IchigoJam ' CC BY (c) 2015-2018 ' Wataru KUNINO @ IchigoJam-FAN 1 cls:?"LCD DEMO" 2 gsb @LC_INI 10 @MAIN 20 I=inkey():if !I cont 30 lc 0,1:? I;"[";chr$(I);"] " 40 gsb @LC 50 goto @MAIN 996 @LC_INI:let[96],640,64,#5639,#C6C,#C080,64:ifi2cw(62,#8C3,5)?"E 997 @LC:ifi2cw(62,#8C0,3,#900,16)+i2cw(62,#8C8,3,#920,16)?"E 998 rtn


応用プログラム 液晶ゲーム JUMPING KING LCD

 この液晶ゲームはIchigoJam-FAN(Facebook)の斎藤史郎さんがゲームの作り方として紹介されたジャンプゲームを液晶用に移植したものです。
 キャラクタ「−」をカーソルキーで操作し、右から左へ迫ってくる「.」を方向キーのジャンプで避けます。物理法則に反し、ジャンプ中の空中移動も可能です。ゲームオーバーとなったときの再開は「↓」キー、終了はスペースキーです。
 本ゲームを公開したときに比べて、IchigoJam BASICの動作速度が格段に上がっているので、ゲームとしては、かなり難しくなってしまいました。行番号「255 wait 10」のように待ち時間処理を挿入して調整すると良いでしょう。

プログラム JUMPING KING LCD
' I2C LCD Example for IchigoJam ' CC BY (c) 2015-2018 ' Wataru KUNINO @ IchigoJam-FAN new 1 cls:?"JUMPING KING LCD 2 ?"Wataru KUNINO" 3 beep:gsb @LC_INI:wait 90:cls 4 X=2:'ヨコ 5 Y=0:'タテ 6 P=0:'テンスウ 7 D=0:'ソクド 8 let [0],95,45,95,45,255 100 @GAME 110 gsb @KY 120 if K=1 and X>0 then X=X-1 130 if K=2 and X<7 then X=X+1 140 if K/2=1 and Y=0 then D=1 150 Y=Y+D:W=W+1 160 if Y=4 then D=-1:P=P+1 170 if Y=0 then D=0 180 if W<5-P/5 goto 210 190 scroll 3:W=0 200 if rnd(8)=0 lc 15,1:? "." 210 T=vpeek(X,Y<2) 220 if T=46 goto @END 230 lc 5,0:?" ";P 240 lc X,Y<2:? chr$([Y]) 250 gsb @LC '255 wait 10 260 lc X,Y<2:? chr$(T) 270 goto @GAME 400 @END 410 lc X,1:? "X":gsb @LC 420 beep 50 430 gsb @KY:if K<4 cont 440 if K=7 cls:end 450 run 995 @KY:K=btn(LEFT)+btn(RIGHT)*2+btn(UP)*3+btn(DOWN)*4+btn(SPACE)*7:rtn 996 @LC_INI:let[96],640,64,#5639,#C6C,#C080,64:ifi2cw(62,#8C3,5)?"E 997 @LC:ifi2cw(62,#8C0,3,#900,16)+i2cw(62,#8C8,3,#920,16)?"E 998 rtn

 ゲーム製作時の留意ポイントは、LCDへの転送タイミングです。テレビ画面に表示した内容を定期的にLCDへ転送しますが、書き換え途中の状態で転送を行うのは非効率です。ゲームが成り立つ画面が完成するたびに転送すると良いでしょう。
 本例では、行番号240でゲーム画面を書き終えます。行番号260は次の画面用の処理なので、それより前の行番号250でLCDへの転送を実行します。



CQ出版社 IF ICH-KIT

 CQ出版社から発売されているIchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)のPersonal Computer基板を使えば、I2Cキャラクタ液晶LCD AE-AQM0802を使ったプログラムを簡単に作成することが出来ます。
 公開している基板のCADデータからPersonal Computer基板を切り出して、プリント基板を製作してみても良いでしょう。


IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)
Personal Computer基板の製作例

 キットに含まれる IchigoJam用マイコンに書き込まれているファームウェアのバージョンは 1.1.1なので、更新が必要です。
 Personal Computer基板上のタクトスイッチSW4を使えば、ボタン一つでファームウェアの書き換えモードに設定することが出来ます。キット付属のUSBシリアル変換モジュールを接続し、ファームウェアをIchigoJam BASIC Ver. 1.2.3以上に更新してください。詳細は、キット関連書の P.22〜P.24をご覧ください。




Personal Computer基板のCAD図面

 下記は、キット関連書「1行リターンですぐ動く!BASIC I/Oコンピュータ IchigoJam入門」の読者向けサポートページです。CADデータを使用された場合は、事後で結構ですので、雑誌の方もお買い求めいただけるよう、お願いいたします。



LCD Driver Version 2 の設計情報

 下表は詳細な設計情報です。通常は読まなくても良い内容ですが、検証や改良を行いたい方向けに記します。

容量136バイト LCD Driver 2b [最新]
 Ruria Amanagiさん(Facebook IchigoJam-FANグループ)が、ST7032のCoビットを利用して、160バイト→136バイトに削減した LCD Driver Version 2bです。(2018/7/23)
996 @LC_INI:let[96],640,64,#5639,#C6C,#C080,64:ifi2cw(62,#8C3,5)?"E 997 @LC:ifi2cw(62,#8C0,3,#900,16)+i2cw(62,#8C8,3,#920,16)?"E 998 rtn
本ドライバの設計情報・メモリマップ#8C0〜#8CA (配列[96]〜[101])
Address Bytes Data Functions
#8C0〜#8C2 3 {0x80,0x02,0x40} Ctrl(Command_Co)/LcdCls/Ctrl(SendData)
#8C3〜#8C7 5 {0x00,0x39,0x56,0x6C,0x12} Ctrl(Command)/FuncSet/PowOn/FC/DispOn
#8C8〜#8CA 3 {0x80,0xC0,0x40} Ctrl(Command_Co)/LcdAdr0x40/Ctrl(SendData)
容量160バイト LCD Driver 2a
 IchigoJam 1.2.2でサポートされた引数省略I2CW命令と、配列変数を利用することで、従来のプログラム容量258バイト→160バイトに削減した LCD Driver Version 2aです。(2018/7/21)
996 @LC_INI:let[96],64,2,#C0,#5639,#C6C:ifi2cw(62,#8C5,5)?"E 997 @LC:ifi2cw(62,#8C1,2)+i2cw(62,#8C0,1,#900,16)+i2cw(62,#8C3,2)+i2cw(62,#8C0,1,#920,16)?"E 998 rtn
本ドライバの設計情報・メモリマップ#8C0〜#8C9 (配列[96]〜[100])
Address Bytes Data Functions
#8C0 1 {0x40} Ctrl(SendData)
#8C1〜#8C2 2 {0x00,0x02} Ctrl(Command)/LcdCls
#8C3〜#8C4 2 {0x00,0xC0} Ctrl(Command)/LcdAdr 0x40
#8C5〜#8C9 5 {0x00,0x39,0x56,0x6C,0x12} Ctrl(Command)/FuncSet/PowOn/FC/DispOn

 初期化コマンドを 4バイト(+制御1バイト)に抑えている点や、待ち時間を省略している点など、元となるLCDコントローラHD44780の仕様から逸脱している部分がありますが、AE-AQMシリーズに搭載されているLCDコントローラST7032で一定の動作確認済みです。

 さらに、もはや「ドライバ」と呼べるかどうか疑わしい、シリアル転送やMixJuiceなどで転送可能な112バイトの世界最小LCDドライバ(2018年7月現在・IchigoJam BASIC用として・ボク調べ)についても、紹介します。これは、上級者向けです。

容量106バイト 最小だが使い方に制約のある上級者向けドライバ
 Facebook IchigoJam-FANグループにて、IchigoJam開発者である福野さんから、I2CW命令の引数に、直接、文字列を書き入れる提案があり、Ruria Amanagiさんにより、106バイトまで削減したドライバが完成しました。
 下記は、ドライバとして使えるようにアドレスを変数で示すように少し手を加えた完成形です。現時点で最小のIchigoJam用LCDドライバ・プログラムです。
996 @L:P="":ifi2cw(62,0,"タタタタ",4)?"E 997 @LC:ifi2cw(62,"@LC",3,#900,16)+i2cw(62,"@LC",3,#920,16)?"E 998 rtn GOSUB @L POKE P+15,57,86,108,12 POKE P+45,128,2,64 POKE P+70,128,192,64 copy P-4,"C_INI",5

 他のドライバとの互換性があります。行番号996より前の番号を使って、プログラムを製作し、上記の行番号996〜998と、その後のコマンドを入力すれば完成です。SAVEやLOADも可能です。

 行番号の無い5個のコマンドが、このドライバの仕上げ部分です。行番号996と997内のダブルコートで括られた文字を、I2C LCD用のデータ列にPOKE文で書き換えます。
 プログラムの長さによって、POKEの実行先アドレスが変わりますが、GOSUB @Lで996行目のP=""の位置のアドレスを変数Pへ代入し、変数Pからの相対距離でアドレスを指定します。最後にCOPYコマンドでP=""の部分をラベル「LC_INI」に変更します。
 ただし、プログラム内に表示できない文字や改行コードが含まれるので、LIST表示が乱れます。また、この2行を編集しても非表示のデータなどが消えるので、適切に動作させることが出来なくなります。


IchigoJam Web フォントの権利情報:
本ページのプログラム部のIchigoJam Webフォントは、http://fukuno.jig.jp/2176 からダウンロードしたものです。
IchigoJam Webフォント(CC BY IchigoJam https://ichigojam.net/・BALLOON a.k.a. Fu-sen. https://15jamrecipe.jimdo.com/)はjig.jpおよびBALLOON a.k.a. Fu-sen.の著作物です。
IchigoJam BASIC用フォントはjig.jpの著作物です。IchigoJamはjig.jpの登録商標です。

IchigoJam メインメニューへ戻る