Osoyoo のキットに入っている I2C 1602 LCD モジュール を使う
先月買った Osoyoo のキットに 2 行の液晶ディスプレイ、I2C 1602 LCD モジュールが入っていたので、使ってみる。1602 は 16文字×2行 という意味らしい。Osoyoo 公式のドキュメント(あまり親切ではないが)は以下の通り。
- NodeMCU Lesson 15 — I2C 1602 LCD & MQTT « osoyoo.com
- I2C 1602 LCD Display Module – Blue Backlight « osoyoo.com
- 16×2 I2C LiquidCrystal Display(LCD) « osoyoo.com
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.cpp
と LiquidCrystal_I2C.h
をそのままスケッチの隣につっこんだらコンパイルできた。
この前試した温湿度センサー DHT11 の値を LCD に表示してみた。
#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
)を使って表示している。