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-S2 (simple cœur Xtensa, Wi-Fi, USB-OTG natif sur GPIO19/20, 14 touches capacitives) type DevKitC-1 ou QT Py, 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 « ESP32S2 Dev Module » ; le S2 se flashe directement par son USB natif (double reset sur certaines cartes pour entrer en bootloader).
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);
}