I2C OLED Hello World
Wire up an SSD1306 128x64 OLED display and print your first line of text — the same screen wiring used in the Precision RTC Clock tutorial.
The I2C Wiring
The SSD1306 communicates over I2C, which only needs two data lines (SDA and SCL) plus power and ground. If you've already built the RTC Clock tutorial, this is the exact same screen wiring — you can reuse that breadboard.
The Arduino Source Code
Install the Adafruit_SSD1306 and Adafruit_GFX libraries via the Library Manager first. Most SSD1306 modules use I2C address 0x3C — check your module's datasheet if the screen stays blank.
// ESP32-S3 OLED Hello World Tutorial - CircuitHub.pro
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#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(115200);
// Custom ESP32-S3 I2C pins (SDA=8, SCL=9)
Wire.begin(8, 9);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 20);
display.println("Hello,");
display.println("CircuitHub!");
display.display();
}
void loop() {
// Nothing needed here - the static text stays on screen
}
Required Components
Just two parts beyond your dev board:
🚀 Take It Further
Try combining this with the Potentiometer tutorial: read the pot's ADC value and print it live to the OLED instead of the Serial Monitor, using display.clearDisplay() at the start of every loop to avoid overlapping text.