「液晶ディスプレイを使いたいけど、配線が多くて難しそう…」そう思っていませんか?

実は、I2C接続のLCD1602を使えば、たった4本の配線だけでArduinoに文字を表示できます。センサーの値や自作メッセージをリアルタイムに画面出力できると、電子工作がグッと楽しくなりますよね。

この記事では、LCD1602(I2Cモジュール付き)をArduinoにつなぐところから、スクロール表示・カスタムキャラクター(日本語対応の工夫)まで、ステップごとに丁寧に解説します。

🎯 対象読者:Arduino初心者〜中級者。Lチカは経験済みで、次のステップとしてディスプレイ出力を学びたい方

I2C接続のLCD1602とは?

Arduino LCD display
Arduino LCD display / Photo by ThisIsEngineering via Pexels

LCD1602は16文字×2行のキャラクター液晶ディスプレイです。英数字・記号をサクッと表示できる、電子工作の定番モジュールです。

通常の「パラレル接続版」だと、Arduinoのデジタルピンを6〜8本も使います。でもI2Cモジュールが背面についているタイプ(I2Cアダプター付きLCD1602)なら、使うピンはたった4本!配線ミスも減って初心者にやさしい設計です。

イメージとしては、「多い配線を1本の信号線にまとめてArduinoと会話する仕組み」がI2Cです。SDA(データ)とSCL(クロック)の2本で通信するので、他のI2Cセンサーと同じバスに並列接続することもできます。

用意するもの

  • ✅ Arduino UNO(またはNano・Mega)
  • ✅ I2Cアダプター付き LCD1602(Amazonや秋月電子で安価に入手可)
  • ✅ ジャンパーワイヤー(オス-メス)×4本
  • ✅ USBケーブル(PCとArduino接続用)

⚠️ LCDのI2Cモジュールが別売りの場合は、はんだ付けが必要です。最初から一体になっているものを選ぶと楽ですよ。

STEP 1:配線する(4本だけ!)

配線はとてもシンプルです。下の表の通りにつなぐだけです。

LCD1602(I2Cモジュール) Arduino UNO
GND GND
VCC 5V
SDA A4
SCL A5

📌 Arduino Megaを使っている場合は、SDAがピン20・SCLがピン21になります。Nanoの場合はUNOと同じA4/A5でOKです。

配線が終わったら、LCDモジュール背面の青いポテンショメーター(可変抵抗)でコントラストを調整できます。文字が見えにくいときはここをドライバーで回してみてください。

STEP 2:ライブラリをインストールする

I2C接続のLCDを扱うには、LiquidCrystal_I2Cライブラリを使います。Arduino IDEからインストールしましょう。

  1. Arduino IDEを開く
  2. メニューから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」
  3. 検索欄に「LiquidCrystal I2C」と入力
  4. Frank de Brabander製のライブラリをインストール

これで準備完了です。

STEP 3:I2Cアドレスを確認する

LCDのI2Cアドレスは製品によって異なります。多くは0x27ですが、0x3Fの場合もあります。まずはI2Cスキャナースケッチで確認するのがおすすめです。

// I2Cアドレスを調べるスキャナースクリプト
#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("I2C Scanner 起動中...");

  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2Cデバイスが見つかりました!アドレス: 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
    }
  }
}

void loop() {
  // 何もしない
}

シリアルモニター(通信速度9600bps)を開くと、接続されているデバイスのアドレスが表示されます。表示されたアドレスを次のスケッチで使いましょう。

STEP 4:文字を表示してみよう!


いよいよ本題です。「Hello, World!」をLCDに表示してみましょう。

// 基本の文字表示スケッチ
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// アドレス0x27、16文字×2行の設定
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();        // LCD初期化
  lcd.backlight();   // バックライトON

  lcd.setCursor(0, 0);          // 1行目の先頭に移動
  lcd.print("Hello, World!");   // テキスト表示

  lcd.setCursor(0, 1);          // 2行目の先頭に移動
  lcd.print("Arduino LCD");     // テキスト表示
}

void loop() {
  // displayは常時表示なので何もしない
}

ポイントをまとめるとこんな感じです:

  • lcd.init():LCD初期化。setup()内で必ず最初に呼ぶ
  • lcd.backlight():バックライトをONにする(省くと暗くて見えない)
  • lcd.setCursor(列, 行):表示位置を指定。左上が(0, 0)、2行目先頭は(0, 1)
  • lcd.print():文字列を表示。Serial.print()と同じ感覚で使えます

STEP 5:スクロール表示でセンサー値を動かす

16文字を超えるメッセージや、センサー値を流し表示したい場合はスクロールが便利です。

// 横スクロール+センサー値リアルタイム表示スケッチ
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();
  lcd.backlight();
}

void loop() {
  // アナログピンA0の値を読み取る(センサー等を接続した場合)
  int sensorValue = analogRead(A0);

  // 1行目にスクロールメッセージ
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Sensor Value:");

  // 2行目にセンサー値を表示
  lcd.setCursor(0, 1);
  lcd.print(sensorValue);

  delay(500); // 0.5秒ごとに更新

  // 長い文字列を1文字ずつ左スクロール
  String msg = "  -- Arduino I2C LCD Scroll Demo --  ";
  lcd.clear();
  for (int i = 0; i < msg.length(); i++) {
    lcd.setCursor(0, 0);
    lcd.print(msg.substring(i, i + 16));
    delay(300);
  }
}

センサーが接続されていない状態でも動作します。A0を浮かせていると適当な値が入ってくる様子も、それはそれで「動いてる感」があって楽しいですよ😄

日本語(カタカナ)を表示したい場合は?

LCD1602はハードウェアレベルでJIS X 0201(半角カタカナ)に対応しているものが多いです。ただし、日本語文字はUnicodeではなくROMコードで扱います。

たとえば「ア」は文字コード0xB1です。

// カタカナをコードで表示するサンプル
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();
  lcd.backlight();

  lcd.setCursor(0, 0);
  // 「アルドゥイーノ」をカタカナコードで表示
  // ア=0xB1, ル=0xC3, ド=0xC4, ゥ=0xB3, ィ=0xB2, |=0xB0, ノ=0xC8
  byte katakana[] = {0xB1, 0xC3, 0xC4, 0xB3, 0xB2, 0xB0, 0xC8};
  for (int i = 0; i < sizeof(katakana); i++) {
    lcd.write(katakana[i]);
  }

  lcd.setCursor(0, 1);
  lcd.print("Arduino LCD");
}

void loop() {}

文字コード表はネット上で「HD44780 文字コード表」と検索すると一覧が見つかります。よく使うカタカナのコードをメモしておくと便利ですよ。

⚠️ 漢字・ひらがなはLCD1602のハードウェアROMには含まれていません。カスタムキャラクター機能(createChar())を使えば5×8ピクセルで自作文字を最大8種類登録できますが、複雑な漢字には向きません。シンプルな用途ではカタカナで十分実用的です。

うまく動かないときのチェックリスト

「何も表示されない…」という場合、よくある原因はこのあたりです。確認してみてください。

  • 🔍 アドレスが合っているか:I2Cスキャナーで確認(0x27か0x3F)
  • 🔍 SDA・SCLの配線が逆になっていないか
  • 🔍 バックライトはONになっているかlcd.backlight()を忘れずに
  • 🔍 コントラストが適切か:背面のポテンショメーターを回して調整
  • 🔍 ライブラリのバージョン:LiquidCrystal_I2Cは複数の製作者版があるため、Frank de Brabander版を使う

まとめ


今回はI2C接続のLCD1602をArduinoにつなぎ、文字表示・スクロール・カタカナ表示まで一通り体験しました。

配線は4本、ライブラリを入れればlcd.print()でSerialと同じ感覚で使えます。「むずかしそう」と思っていたディスプレイ表示が、意外とシンプルだと感じてもらえたんじゃないでしょうか😊

次は温湿度センサー(DHT11)やRTCモジュールと組み合わせて、温度計・時計ディスプレイなどに発展させると一気に実用度が上がります。ぜひ試してみてください!

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。