oled-i2c.ino

ESP32 (original, classe ESP32-WROOM-32) · Fichier : oled-i2c.ino · Langage : Arduino · Usage : Afficher des mesures sur un écran OLED I2C 128×64

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 classique (module ESP32-WROOM-32, double cœur Xtensa 240 MHz, Wi-Fi + Bluetooth) type DevKitC / DOIT V1, alimentée par micro-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, installez le paquet « esp32 » (Gestionnaire de cartes), choisissez « Dev Module », le port, puis Téléverser (maintenez BOOT si la détection échoue). GPIO34-39 sont entrées seules ; évitez GPIO6-11 et GPIO12.

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);
}

← Retour à la fiche