Arduino IDEに回帰する
前の記事ではVS Codeを使う気満々だったんだけど、結局のところArduino IDEでも十分な気がしている。ESP32やらPicoなどの他社製のボードを使っても同じように開発できるし、Web上の情報もたくさんある。そもそもVS Codeはちょっと複雑すぎないか?
I2C接続小型キャラクターLCDモジュール
秋月電子通商で買えるI2C接続小型キャラクターLCDモジュールAQM1602は随分前に買ってあるのだが、意外に幅をとるのでちょっと使うにも大きいし、機器に組み込んでしまうのも高価過ぎる、そして何より使いにくい。キャラクターディスプレイの標準ライブラリとしてLiquidCrystalというのがあるが、I2C接続には使えない。一方で検索できるライブラリでは、たくさんの種類が出てきて、どれがデファクトスタンダードか判別できない。
そうだ、自分でLiquidCrystal互換のライブラリっぽく仕上げてみよう!(まぁ車輪の再発見とも言う)
まずは接続
そのうちRP2040で使う予定だが、テスト開発にはUNOを使う。ディスプレイは5Vでも使えるらしいので5V、GND、SDA、SCLをそれぞれ接続し、スケッチ例→Wire→i2c_scannerのスケッチを使ってアドレスを確認すると「0x3E」であることが確認できた。なお、どうやらディスプレイ側のプルアップはUNOなら必要ないようだ。RP2040でどうなるかは接続してみないとわからない。
使い方
スケッチ冒頭はWireの使用宣言、アドレス指定、テスト表示用文字列定義だ。
#include <Wire.h>
#define LCD_ADRS 0x3E
byte moji[]={"AQM1602XA-RN-GBW"};
次のセットアップはI2CとLCD初期化、文字列表示、2列目(カタカナ)表示、ちょっと待ってから画面クリアする。実際に動作確認だけならここまででも十分だ。
setup
void setup() {
Wire.begin();
init_LCD();
for(byte i;i<sizeof(moji);i++) {
write(moji[i]);
}
command(0x40+0x80);
for(byte i=0;i<16;i++) write(i+0xb1);
delay(3000);
command(0x01);
}
ディスプレイ側は初期化に失敗しても電源が切れないと表示は更新されない。従って、偶然うまく行ったのだが、次にスケッチを書き換えたら初期化できてなくても、ディスプレイ上の表示は成功した時のままになる。こういうケースだとうまく行っていないのがいつの更新からなのか気がつけないので、ループでは次々と画面を書き換えるようにした。初期化に失敗していると、このループでも画面は更新されなくなる。
loop
byte cnt0=0x1;
byte cnt=cnt0;
void loop() {
write(cnt++);
if(cnt==0xff) cnt=cnt0;
delay(50);
}
実際の書き込み関数はwrite、command、sendを定義した。
send
void send(byte rs, byte value) {
Wire.beginTransmission(LCD_ADRS);
Wire.write(rs);
Wire.write(value);
Wire.endTransmission();
if(value) delay(10);
else delay(1);
}
void write(byte value) { send(0x40, value); }
void command(byte value) { send(0x00, value); }
そして初期化は秋月のモジュールデータシートに載っているバイナリ列を順に書き込んだだけだ。
Init
void init_LCD() {
delay(100);
byte inits[]={0x38, 0x39, 0x14, 0x73, 0x52, 0x6c, 0x38, 0x01, 0x0c,};
for(byte i=0;i<sizeof(inits);i++) {
command(inits[i]);
delay(20);
}
}
動作確認
電源電圧が5Vならこれで普通に動く。3.3Vでは表示されないので、オリジナルのLiquidCrystalには存在しないコントラスト調整の関数は必須かもしれない。
使い方はわかったので、次からライブラリ化をしていこう。
投稿者の人気記事

-
akira.kei
さんが
前の土曜日の17:55
に
編集
をしました。
(メッセージ: 初版)
-
akira.kei
さんが
前の土曜日の18:27
に
編集
をしました。
-
akira.kei
さんが
前の土曜日の20:39
に
編集
をしました。
-
akira.kei
さんが
前の日曜日の14:14
に
編集
をしました。
ログインしてコメントを投稿する