今回は、秋月電子で購入した「ESP32-C3-WROOM-02-N4」と、スイッチサイエンスで購入したESP32用の基板を使って、SSD1306 OLEDディスプレイに文字を表示してみます。
ESP32-C3-WROOM-02-N4については、以前の記事ですでに基本的な使い方を紹介しました。
今回はその続きとして、まずArduino IDEを使ってESP32-C3-WROOM-02-N4にプログラムを書き込み、I2C接続したSSD1306 OLEDに文字を表示させます。
今回のポイントは、書き込みにUSB-UART変換器を使わず、ESP32-C3に搭載されている内蔵USBを利用することです。
そして、この最初のプログラムを動かしておくことには、もう一つ目的があります。
それは、ESP32-C3をWi-Fiに接続して、USBケーブルを使わずにプログラムを書き換える「OTA(Over The Air)」に繋げるするためです。
そのため今回は、OTAへ進む前の準備として、
「USBでプログラムを書き込む」
↓
「SSD1306に文字を表示する」
↓
「ESP32-C3が正常に動作していることを確認する」
ところまでをやってみたいと思います。
今回使うもの
- ESP32-C3-WROOM-02-N4 秋月電子で440円 2026/9月
- ESP32用基板 スイッチサイエンスで220円
- SSD1306 OLEDディスプレイ 秋月電子で580円です 今発売されているのは SSD1315で同じです
- USBケーブル
- Arduino IDE
今回は「OTAの前準備」
今回いきなりOTAをやるのではなく、まずUSBから確実にプログラムを書き込める環境を作る。
そしてSSD1306に文字が表示できれば、
ESP32-C3の書き込み環境
I2C通信
OLED表示
の3つを同時に確認できます。
Arduino IDE 設定
ボードの設定が済んでいない方私の以前の記事を参考にして設定してください
ESP32-C3の内蔵USBを使って書き込む
ESP32-C3にはUSB機能があるので、対応する基板ではUSBケーブルを使って直接プログラムを書き込むことができます。
今回の構成では、
PC
↓ USB
ESP32-C3
↓ I2C
SSD1306 OLED
という構成になります。
setup()の最初にdelay(2000)を入れておく
void setup() {
delay(2000);
// ここから初期化
}これは以前にもわたしのブログで書いていますので確認してください、もし間違って無限ループなどのプログラムなどを書き込んでしまった場合にusbが見えなくななるための対処法です。
SSD1306の配線
今回のプログラムでは、
#define OLED_SDA 4
#define OLED_SCL 5となっていますので、
| SSD1306 | ESP32-C3 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO4 |
| SCL | GPIO5 |
| LED | GPIO6 |
という構成になります。
接続図

回路確認チェック
正しく接続されていれば、最初はCOMポートが消えたり表示されたりを繰り返します。そのコンポートを指定して書き込めば書き込めるはずです。
そして、正しく動作するかをlチカで確認します。
#define LED_PIN 6 // 使用しているボードのLEDに合わせて変更
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}こちらでledが点滅すれば正しく動作していることになります。
SSD1306を表示するプログラム
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
こちらのライブラリーを使いますのでまだインストールしていない方は事前にインストールして下さい。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// I2Cピン
#define OLED_SDA 4
#define OLED_SCL 5
// SSD1306のI2Cアドレス
#define OLED_ADDR 0x3C
// リセットピンなし
Adafruit_SSD1306 display(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,-1);
void setup() {
// 書き込み・リセット時の安全対策
delay(2000);
// I2C開始
Wire.begin(OLED_SDA, OLED_SCL);
// SSD1306初期化
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
while (1) {
delay(1000);
}
}
// 画面クリア
display.clearDisplay();
// 文字設定
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("ESP32-C3");
display.setCursor(0,16);
display.println("SSD1306 OLED");
display.setCursor(0,32);
display.println("Hello World!");
display.setCursor(0,48);
display.println("USB OK");
// OLEDへ表示
display.display();
}
void loop() {
static int count=0;
display.fillRect(44,48,20,8, SSD1306_BLACK); // 黒塗りで数値を消去
display.setCursor(44,48);
display.print(count);
display.display(); // 画面更新
count++;
if (count>99) count=0;
delay(1000); // 1秒ごとに更新
}ESP32ではI2Cピンを自由に設定できるので、今回のようにGPIO4をSDA、GPIO5をSCLとして使いました自由に設定してください。
Arduino IDEから書き込む
コンパイル
↓
書き込み
↓
SSD1306に表示
そしてOLEDに、
ESP32-C3
SSD1306 OLED
Hello World!
USB OK 12 // こちらの数字は1から99カウントなどが表示されたら成功です。
OLEDに「USB OK」と表示されました。これで、ESP32-C3へのUSB書き込みとI2CによるSSD1306の表示を確認することができました。
実際の画像です

ここまでできればOTAへの準備完了
ここまでで、ESP32-C3-WROOM-02-N4へのUSB書き込みと、SSD1306 OLEDへの表示が確認できました。
今回の目的は、単にOLEDに文字を表示することだけではありません。
まずUSBからプログラムを書き込んでESP32-C3が正常に動作することを確認し、その上で次のステップとしてOTAによるプログラム書き換えに進みます。
OTAが使えるようになると、USBケーブルを接続し直すことなく、Wi-Fi経由でESP32-C3のプログラムを更新できるようになります。
次回は今回作ったプログラムをベースに、ESP32-C3をWi-Fiへ接続し、OTAでプログラムを書き換えるところまで進めてみたいと思います。
まとめ
今回は、秋月電子で購入したESP32-C3-WROOM-02-N4とスイッチサイエンスのESP32用基板を使って、SSD1306 OLEDディスプレイに文字を表示してみました。
Arduino IDEでESP32-C3用の環境を準備し、内蔵USBを利用してプログラムを書き込みます。
SSD1306とはI2Cで接続し、今回はGPIO8をSDA、GPIO9をSCLとして使用しました。
また、プログラムのsetup()の最初にdelay(2000)を入れておくことで、書き込み後の動作確認などをしやすくしています。
OLEDに文字が表示できれば、ESP32-C3へのプログラム書き込み、I2C通信、SSD1306の動作確認まで一度に行うことができます。
ここまで確認できれば、次のステップへ進む準備は完了です。
次回はいよいよWi-Fiを利用して、USBケーブルを使わずにプログラムを書き換える「OTA」に挑戦してみたいと思います。



