ArduinoでOLEDに文字を表示する方法|配線・コード・映らない原因まで初心者向けに解説

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






ArduinoでOLEDディスプレイに文字を表示する方法。配線からハマりどころまで一気に解決する。



HOW-TO / Arduino

ArduinoでOLEDディスプレイに文字を表示する方法。配線からハマりどころまで一気に解決する。

配線を合わせたはずなのに画面が真っ白のまま——ArduinoのOLED表示で最初につまずくポイントを、原因の仕組みから実際のコード例まで初心者向けに解説します。

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

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

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

Chapter 01 / Introduction

01なぜOLED表示でつまずくのか

結論から言うと、Arduinoで有機ELディスプレイ(OLED)に何も表示されない場合、原因の大半は「I2Cアドレスの指定間違い」と「SDA・SCLの配線ミス」の2つに集約されます。よく使われるSSD1306搭載のOLEDモジュールは、製品によってI2Cアドレスが0x3Cまたは0x3Dのいずれかに設定されており、サンプルコードのアドレスがそのまま自分のモジュールに合うとは限りません。

編集部想定シナリオ

電子工作を始めたばかりのEさんは、通販で購入した0.96インチのOLEDモジュールをArduino Unoに接続し、公式サンプルのssd1306_128x64_i2cをそのまま書き込んだが、画面には何も表示されなかった。配線を何度確認しても間違いが見当たらず数時間悩んだ末、I2Cスキャナースケッチを実行したところ、コード内で指定していた0x3Dではなく0x3Cが実際のアドレスだったことが判明。アドレスを書き換えた瞬間に画面が表示された、という顛末は初心者が非常によく通る道です。

編集部見解

OLED表示のトラブルシューティングは「配線を疑う前に、まずI2Cアドレスをスキャンして確認する」という順番にするだけで解決時間が大幅に短縮できます。本記事ではこの順番を軸に手順を組み立てています。

この後の章では、OLEDとSSD1306の基本、表示の仕組み、SH1106など類似デバイスとの違い、そして実際に文字を表示するまでの手順を順番に解説していきます。




Chapter 02 / Background

02OLED(SSD1306)とArduinoの基礎知識

OLED(有機ELディスプレイ)とは、電圧をかけると自ら発光する有機化合物を使ったディスプレイです。バックライトが不要なため消費電力が少なく、黒い部分が完全に発光しないコントラストの高さが特徴で、Arduinoのようなマイコンでの小型情報表示によく使われます。

SSD1306は、こうしたモノクロ有機ELディスプレイを制御するための代表的なドライバICです。Adafruit社が公開しているArduino向けライブラリ「Adafruit_SSD1306」は、128×64および128×32ピクセルのモノクロSSD1306搭載OLEDに対応しており、I2CまたはSPIで通信できると公式リポジトリで説明されています。文字や図形の描画には、このライブラリと組み合わせて使う「Adafruit GFX Library」も必要です。

Arduinoは、イタリア発のオープンソースハードウェアプラットフォームで、趣味の電子工作からプロトタイピングまで幅広く使われるマイコンボードとその開発環境(Arduino IDE)を指します。OLEDのようなI2Cデバイスとの通信には、Arduino標準の「Wire」ライブラリが使われ、多くのArduinoボードではSDA・SCLという2本の信号線でI2C通信を行います。

Chapter 03 / How it works

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

ArduinoからOLEDに文字を表示する処理は、大きく分けて「①I2CでSSD1306に接続する」「②画面バッファに描画内容を書き込む」「③バッファの内容を一括で画面に転送する」という3段階で成り立っています。Adafruit_SSD1306ライブラリを使った基本的なコードは次のようになります。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128   // OLEDの横ピクセル数
#define SCREEN_HEIGHT 64   // OLEDの縦ピクセル数(128x32モデルの場合は32)
#define OLED_RESET    -1   // リセットピン未使用の場合は-1
#define SCREEN_ADDRESS 0x3C // I2Cアドレス(0x3Cまたは0x3D。要スキャン確認)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // ディスプレイを初期化。アドレスが違うと何も表示されない
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("SSD1306の初期化に失敗しました");
    while (true); // 停止
  }

  display.clearDisplay();        // 画面バッファをクリア
  display.setTextSize(1);        // 文字サイズ(1〜複数倍で指定)
  display.setTextColor(SSD1306_WHITE); // モノクロOLEDでは白のみ
  display.setCursor(0, 0);       // 描画開始座標(x, y)
  display.println("Hello, OLED!");
  display.display();             // バッファの内容を実際の画面に転送
}

void loop() {
}

ポイントはdisplay.print()display.drawLine()などの描画関数を呼んだ時点ではまだ画面に反映されず、最後にdisplay.display()を呼び出して初めてバッファの内容が画面に転送されるという点です。この2段階方式により、複数の描画を組み合わせてから一括で画面を更新でき、ちらつきを抑えられます。

もう一つの重要なポイントがI2Cアドレスです。Adafruit SSD1306のサンプルスケッチではデフォルトでI2Cアドレスが0x3Dに指定されているが、実際のハードウェアでは0x3Cで動作するケースが多く、アドレスが合わない場合は表示されないことが複数の技術記事で報告されています。手元のモジュールの実アドレスが分からない場合は、Arduinoコミュニティで広く使われているI2Cスキャナースケッチを実行することで、接続されているI2Cデバイスのアドレスを特定できます。

データ・編集部見解

編集部で確認した複数の実装例を横断すると、0.96インチ・128×64ピクセルのSSD1306搭載OLEDモジュールでは0x3C、0.91インチ・128×32ピクセルのモデルでは0x3Cまたは0x3Dが使われるケースが多い傾向が見られました。ただしこれは購入元・ロットによって差があるため、必ず自分のモジュールでI2Cスキャナーを実行して確認することを推奨します。




Chapter 04 / Comparison

04比較:SSD1306/SH1106/有機ELとLCD

項目 A:SSD1306(OLED) B:SH1106(OLED) C:16×2キャラクタLCD
表示方式 有機EL(自発光) 有機EL(自発光) 液晶(バックライト式が多い)
対応ライブラリ例 Adafruit_SSD1306 U8g2など専用ライブラリ LiquidCrystal(Arduino標準)
表示できる内容 文字・図形・グラフィックを自由描画 文字・図形・グラフィックを自由描画 基本は英数字・カナのみ
初心者への向きやすさ 情報が多く導入しやすい SSD1306用コードの流用に一手間必要 配線・コードともに最もシンプル
参考 Adafruit_SSD1306(GitHub) 編集部見解 編集部見解

※「初心者への向きやすさ」欄は編集部見解によるものです。購入したモジュールのドライバICは商品ページや基板の刻印で必ず確認してください。

結論として、購入したOLEDモジュールがSSD1306搭載であれば、情報量が多くコミュニティのサポートも厚いAdafruit_SSD1306ライブラリから始めるのが最短ルートです。SH1106搭載モジュールを誤ってSSD1306用コードで動かそうとすると、表示が歪んだり真っ暗のままになったりすることがあるため、購入前に型番を確認しておくと余計なトラブルシューティングを避けられます。

Chapter 05 / Practice

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

01

OLEDとArduinoをI2Cで配線する

OLEDモジュールのVCCを5V(または3.3V、モジュール仕様による)、GNDをGND、SDAをArduino UnoのA4、SCLをA5に接続します。ボードによってSDA/SCLのピン番号は異なるため、使用するArduinoの仕様を確認してください。

編集部想定シナリオ

配線初挑戦のFさんは、SDAとSCLを逆に接続してしまい画面が反応しないというトラブルに遭遇。テスターでの導通確認と、モジュール側の端子表記(SDA/SCL)を再度見比べることで誤配線に気づき、正しく接続し直したところ無事に表示された、というのはよくあるつまずきパターンです。

02

Adafruit_SSD1306とAdafruit_GFXライブラリをインストールする

Arduino IDEの「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」から「Adafruit SSD1306」を検索してインストールします。依存関係として「Adafruit GFX Library」のインストールを確認するダイアログが出た場合は、あわせてインストールしてください。

03

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

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

データ・編集部見解

編集部での確認では、I2Cスキャナーを一度実行してアドレスを確定させるという一手間を最初に挟むだけで、その後の「表示されない」系トラブルの切り分けにかかる時間が大幅に短縮できました。特に初めてOLEDを使う場合は、サンプルコードを直接書き込む前にこのステップを踏むことを強く推奨します。

04

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

第3章のサンプルコードのSCREEN_ADDRESSを、ステップ3で確認した実際のアドレスに書き換えます。SCREEN_WIDTHSCREEN_HEIGHTも、購入したモジュールの解像度(128×64または128×32)に合わせて設定してください。

05

書き込んで表示を確認し、レイアウトを調整する

コードをArduinoに書き込み、文字が正しく表示されることを確認します。表示位置がずれる場合はsetCursor(x, y)の座標を、文字が小さすぎる/大きすぎる場合はsetTextSize()の値を1〜4程度の範囲で調整して見やすい表示に仕上げます。

Chapter 06 / Caution

06注意点・よくある誤解

!

誤解1:どのOLEDモジュールでも同じコードで動くはず

見た目が似ていても、搭載されているドライバIC(SSD1306かSH1106かなど)が異なると同じライブラリでは正しく動作しません。購入前に商品ページや基板の刻印でドライバICの型番を確認する習慣をつけましょう。

!

誤解2:display.print()を呼べば即座に画面へ反映される

実際には描画関数はすべてメモリ上のバッファへの書き込みであり、最後にdisplay.display()を呼ばない限り画面には何も表示されません。「コードは通っているのに表示されない」というトラブルの多くはこの呼び出し忘れが原因です。

!

誤解3:文字色を自由に変えられるはず

モノクロのSSD1306 OLEDでは、表示できる色は基本的に「点灯(白)」か「消灯(黒)」の2値のみです。カラー表示をしたい場合はSSD1306ではなく、カラー対応の有機ELモジュール(別のドライバICを使用)を選ぶ必要があります。




Chapter 07 / FAQ

07よくある質問

Q.OLEDディスプレイが真っ白または真っ黒のまま何も表示されません。原因は?
A.最も多い原因はI2Cアドレスの指定間違いです。SSD1306には主に0x3Cと0x3Dの2種類のアドレスが存在するため、サンプルコードの0x3Dのままだと画面が表示されないことがあります。I2Cスキャナースケッチを実行して実際のアドレスを確認し、コード内の値を一致させてください。次に多い原因は配線ミスで、特にSDAとSCLの逆接続がよく起こります。

Q.SSD1306とSH1106の違いは何ですか?
A.どちらもよく使われる有機ELディスプレイ用のドライバICですが、互換性がなく同じライブラリでは正しく表示されない場合があります。購入したOLEDモジュールの型番や販売ページの説明を確認し、SSD1306用にはAdafruit_SSD1306ライブラリ、SH1106用にはU8g2など対応するライブラリを選ぶ必要があります。

Q.Adafruit_GFXライブラリだけインストールすればOLEDは動きますか?
A.動きません。Adafruit_GFXは図形描画の共通機能を提供する土台のライブラリであり、実際にSSD1306を制御するにはAdafruit_SSD1306ライブラリを別途インストールする必要があります。Arduino IDEのライブラリマネージャでAdafruit_SSD1306をインストールすると、依存関係としてAdafruit_GFXも一緒にインストールするか確認されるのが一般的な流れです。

Q.OLEDディスプレイの寿命や焼き付きは気にする必要がありますか?
A.有機ELディスプレイは同じ画素を長時間発光させ続けると輝度が落ちる焼き付き(画面焼け)を起こす場合があります。編集部見解として、常時同じ文字を固定表示するような用途では、定期的に表示位置を変える、一定時間ごとに画面を消灯するなどの対策を検討すると安心です。

参考文献

  1. Adafruit「Adafruit_SSD1306」GitHubリポジトリ, 2026年, https://github.com/adafruit/Adafruit_SSD1306
  2. Arduino公式サイト, 2026年, https://www.arduino.cc/
  3. Qiita「Arduino > OLED > adafruitライブラリ」2018年, https://qiita.com/sugasaki/items/7df0fec82b232c41c2d2

※出典の明記がない数値・シナリオは「編集部見解」または「編集部想定シナリオ」として本文中に明示しています。


関連記事

特集記事

コメント

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

TOP
CLOSE