- 🏫 はじめに
- 📺 動画はこちら
- 📌 概要
- 🔌 配線図の解説
- 💻 今回作るプログラムの概要
- 📝 プログラム作成
- ✅ プログラムの検証・書き込み
- うまく動作したら完成です!
- 📚 今回学べること
- 📌 使用部品
- 💬 質問・コメント大歓迎!
- 🏫 デジタル技術大学校 関連動画一覧
🏫 はじめに
こんにちは、デジタル技術大学校、専属講師のゆかりです 🌸
今回はArduino応用編として、
I2C機器を2台同時に接続する方法を解説します。
OLEDとLCD1602を使って、それぞれ異なる情報を表示するプログラムを作っていきます。
📺 動画はこちら
📌 概要
I2C機器には、それぞれ固有のアドレスが設定されています。
| 機器 | I2Cアドレス |
|---|---|
| OLED(SSD1306) | 0x3C |
| LCD1602 | 0x27 |
このようにアドレスが異なるため、
同じ配線上で同時に使用することが可能です。
⚠️ 注意
同じ種類の機器(例:OLED×2、LCD×2)を使用する場合は、
アドレス変更が必要になります。
🔌 配線図の解説
Arduinoの SCL / SDA をブレッドボードに接続し、
そこからOLEDとLCD1602へ配線します。
この接続方法を I2Cバス接続 と呼びます。

💻 今回作るプログラムの概要
今回は「表示の役割分担」を行います。
| 表示デバイス | 表示内容 |
|---|---|
| LCD1602 | 日付・時刻(NTPサーバーから取得) |
| OLED | 温度・湿度(DHT11から取得) |
1つのArduinoで
複数の情報を同時に扱う実践的な構成になります。
📝 プログラム作成
ヘッダファイルのインクルード
以下の機能に必要なライブラリを読み込みます。
- Wi-Fi通信
- LCD1602制御
- OLED(SSD1306)制御
- センサー関連
今回のようにプログラムが長くなる場合は、
過去に作成したコードをコピー&ペーストで再利用して問題ありません。
必要な値の設定
今回の設定ポイントは以下の通りです。
myssid.h:Wi-Fi接続情報(いつも通り)- NTPサーバー:NICTのNTPサーバーを使用
- OLED設定:
#defineで画面サイズを指定 - DHT11:8番ピンに接続
- LCD1602:I2Cアドレス
0x27
#include <WiFiS3.h> #include <NTPClient.h> #include <WiFiUdp.h> #include <LiquidCrystal_I2C.h> #include <DHT.h> #include <Wire.h> #include <Adafruit_SSD1306.h> #include <Adafruit_GFX.h> #include <time.h> #include "myssid.h" WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "ntp.nict.go.jp"); #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 #define DHTPIN 8 //DHT11のピン番号 DHT dht(DHTPIN,DHT11); Adafruit_SSD1306 display(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,OLED_RESET); LiquidCrystal_I2C lcd(0x27,16,2); void setup() { Serial.begin(115200); // WiFi接続 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); // NTPクライアント初期化 timeClient.begin(); timeClient.setTimeOffset(32400); // JST (UTC+9) display.begin(SSD1306_SWITCHCAPVCC,0x3c); display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.println("OLED Ready!"); display.display(); // LCD1602の初期設定 lcd.init(); lcd.display(); lcd.backlight(); dht.begin(); } void loop() { // put your main code here, to run repeatedly: timeClient.update(); unsigned long epochTime = timeClient.getEpochTime(); time_t rawtime = epochTime; tm* tm = localtime(&rawtime); int year = tm->tm_year + 1900; int month= tm->tm_mon + 1; int day = tm->tm_mday; int hours = tm->tm_hour; int minutes = tm->tm_min; int seconds = tm->tm_sec; float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); //もしどちらかの値が空ならエラー if(isnan(humidity) || isnan(temperature)){ display.setCursor(0, 0); display.print("Error reading"); display.setCursor(0, 1); display.print("DHT sensor"); return; } char formattedDate1[20],formattedDate2[20]; sprintf(formattedDate1,"%04d/%02d/%02d",year,month,day); sprintf(formattedDate2,"%02d:%02d:%02d",hours,minutes,seconds); lcd.setCursor(0,0); lcd.print(formattedDate1); lcd.setCursor(0,1); lcd.print(formattedDate2); display.clearDisplay(); display.setCursor(0, 10); display.print("Temp:"); display.print(temperature); display.print(" C"); display.setCursor(0, 30); display.print("Humidity:"); display.print(humidity); display.print(" %"); display.display(); delay(1000); }
✅ プログラムの検証・書き込み
間違いがないかチェックしてマイコンに書き込みます。
うまく動作したら完成です!
📚 今回学べること
- I2C通信の基本的な仕組み
- I2C機器を2台同時に接続する方法
- OLEDとLCD1602を併用する表示テクニック
- 温度・湿度データの取得と表示
- 日時情報を表示する実用的なプログラム構成
📌 使用部品
🔧 使用ボード
- Arduino Uno R4 WiFi
(※アフィリエイトリンクを使用しています)
使用部品
- OLEDディスプレイ(I2C)
- LCD1602(I2C)
- 温湿度センサー(DHT11)
📦 電子工作キット
💬 質問・コメント大歓迎!
「UIDの比較がうまくいかない」 「LEDが思った色にならない」
など、遠慮なくコメントしてください 😊 ゆかり先生が丁寧にフォローします。



