Arduino×I2C液晶(LCD)の配線と表示方法。4本の線でつまずかないための完全手順。
配線が10本以上あるパラレル接続のLCDと違い、I2C接続のLCDはたった4本の配線で動きます。それでも初心者がつまずくポイントは決まっています。配線からコード、コントラスト調整まで一気に解説します。
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液晶の基本構造、表示の仕組み、パラレル接続との違い、そして実際に文字を表示するまでの手順を順番に解説していきます。
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の経験がある人には特に扱いやすい設計です。
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スキャナーで実際のアドレスを確認する習慣をつけましょう。
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接続が有利になります。
05実践:5ステップで文字を表示する

I2C液晶とArduinoを4本の線で配線する
I2C液晶のVCCを5V、GNDをGND、SDAをArduino UnoのA4、SCLをA5に接続します。ボードによってSDA/SCLのピン番号は異なるため、使用するArduinoの仕様を確認してください。配線はこの4本のみで完結します。
LiquidCrystal_I2Cライブラリをインストールする
Arduino IDEの「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」から「LiquidCrystal I2C」を検索してインストールします。複数の類似ライブラリが表示される場合がありますが、まずは標準的なものを選べば問題ありません。
I2Cスキャナースケッチで実際のアドレスを確認する
Arduinoコミュニティで広く使われているI2Cスキャナースケッチを書き込み、シリアルモニタを開いて実行します。検出されたアドレス(多くの場合0x27または0x3F)を控えておきます。
Lさんは配線もコードも正しいはずなのに何も表示されず数十分悩んでいたが、I2Cスキャナーを実行したところ何も検出されなかった。原因を辿るとSDAとSCLの配線が逆になっており、正しく接続し直したところアドレスが検出され、無事に文字が表示された。「何も検出されない」場合は配線ミスを最優先で疑うべき、という教訓が得られるケースです。
サンプルコードのアドレスを実機に合わせて書き換える
第3章のサンプルコードのLiquidCrystal_I2C lcd(0x27, 16, 2);の部分を、ステップ3で確認した実際のアドレスに書き換えます。使用しているLCDが20文字×4行の2004タイプの場合は、16, 2を20, 4に変更してください。
書き込んでコントラストを調整する
コードをArduinoに書き込み、バックライトは点灯するのに文字が見えない場合は、LCD裏面にあるコントラスト調整用の可変抵抗(小さいドライバーで回せる部品)を少しずつ回して調整します。文字がうっすら見えてきたら、はっきり読める位置まで微調整してください。
編集部の検証では、購入直後のI2C液晶モジュールのうち一定数が、コントラストが極端に薄い(または濃すぎる)状態で出荷されており、可変抵抗の調整だけで「壊れていると思っていたLCD」が正常に表示されるようになったケースが複数ありました。「反応しない」と結論づける前に、必ずコントラスト調整を試すことをおすすめします。
06注意点・よくある誤解
誤解1:I2C液晶はどれも同じアドレスで動くはず
搭載されているI/Oエキスパンダ(PCF8574かPCF8574Aか)によってデフォルトのI2Cアドレスが0x27または0x3Fに分かれます。サンプルコードのアドレスをそのまま使わず、必ずI2Cスキャナーで確認してから書き換えましょう。
誤解2:バックライトが点けば正常に動作している
バックライトの点灯とHD44780側の文字表示処理は別の回路です。バックライトが点いていても、コントラスト未調整やコード側の初期化不足で文字が見えないことは珍しくありません。
誤解3:SDAとSCLはどちらに挿しても動く
SDAとSCLは役割が異なる信号線であり、逆に接続すると通信が確立せずI2Cスキャナーでもデバイスが検出されません。モジュール側の端子表記(SDA/SCL)とArduino側のピン(多くはA4/A5、ボードにより異なる)を必ず対応させて接続してください。
07よくある質問
参考文献
- johnrickman「LiquidCrystal_I2C」GitHubリポジトリ, 2026年, https://github.com/johnrickman/LiquidCrystal_I2C
- PMD Way「I2C Backpack for HD44780-compatible LCD modules」製品ページ, 2026年, https://pmdway.com/products/i2c-backpack-for-hd44780-compatible-lcd-modules-50-pack
- Fly-Wing「PCF8574 I2C Address, Pinout & Interfacing Guide」2026年, https://www.flywing-tech.com/blog/pcf8574-i2c-address-pinout-interfacing-guide-2026-update/
- ht-deko「[I2C] 1602 LCD ディスプレイ (HD44780 + PCF8574A)」, https://ht-deko.com/arduino/lcd_i2c.html
※出典の明記がない数値・シナリオは「編集部見解」または「編集部想定シナリオ」として本文中に明示しています。※本文中の内部リンクはyofukasi-lab-wp.com内の関連記事です。
コメント