oled-i2c.ino
L'OLED SSD1306 est l'afficheur I2C universel : deux fils, aucune bibliothèque propriétaire. Le sketch écrit dans un framebuffer puis d'un seul display() — la bonne discipline pour éviter le scintillement.
Matériel requis
Une carte ESP32-S3 (double cœur Xtensa avec instructions vectorielles, Wi-Fi + BLE 5, USB natif) type DevKitC-1, XIAO ou T-Display-S3, alimentée par USB. 1 module OLED SSD1306 128×64 I2C (4 broches).
Branchement
VCC 3,3 V, GND, SDA/SCL sur les broches I2C par défaut du SoC (souvent GPIO21/22 ; vérifier la carte). Adresse 0x3C (parfois 0x78 → jumper).
Fonctionnement
Wire pilote le bus ; Adafruit_SSD1306 garde un framebuffer en RAM et le recopie d'un coup sur display(). begin() détecte l'absence de puce et le moniteur série sert de dépannage. Dans l'Arduino IDE (paquet esp32), choisissez « ESP32S3 Dev Module », activez « USB CDC On Boot », puis Téléverser. Beaucoup de cartes placent un WS2812 sur GPIO48.
Pour aller plus loin
Ajouter les valeurs du DHT22 du sketch précédent, ou défiler un message quand le tampon dépasse 64 pixels de haut.
oled-i2c.ino
// OLED SSD1306 128x64 en I2C (0x3C) — Adafruit SSD1306 + GFX.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define ADRESSE 0x3C
#define RAZ -1
Adafruit_SSD1306 oled(128, 64, &Wire, RAZ);
void setup() {
Serial.begin(115200);
Wire.begin(); // SDA/SCL par defaut du SoC
if (!oled.begin(SSD1306_SWITCHCAPVCC, ADRESSE)) {
Serial.println("OLED absent : scanner 0x3C ?");
for (;;);
}
oled.clearDisplay();
oled.setTextColor(SSD1306_WHITE);
oled.setTextSize(1);
}
void loop() {
oled.clearDisplay();
oled.setCursor(0, 0);
oled.println(F("Carte "));
oled.setTextSize(2);
oled.printf("%lu ms\n", millis());
oled.setTextSize(1);
oled.printf("Heap : %u o\n", ESP.getFreeHeap());
oled.printf("Rssi : %d dBm\n", WiFi.Rssi());
oled.display(); // envoie le framebuffer
delay(250);
}