目次
ESP32でI2C接続のLCD「AQM1602A」を使う
こんにちは。今日はESP32 devkit cと I2C接続ができるLCD「AQM1602A」 を使って文字を表示させてみました。
「逆になんで今までやってなかったんだ」感が否めませんが、秋月電子さんで購入できるI2C接続のLCDをESP32で駆動しました。#esp32 #ワクテク pic.twitter.com/YohZmJL3GW
— ????????????-???????????????? (@wak_tech) December 29, 2018
実行環境
ソフトウェア関連
- windows10 home
- Arduino 1.8.5
- ESP32 core for arduino 1.0.0
使用部品
LCDとは
LCDとはLiquid Crystal Displayの略で、日本語で言えば液晶ディスプレイです。電卓の表示などをはじめ、様々なところで文字の表示器として使用されています。
I2C接続とは
I2Cは機器同士をつなげる方式です。特徴として
- 2本の線だけで複数の機器とのやり取りを実現する
が挙げられます。
I2C接続の詳しい説明はI2C通信の使い方
が参考になります。
マスターとスレーブ
マスターとなる機器からSCLとSDAという名前の付いた線が出ています。これにそれぞれ繋げたい機器(スレーブと呼ばれる)のSCLとSDAを接続すれば通信ができてしまいます。
ESP32のI2C用ピン
ESP32をはじめ、ArduinoやPIC等にはI2C用のSCL,SDAピンが設定されていることが多いです。ピン配置を見てみましょう。
右の方に見えるWire SCLとWire SDAがそれです。
つまりGPIO22と21を使えばいいことになります。
I2C接続LCDの使い方
秋月電子の商品ページにあるLCDデータシートを見てみましょう。
分かりやすく基板にSCLとSDAと書かれていますね。これをそのままESP32のSCL(GPIO21)とSDA(GPIO22)に繋げば接続は完了です。簡単!
回路
LCDの+Vを電源の5Vに、GNDをGNDに接続します。すべての接続が終わった状態が上記の写真です。これで準備は完了。
ソースコード(コピペで動きます)
Arduino系でI2C接続する時には、最初から入っているWire.hというライブラリを使います。
#include<Wire.h>
#define LCD_ADRS 0x3E
char moji[] = "Wak-tech.com";
char moji2[] = "Hello,LCD!";
void setup() {
// put your setup code here, to run once:
Wire.begin(21,22); //Wire.begin(SDA,SCL)
init_LCD();
}
void loop() {
// put your main code here, to run repeatedly:
for(int i=0;i<10;i++){
writeData(moji2[i]);
}
//2行目へカーソル移動
writeCommand(0x40+0x80);
for(int i=0;i<12;i++){
writeData(moji[i]);
}
//ループ中断
while(1);
}
//データ書き込み
void writeData(byte t_data){
Wire.beginTransmission(LCD_ADRS);
Wire.write(0x40);
Wire.write(t_data);
Wire.endTransmission();
delay(1);
}
//コマンド書き込み
void writeCommand(byte t_command){
Wire.beginTransmission(LCD_ADRS);
Wire.write(0x00);
Wire.write(t_command);
Wire.endTransmission();
delay(10);
}
//LCD初期化
void init_LCD(){
delay(100);
writeCommand(0x38);
delay(20);
writeCommand(0x39);
delay(20);
writeCommand(0x14);
delay(20);
writeCommand(0x73);
delay(20);
writeCommand(0x52);
delay(20);
writeCommand(0x6C);
delay(20);
writeCommand(0x38);
delay(20);
writeCommand(0x01);
delay(20);
writeCommand(0x0C);
delay(20);
}
ここに記載しているコードはほぼデータシートのArduinoとの接続と同じです。
一部異なるのはこの部分
void setup() {
// put your setup code here, to run once:
Wire.begin(21,22); //Wire.begin(SDA,SCL)
init_LCD();
}
Wire.begin()でI2C通信がスタートします。この時に念のためSDAとSCLのピンを指定してあげましょう。
Wire.begin(21,22);
これで好きな文字が表示できたはずです!
参考にさせていただいたサイト
最後に
twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m
ご覧いただきありがとうございました!
ピンバック: ESP32でOpenWeatherMapのAPIを使って現在の天気をLCD「AQM1602A」に表示させる | Wak-tech
ピンバック: ESP32でOLEDディスプレイ「SSD1306」にHello-world表示してみた | Wak-tech
ピンバック: ESP32で始めるIoT電子工作入門【20個のチュートリアル】 | Wak-tech