mimikakimemo

自分用メモ。

Osoyoo のキットに入っている I2C 1602 LCD モジュール を使う

先月買った Osoyoo のキットに 2 行の液晶ディスプレイ、I2C 1602 LCD モジュールが入っていたので、使ってみる。1602 は 16文字×2行 という意味らしい。Osoyoo 公式のドキュメント(あまり親切ではないが)は以下の通り。

LCD モジュールからは4本の端子 VCC, GND, SCL, SDA が出ている。SCL, SDA は I2C というインターフェイス規格で定義されているらしい。SCL がクロック、SDA がデータで、この2本の信号線があれば、まとめて複数のデバイスと通信できるのだとか。『超特急Web接続! ESPマイコン・プログラム全集』の Appendix 4 に解説があった。NodeMCU の場合、

LCD NodeMCU 備考
VCC VIN 3V3 だと電圧不足だった
GND GND
SCL D1 ESP8266 の IO5 に繋がっている
SDA D2 ESP8266 の IO4 に繋がっている

のように接続すると動かすことができる。

ライブラリは、Osoyoo のサイトから LiquidCrystal_I2C.zip がダウンロードできる。こういったライブラリのインストールのお作法がまだ良くわかっていないが、とりあえず LiquidCrystal_I2C.cppLiquidCrystal_I2C.h をそのままスケッチの隣につっこんだらコンパイルできた。

この前試した温湿度センサー DHT11 の値を LCD に表示してみた。

f:id:mimikakimemo:20210124223812j:plain

#include "LiquidCrystal_I2C.h"
#include "DHT.h"

#define DHTPIN D6     // D6 ピンからセンサーの値を得る
#define DHTTYPE DHT11 // DHT 11 を使う

LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Serial.begin(115200);

  lcd.init();
  lcd.backlight();

  dht.begin();
}

void loop()
{
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  Serial.println("Temperature: " + String(t, 1) + "°C\tHumidity: " + String(h, 0) + "%");

  // 1行目に温度を表示
  lcd.setCursor(0, 0);
  lcd.print("Temp:     " + String(t, 1) + char(0xdf) + "C");
  // 2行目に湿度を表示
  lcd.setCursor(0, 1);
  lcd.print("Humidity:    " + String(h, 0) + "%");

  delay(2000);
}

Arduino の文字列の扱いについては、まだいまいちよく把握していない…。この LCD は HD44780 互換というものらしく、半角カナや ASCII に無い記号も表示できた。温度記号 ℃ は無かったので、上のコードでは半角カナの半濁点 ゚(0xdf)を使って表示している。

参考サイト