oled-i2c.ino
Un écran OLED 128x64 en I2C affiche la tension lue sur A0 et le temps de fonctionnement. Le framebuffer géré par Adafruit_SSD1306 permet un affichage graphique complet (texte, courbes, sprites) avec un seul bus à deux fils.
Matériel requis
Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V) alimenté par USB. 1 module OLED SSD1306 I2C (adresse 0x3C ou 0x3D).
Câblage
SDA (broche 18 sur Teensy 3.x, 18/19 sur 4.x), SCL (19/16), VCC 3,3 V, GND. Le module accepte le 3,3 V logique.
Fonctionnement
Wire pilote l'I2C 400 kHz ; le framebuffer 128x64 est construit en RAM puis transféré d'un bloc par display(). L'ADC 12 bits donne la tension sur A0 (max 3,3 V).
Exécution
Avec Teensyduino dans l'Arduino IDE, choisir « Teensy 4.0 », Téléverser puis valider dans le Teensy Loader. Les broches sont en 3,3 V ; le 4.0 est pin-compatible avec le 3.2.
Variantes
Dessiner une courbe temps réel des mesures (drawPixel dans une boucle), ou afficher le niveau d'un capteur tactile en barre.
oled-i2c.ino
// OLED 0,96" SSD1306 (I2C 0x3C) avec la bibliotheque Adafruit_SSD1306.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define ADRESSE 0x3C
#define RAZ -1 // pas de broche reset sur les modules I2C
Adafruit_SSD1306 ecran(128, 64, &Wire, RAZ);
void setup() {
Serial.begin(9600);
Wire.setClock(400000); // les Teensy montent a 400 kHz sans souci
if (!ecran.begin(SSD1306_SWITCHCAPVCC, ADRESSE)) {
Serial.println(F("OLED absent (verifier 0x3C/0x3D)"));
for (;;);
}
ecran.clearDisplay();
ecran.setTextColor(SSD1306_WHITE);
ecran.setTextSize(1);
ecran.setCursor(0, 0);
ecran.println(F("Teensy + OLED"));
ecran.display();
}
void loop() {
static unsigned long t0 = 0;
if (millis() - t0 < 500) return;
t0 = millis();
analogReadResolution(12);
float v = analogRead(A0) * 3.3 / 4095.0;
ecran.clearDisplay();
ecran.setCursor(0, 0);
ecran.print(F("A0 : ")); ecran.print(v, 2); ecran.println(F(" V"));
ecran.print(F("Up : ")); ecran.print(millis() / 1000); ecran.println(F(" s"));
ecran.display(); // transfert du framebuffer vers l'ecran
}