この記事の結論
- I2C接続のLCDディスプレイは配線がVCC・GND・SDA・SCLの4本だけで済む
- アドレスは0x27か0x3Fが多く、分からない場合はI2Cスキャナのスケッチで調べられる
- LiquidCrystal_I2Cライブラリのlcd.setCursor()とlcd.print()で文字を表示する
- DHT11・DHT22と組み合わせれば、気温と湿度を常に表示するモニター表示器が作れる
センサーの値をパソコンのシリアルモニタでしか確認できないと、工作としての完成度がどうしても物足りなく感じます。
LCDディスプレイをArduinoにつなげば、パソコンにつながずに今の気温や湿度をその場で表示する、自立した装置に一歩近づきます。
この記事では、配線が少なく扱いやすいI2C接続タイプのLCDディスプレイを使って、温湿度モニター表示器を作る手順を整理します。
I2C接続LCDディスプレイとは
配線が4本で済む理由
一般的なキャラクターLCDは、そのままだと電源やコントラスト調整、データ線を合わせて10本以上の配線が必要になります。
I2C接続用の変換基板(バックパック)が背面に取り付けられたモジュールなら、VCC・GND・SDA・SCLの4本だけで済みます。
これは、複数のデータ線を使う代わりに、SDA(データ)とSCL(クロック)という2本の線だけで通信する「I2C」という通信方式のバックパック基板が、配線を代わりに引き受けてくれているためです。

「16×2」という表記の意味
LCDディスプレイの製品名によく出てくる「16×2」という表記は、横16文字×縦2行を表示できるという意味です。
入門用として広く使われているサイズで、価格の目安は本体とI2Cバックパックがあらかじめ一体になったモジュールで500〜900円程度です。
紹介した商品:I2C接続 LCDディスプレイモジュール(16×2)
IIC/I2C 1602 LCDモジュール(ブルーバックライト付き)
背面にI2Cバックパックがあらかじめ実装済みで、配線がVCC・GND・SDA・SCLの4本だけで済むタイプです。
Amazon ¥842 / 楽天 ¥1,675(Freenove製)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
配線とアドレスの確認
配線(VCC・GND・SDA・SCL)
VCCをArduinoの5Vへ、GNDをGNDへ、SDAをA4ピンへ、SCLをA5ピンへつなぎます。
電源まわりを間違えると点灯しない、あるいは表示が乱れる原因になるため、VCCとGNDの向きは配線後に一度見直しておくと安心です。

アドレスが0x27でない場合の対処
I2C接続の部品は、それぞれ固有の「アドレス」という番号でArduinoから識別されます。
LCDのI2Cバックパックは、基板上の半田ブリッジ(A0・A1・A2)が何も接続されていない状態だと、デフォルトで「0x27」というアドレスになっている製品がほとんどです。
まれに「0x3F」など別のアドレスの製品もあるため、コードを書く前に「I2Cスキャナ」と呼ばれる、接続されているI2Cデバイスのアドレスを一覧表示してくれるスケッチを一度実行して確認しておくと確実です。
I2Cスキャナの定番スケッチは、次のようになります。
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2Cスキャン開始");
for (byte address = 1; address < 127; address++) {
Wire.beginTransmission(address);
if (Wire.endTransmission() == 0) {
Serial.print("見つかったアドレス: 0x");
Serial.println(address, HEX);
}
}
}
void loop() {
}
シリアルモニタに表示されたアドレスを、この後のコードでlcdオブジェクトを作るときの数値として使います。
ライブラリの導入と文字表示の基本
LiquidCrystal_I2Cライブラリの導入
Arduino IDEのライブラリマネージャーから「LiquidCrystal I2C」を検索してインストールします。
ライブラリマネージャーの使い方自体は、Arduino IDEのインストール・初期設定の記事で紹介している手順と同じです。
コードの先頭で「LiquidCrystal_I2C lcd(0x27, 16, 2);」のように、確認したアドレスと画面サイズを指定してlcdという名前のオブジェクトを作ります。
setCursor()とprint()の使い方
setup()の中で「lcd.init();」と「lcd.backlight();」を呼び出すと、画面が初期化されバックライトが点灯します。

「lcd.setCursor(0, 0);」で1行目の先頭に、「lcd.setCursor(0, 1);」で2行目の先頭にカーソルを移動させ、そのあとに「lcd.print(“Hello”);」のように書くと文字が表示されます。
数値を表示したいときも、print()のカッコの中に変数をそのまま入れれば、文字列と同じように表示できます。
ここまでの内容をまとめた、画面に「Hello」と表示するだけの最小のスケッチは、次のようになります。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hello");
}
void loop() {
}
DHT11・DHT22と組み合わせて温湿度モニターを作る
温湿度センサーの使い方自体は、温湿度センサー(DHT11・DHT22)の使い方の記事で詳しく解説しています。

loop()の中で数秒おきにセンサーの値を読み取り、1行目に「lcd.setCursor(0, 0); lcd.print(“Temp:”); lcd.print(temperature);」のように気温を、2行目に同じ要領で湿度を表示する構成が基本形です。
数字を更新するたびにlcd.clear()で画面全体を消してしまうと、書き換えのたびに一瞬画面がちらつくため、数字の桁数が変わる部分だけを空白で上書きするか、setCursor()で該当箇所だけ上書きする方が見やすい表示になります。
気温と湿度に加えて、土壌水分センサーの値のように他のセンサーの数値を表示する応用も、同じsetCursor()とprint()の組み合わせで対応できます。
DHTセンサーとI2C LCDを組み合わせた温湿度モニターの完全なスケッチは、次のようになります。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
delay(2000);
}
まとめ:よくあるつまずきの早見表
最後に、LCD表示でつまずきやすいポイントを表にまとめます。
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| 何も表示されない・バックライトも点かない | VCC・GNDの配線ミス、電源不足 | 配線を確認、5Vからしっかり供給されているかテスターで確認 |
| バックライトは点くが文字が見えない | コントラストのつまみがずれている | ポテンショメータを少しずつ回して調整する |
| 四角い黒いブロックが並ぶだけ | アドレスの指定違い、初期化コードの記述漏れ | I2Cスキャナでアドレスを確認、lcd.init()の記述を確認 |
| 文字化けする・一部だけ表示がおかしい | 配線の接触不良、setCursor()の指定ミス | 配線を挿し直す、setCursor()の座標(列, 行)を確認 |
作り始める前に、以下の点がなんとなくつかめているか確認してみてください。
- I2C接続なら配線が4本で済むという理由が理解できている
- アドレスが分からないときはI2Cスキャナで調べればよいと分かっている
- setCursor()とprint()の組み合わせで、表示位置と内容をコントロールできる見当がついている


コメント