oled-i2c.ino
El OLED SSD1306 es el display I2C universal: dos hilos, sin librerías propietarias. El sketch escribe un framebuffer y lo envía de golpe con display(), la disciplina correcta contra el parpadeo.
Hardware necesario
Una placa ESP32-S2 (núcleo único Xtensa, Wi-Fi, USB-OTG nativo en GPIO19/20, 14 pads táctiles capacitivos) tipo DevKitC-1 o QT Py, alimentada por USB. 1 módulo OLED SSD1306 128x64 I2C (4 pines).
Cableado
VCC 3,3 V, GND, SDA/SCL en los pines I2C por defecto del SoC (a menudo GPIO21/22; verifique su placa). Dirección 0x3C (a veces 0x78 → jumper).
Funcionamiento
Wire gestiona el bus; Adafruit_SSD1306 mantiene un framebuffer en RAM y lo copia de una en display(). begin() detecta la ausencia del chip y el monitor serie sirve de depuración. En el Arduino IDE (paquete esp32), elija « ESP32S2 Dev Module »; el S2 se programa directamente por su USB nativo (doble reset en algunas placas para entrar al bootloader).
Para ir más lejos
Añada las lecturas del DHT22 del sketch anterior, o haga desfilar un mensaje cuando el búfer supere 64 píxeles de alto.
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);
}