oled-i2c.ino

Teensy 4.1 · Archivo : oled-i2c.ino · Lenguaje : Arduino · Uso : Afficher tension et uptime sur un écran OLED I2C SSD1306

Una OLED I2C 128x64 muestra la tensión leída en A0 y el tiempo de funcionamiento. El framebuffer gestionado por Adafruit_SSD1306 permite gráficos completos (texto, curvas, sprites) con un solo bus de dos hilos.

Hardware

Un Teensy 4.1 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, lógica de 3,3 V, Ethernet y almacenamiento flash adicional) alimentado por USB. 1 módulo OLED SSD1306 I2C (dirección 0x3C o 0x3D).

Cableado

SDA (pin 18 en Teensy 3.x, 18/19 en 4.x), SCL (19/16), VCC 3,3 V, GND. El módulo acepta lógica de 3,3 V.

Funcionamiento

Wire gestiona I2C a 400 kHz; el framebuffer 128x64 se construye en RAM y se transfiere de golpe con display(). El ADC de 12 bits da la tensión de A0 (máx 3,3 V).

Ejecución

Teensyduino en el Arduino IDE, placa « Teensy 4.1 », Subir y botón del Teensy Loader. Pines de 3,3 V; el 4.1 añade Ethernet, USB host y pines adicionales.

Variantes

Dibujar una curva en tiempo real de las medidas (drawPixel en un bucle), o mostrar el nivel de un sensor táctil como barra.

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
}

← Volver a la ficha