ArduinoでI2C液晶(LCD)を表示する方法|4本配線・コード・映らない原因まで初心者向けに解説

プログラミング・電子工作






Arduino×I2C液晶(LCD)の配線と表示方法。4本の線でつまずかないための完全手順。



HOW-TO / Arduino

Arduino×I2C液晶(LCD)の配線と表示方法。4本の線でつまずかないための完全手順。

配線が10本以上あるパラレル接続のLCDと違い、I2C接続のLCDはたった4本の配線で動きます。それでも初心者がつまずくポイントは決まっています。配線からコード、コントラスト調整まで一気に解説します。

YOFUKASI AI編集部
公開日:2026年8月21日
読了目安:9分

執筆・実機検証:YOFUKASI AI運営者

理学療法士/Arduino・Pythonを使った医療機器制作・学会発表経験あり

Chapter 01 / Introduction

01なぜI2C液晶の表示でつまずくのか

結論から言うと、ArduinoのI2C液晶(LCD)で文字が表示されない原因は「I2Cアドレスの指定間違い」と「コントラスト未調整」の2つがほとんどです。I2C接続のLCDは配線がSDA・SCL・VCC・GNDのわずか4本で済む手軽さが魅力ですが、内部的にはPCF8574というI/Oエキスパンダを介して通信しているため、モジュールごとにI2Cアドレスが異なるという落とし穴があります。

編集部想定シナリオ

初めてI2C液晶を購入したKさんは、配線を確認しながらサンプルコードのアドレス0x27のまま書き込んだが、バックライトは点灯するのに文字が一切表示されなかった。配線を何度見直しても間違いが見つからず、最終的にI2Cスキャナースケッチを実行したところ、実際のアドレスは0x3Fだったことが判明。アドレスを書き換えた瞬間に文字が表示された、というのはI2C液晶初挑戦でよくあるつまずきパターンです。

編集部見解

I2C液晶のトラブルシューティングは「配線を疑う前に、まずI2Cアドレスとコントラストを確認する」の2点セットで考えると解決が早まります。特にコントラスト調整用の可変抵抗は見落とされがちですが、購入直後のLCDでは真っ先に確認すべきポイントです。

この後の章では、I2C液晶の基本構造、表示の仕組み、パラレル接続との違い、そして実際に文字を表示するまでの手順を順番に解説していきます。




Chapter 02 / Background

02I2C液晶(PCF8574・HD44780)の基礎知識

Arduinoでよく使われるキャラクター液晶(1602や2004など)の多くは、HD44780という制御ICと互換性のある表示モジュールです。本来このHD44780は8本以上のデータ線を含む10〜12本程度の配線が必要ですが、市販の「I2C液晶」は、その配線をI2C通信の2本(SDA・SCL)に変換するI2Cバックパック(変換基板)が背面に取り付けられています。

この変換を担っているのがPCF8574(またはPCF8574A)というI/Oエキスパンダです。販売元の製品ページでは、搭載されているコントローラICがPCF8574TかPCF8574ATかによってデフォルトのI2Cバスアドレスが0x27または0x3Fに分かれると説明されており、購入したモジュールによってどちらのアドレスになるかが変わります。

Arduino側でこのI2C液晶を制御するには、johnrickman氏が公開する「LiquidCrystal_I2C」ライブラリなど、I2C液晶向けに設計されたArduinoライブラリが広く使われています。標準の「LiquidCrystal」ライブラリと似た関数構成になっているため、パラレル接続LCDの経験がある人には特に扱いやすい設計です。

Chapter 03 / How it works

03表示の仕組みと技術的背景

ArduinoからI2C液晶に文字を表示する基本的なコードは次のようになります。ライブラリマネージャーで「LiquidCrystal I2C」を検索してインストールしておく必要があります。

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// 第1引数:I2Cアドレス(0x27または0x3Fが多い。要スキャン確認)
// 第2引数:横方向の文字数、第3引数:行数
LiquidCrystal_I2C lcd(0x27, 16, 2);

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

  lcd.setCursor(0, 0);       // 1行目・0文字目にカーソル移動
  lcd.print("Hello, Arduino!");

  lcd.setCursor(0, 1);       // 2行目・0文字目にカーソル移動
  lcd.print("I2C LCD Ready");
}

void loop() {
  // 表示内容を更新したい場合は、ここでlcd.clear()の後に
  // setCursor()とprint()を呼び直す
}

ポイントは、SDA・SCLというたった2本の信号線の裏側で、実際にはPCF8574が8ビットのパラレル信号に変換してHD44780へ送っているという点です。通常8〜12本程度必要な配線を、I2Cバスによりわずか2本(SDA・SCL)と電源線に削減できる点がI2C液晶の最大のメリットとして解説されています。この仕組みにより、Arduino側の配線本数を大幅に減らしながら、複雑な液晶制御をライブラリ内部で吸収できます。

データ・編集部見解

技術情報サイトの検証記録では、1602 LCD用I2Cモジュールの多くが0x27と紹介される一方、実際にはPCF8574Aが使われておりデフォルトアドレスが0x3Fだったケースも報告されており、ロットや販売元によってどちらのチップが使われているか一概には言えないことが分かります。購入直後は必ずI2Cスキャナーで実際のアドレスを確認する習慣をつけましょう。




Chapter 04 / Comparison

04比較:I2C接続/パラレル接続/SPI接続LCD

項目 A:I2C接続LCD B:パラレル接続LCD C:SPI接続LCD
必要な配線本数 4本(SDA・SCL・VCC・GND) 10〜12本前後 6本前後(SDA・SCL・CS等)
配線の手軽さ 非常に手軽 配線が多く複雑 比較的手軽
使用ピン数への影響 他のI2Cデバイスと共有可 デジタルピンを多く占有 SPIバスを共有可
参考 LiquidCrystal_I2C(GitHub) 編集部見解 編集部見解

※「配線の手軽さ」「使用ピン数への影響」の一部は編集部見解によるものです。実際の配線数は使用するモジュールの仕様によって異なります。

結論として、配線の手軽さと情報量の多さから、初めての文字表示にはA(I2C接続)が最もおすすめです。デジタルピンをLCD以外の用途にも多く使いたい大規模プロジェクトでは、SDA・SCLの2本で済むI2C接続やSPI接続が有利になります。

Chapter 05 / Practice

05実践:5ステップで文字を表示する

01

I2C液晶とArduinoを4本の線で配線する

I2C液晶のVCCを5V、GNDをGND、SDAをArduino UnoのA4、SCLをA5に接続します。ボードによってSDA/SCLのピン番号は異なるため、使用するArduinoの仕様を確認してください。配線はこの4本のみで完結します。

02

LiquidCrystal_I2Cライブラリをインストールする

Arduino IDEの「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」から「LiquidCrystal I2C」を検索してインストールします。複数の類似ライブラリが表示される場合がありますが、まずは標準的なものを選べば問題ありません。

03

I2Cスキャナースケッチで実際のアドレスを確認する

Arduinoコミュニティで広く使われているI2Cスキャナースケッチを書き込み、シリアルモニタを開いて実行します。検出されたアドレス(多くの場合0x27または0x3F)を控えておきます。

編集部想定シナリオ

Lさんは配線もコードも正しいはずなのに何も表示されず数十分悩んでいたが、I2Cスキャナーを実行したところ何も検出されなかった。原因を辿るとSDAとSCLの配線が逆になっており、正しく接続し直したところアドレスが検出され、無事に文字が表示された。「何も検出されない」場合は配線ミスを最優先で疑うべき、という教訓が得られるケースです。

04

サンプルコードのアドレスを実機に合わせて書き換える

第3章のサンプルコードのLiquidCrystal_I2C lcd(0x27, 16, 2);の部分を、ステップ3で確認した実際のアドレスに書き換えます。使用しているLCDが20文字×4行の2004タイプの場合は、16, 220, 4に変更してください。

05

書き込んでコントラストを調整する

コードをArduinoに書き込み、バックライトは点灯するのに文字が見えない場合は、LCD裏面にあるコントラスト調整用の可変抵抗(小さいドライバーで回せる部品)を少しずつ回して調整します。文字がうっすら見えてきたら、はっきり読める位置まで微調整してください。

データ・編集部見解

編集部の検証では、購入直後のI2C液晶モジュールのうち一定数が、コントラストが極端に薄い(または濃すぎる)状態で出荷されており、可変抵抗の調整だけで「壊れていると思っていたLCD」が正常に表示されるようになったケースが複数ありました。「反応しない」と結論づける前に、必ずコントラスト調整を試すことをおすすめします。

Chapter 06 / Caution

06注意点・よくある誤解

!

誤解1:I2C液晶はどれも同じアドレスで動くはず

搭載されているI/Oエキスパンダ(PCF8574かPCF8574Aか)によってデフォルトのI2Cアドレスが0x27または0x3Fに分かれます。サンプルコードのアドレスをそのまま使わず、必ずI2Cスキャナーで確認してから書き換えましょう。

!

誤解2:バックライトが点けば正常に動作している

バックライトの点灯とHD44780側の文字表示処理は別の回路です。バックライトが点いていても、コントラスト未調整やコード側の初期化不足で文字が見えないことは珍しくありません。

!

誤解3:SDAとSCLはどちらに挿しても動く

SDAとSCLは役割が異なる信号線であり、逆に接続すると通信が確立せずI2Cスキャナーでもデバイスが検出されません。モジュール側の端子表記(SDA/SCL)とArduino側のピン(多くはA4/A5、ボードにより異なる)を必ず対応させて接続してください。




Chapter 07 / FAQ

07よくある質問

Q.I2C液晶の配線がSDA・SCLだけで本当に足りるのですか?
A.はい、足ります。通常のパラレル接続LCDでは10〜12本程度の配線が必要ですが、I2C接続のLCDはPCF8574などのI/Oエキスパンダを介して信号を変換するため、SDA・SCLの2本に電源(VCC)・GND を加えた合計4本の配線だけで動作します。

Q.バックライトは点くのに文字が表示されません。原因は?
A.多くの場合、LCD裏面にあるコントラスト調整用の可変抵抗(半固定抵抗)が適切な位置になっていないことが原因です。小さいドライバーで少しずつ回しながら調整すると、文字が浮かび上がってくることがあります。それでも表示されない場合はI2Cアドレスの指定間違いも疑ってください。

Q.I2Cアドレスが0x27でも0x3Fでも動きません。他に確認すべき点は?
A.まずI2Cスキャナースケッチを実行し、実際に検出されているアドレスを確認してください。何も検出されない場合は、SDA・SCLの配線が逆になっている、電源が入っていない、またはI2Cバス上でSDA・SCLに必要なプルアップ抵抗が機能していない可能性があります。多くのI2C LCDモジュールは基板上にプルアップ抵抗を搭載していますが、念のため配線を再確認しましょう。

Q.1602と2004、初心者にはどちらのLCDがおすすめですか?
A.初めての場合は16文字×2行の1602がおすすめです。価格が手頃で情報量も多く、LiquidCrystal_I2Cライブラリの基本的な使い方を学ぶには十分な表示領域があります。より多くの情報を一画面に表示したい場合は20文字×4行の2004を検討してください。コードの書き方自体はどちらもほぼ共通です。

参考文献

  1. johnrickman「LiquidCrystal_I2C」GitHubリポジトリ, 2026年, https://github.com/johnrickman/LiquidCrystal_I2C
  2. PMD Way「I2C Backpack for HD44780-compatible LCD modules」製品ページ, 2026年, https://pmdway.com/products/i2c-backpack-for-hd44780-compatible-lcd-modules-50-pack
  3. Fly-Wing「PCF8574 I2C Address, Pinout & Interfacing Guide」2026年, https://www.flywing-tech.com/blog/pcf8574-i2c-address-pinout-interfacing-guide-2026-update/
  4. ht-deko「[I2C] 1602 LCD ディスプレイ (HD44780 + PCF8574A)」, https://ht-deko.com/arduino/lcd_i2c.html

※出典の明記がない数値・シナリオは「編集部見解」または「編集部想定シナリオ」として本文中に明示しています。※本文中の内部リンクはyofukasi-lab-wp.com内の関連記事です。


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE