【M5Stack】I2CでLCD(QAPASS 1602A)に文字表示

導入

電子工作を全然やったことがなかった頃に友人にもらった液晶ディスプレイがあったので、動作確認してみた記録です。 PlatformIOでLiquidCrystal_I2Cライブラリを使って関数を呼び出すだけなので、全然難しいことはしていません。
今回使ったマイコンは、M5Stack Basicで、PlatformIOでプログラムを作成しています。

使用したLCD

使用したのは、こちらの写真のもので、基盤を見たところ、QAPASS 1602Aと書いてありました。本体は16ピンですが、裏面にI2Cで制御できるアダプター(?)がついています。今回は、このI2Cアダプター経由で使用します。
画面には16×2文字の表示が可能です。

配線

4本の配線をジャンパワイヤでつなげているだけです。端子の対応は以下のようになります。

LCD M5Stack
GND G
VCC 5V
SDA 21
SCL 22

M5Unified

記事の本題とはずれますが、今回、私は初めてM5Unifiedライブラリを使用しました。M5Stackシリーズには様々な製品があり、製品によって、使用するライブラリや関数が異なります。それらのM5Stackシリーズの異なるハードウェアに共通して使用できるように公開されているのがM5Unifiedです。個別のライブラリを使用するより、こちらを使用する方が便利そうですね。 (私が持っているM5Stackシリーズには対応していないものも多いのですが…) 詳細は以下のサイトをご覧ください。 docs.m5stack.com

実践

ライブラリを使用するために、platform.ini内に以下のように記述しておきます。

[env:m5stack-core-esp32]
platform = espressif32
board = m5stack-core-esp32
framework = arduino
lib_deps = M5Unified
    LiquidCrystal_I2C

本体のコードは以下です。

#include <M5Unified.h>
#include <LiquidCrystal_I2C.h>

//I2CアドレスとLCDの画面サイズを指定
LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
  //M5Unifiedで本体初期化
  auto cfg = M5.config();
  cfg.serial_baudrate = 9600;
  M5.begin(cfg);
  //本体ディスプレイにHelloWorld!を表示
  M5.Display.setTextSize(3);
  M5.Display.println("HelloWorld!");

  //LCD初期化
  lcd.init();
  //呼び出すことでバックライトON 
  lcd.backlight();
  //左上からHello, world!を表示
  lcd.setCursor(0, 0);
  lcd.print("Hello, world!");
}

void loop(){

}

コードを書き込み、問題なく表示できました!

参考にした記事

iot.keicode.com