概要
ArduinoとOLEDディスプレイを使えば、センサーから取得したデータや任意の数値を簡単に表示することができます。本記事では、Arduino Nanoと0.96インチのOLEDディスプレイを接続し、数値をディスプレイに表示する手順を紹介します。基本的なピンの接続方法からコードの実装、発生しやすいエラーとその解決方法について解説します。
ピンの配置
必要な部品
- Arduino Nano × 1
- 0.96インチOLEDディスプレイ(SSD1306) × 1
- ジャンパーワイヤー × 数本
- ブレッドボード(必要に応じて)
配線図
| OLEDディスプレイピン | Arduino Nanoピン | 説明 |
|---|---|---|
| VCC | 3.3V または 5V | 電源供給 |
| GND | GND | グラウンド |
| SDA | A4 | I2Cデータライン |
| SCL | A5 | I2Cクロックライン |
コード
以下のコードは、OLEDディスプレイに「100」という数値を表示するサンプルプログラムです。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLEDディスプレイの設定
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// シリアルモニタの初期化
Serial.begin(9600);
// OLEDディスプレイの初期化
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2Cアドレス 0x3C を使用
Serial.println("ディスプレイの初期化に失敗しました。接続を確認してください。");
while (1); // 初期化に失敗した場合は停止
}
// 画面をクリア
display.clearDisplay();
// ディスプレイに「100」を表示
display.setTextSize(2); // テキストサイズを設定
display.setTextColor(SSD1306_WHITE); // テキストの色を設定
display.setCursor(10, 20); // テキストの表示位置を設定
display.println("100"); // 表示する内容
display.display(); // 内容を画面に反映
}
void loop() {
// ループ処理はなし(1度だけ表示)
}
A4、A5ピンをコード内に明記しない理由
Arduinoでは、I2C通信を行うピンがマイコンボードの設計によってあらかじめ決まっています。以下の理由により、コード内でA4とA5ピンを明記する必要がありません。
- WireライブラリがハードウェアI2Cを管理するため:
- Arduinoの
Wireライブラリは、I2C通信を行うピンを自動的に認識します。NanoではI2C通信に使われるピンがA4(SDA)とA5(SCL)に固定されています。
- Arduinoの
- I2Cのピンがボードごとに異なる:
- Arduino UnoやNanoではA4とA5がI2Cピンですが、Arduino MegaやESP32では異なるピンが割り当てられています。
Wireライブラリはこれを適切に処理するため、コードを書き換える必要がありません。
- コードの移植性が高くなる:
- ハードウェアピンを明記しないことで、別のArduinoボードにコードを移植する際も動作が保証されます。
エラーと解決方法
1. ディスプレイの初期化に失敗する
エラーメッセージ:
ディスプレイの初期化に失敗しました。接続を確認してください。
原因と解決方法:
- 原因: I2Cアドレスが異なる可能性があります。ディスプレイのデフォルトアドレスは
0x3Cまたは0x3Dです。 - 解決方法: 以下のI2Cスキャナコードを使い、接続されているデバイスのアドレスを確認してください。
#include <Wire.h>
void setup() {
Serial.begin(9600);
Wire.begin();
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() {}
2. 表示が乱れる(砂嵐のようになる)
原因: ディスプレイが正しくクリアされていない可能性があります。
解決方法: display.clearDisplay(); を各描画前に呼び出して、ディスプレイの内容をリセットしてください。
まとめ
ArduinoとOLEDディスプレイを接続することで、簡単に数値や情報を表示することができます。I2C通信では、Wireライブラリを使うことでピンの設定を自動管理できるため、コードが簡潔になります。本記事を通じて、基本的な接続方法やコードの実装、トラブルシューティングを学べたのではないでしょうか。
IT・ガジェット・電子工作の知識をこれひとつで

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
PCアプリの操作解説、最新のガジェット情報、そして電子工作の専門書まで。 Kindle Unlimitedなら、あらゆるジャンルのIT・デジタル関連書籍が読み放題です。
「仕事の効率化」から「趣味の深掘り」まで、高価な専門書をわざわざ買わずに、必要な情報をその場で引き出せるのが最大のメリット。 現在は30日間の無料体験や、対象者限定の「3ヶ月499円」プランなどが用意されています。まずはご自身のアカウントでお得なオファーが表示されるかご確認ください。
