🛠 Afficheur OLED I2C SSD1306
Objetivos
Controlar una pantalla OLED SSD1306 128x64 mediante I2C desde el GD32F103C8, que dispone de 2 periféricos I2C. Esta es la demo «canónica» del ecosistema comunitario de GD32: los repositorios CommunityGD32Cores (gd32-pio-projects y las demos del core de Arduino) muestran precisamente un SSD1306 (a menudo acompañado de un DHT11). Aprenderá el cableado del bus, la función de las resistencias de pull-up y el diagnóstico de la dirección.
Material
- Tarjeta GD32F103C8T6 / CBT6 compatible con Blue Pill
- Módulo OLED SSD1306 de 0,91" o 0,96" en I2C (dirección 0x3C generalmente)
- Pines I2C: SCL en PB6, SDA en PB7 (asignación por defecto de I2C0 en LQFP48) > SIN VERIFICAR: la hoja de datos no lista los pines I2C; confirme en la hoja de datos Rev 2.9 y en pins_arduino.h del core
- Resistencias de pull-up de 4,7 kΩ hacia 3,3 V en SCL y SDA (a menudo integradas en el módulo OLED)
- VCC del módulo a 3,3 V únicamente (2,6-3,6 V para los pines del GD32)
Código completo
// oled_i2c.ino — GD32F103C8 + SSD1306 I2C 0x3C
// Bibliothèques : Adafruit GFX + Adafruit SSD1306 (gestionnaire de librairies).
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define ADRESSE_OLED 0x3C
Adafruit_SSD1306 ecran(128, 64, &Wire, -1);
uint8_t tour = 0;
void setup {
Serial.begin(115200);
Wire.begin; // bus I2C par défaut du core GD32
if (!ecran.begin(SSD1306_SWITCHCAPVCC, ADRESSE_OLED)) {
Serial.println("OLED absent : verifier 3.3V, SCL/SDA, adresse 0x3C");
while (true) { delay(100); }
}
ecran.clearDisplay;
ecran.setTextColor(SSD1306_WHITE);
ecran.setCursor(0, 0);
ecran.println("Bonjour GD32F103!");
ecran.display;
}
void loop {
ecran.fillRect(0, 20, 128, 12, SSD1306_BLACK);
ecran.setCursor(0, 20);
ecran.print("Compteur : ");
ecran.println(tour++);
ecran.display;
delay(1000);
}
Verificación esperada
La pantalla muestra «Bonjour GD32F103!» y luego un contador que se incrementa cada segundo. Si begin falla, el mensaje de error aparece en la consola serie USART0. Un escaneo I2C (sketch «I2C scanner») debe listar la dirección 0x3C cuando el módulo está conectado.
Errores frecuentes
- Dirección 0x3C vs 0x3D: algunos módulos están en 0x3D (puente en el módulo); realice un escaneo I2C antes de culpar al bus.
- SCL/SDA intercambiados: la pantalla nunca responde; invierta los dos cables (el bus no puede dañarse por este intercambio, pero tampoco funciona).
- Pull-up ausentes: sin resistencia de tirada a nivel alto, el bus nunca libera la línea; verifique si su módulo las incluye (muy a menudo sí).
- VCC a 5 V: algunos módulos aceptan 5 V en VCC pero entregan un nivel lógico de 5 V, fuera del rango garantizado del GD32; aliméntelo a 3,3 V.
- Puerto I2C incorrecto: el GD32 tiene 2 puertos I2C; si el core mapea Wire a I2C0 y usted ha cableado los pines de I2C1 (o el remap PB8/PB9), el bus permanecerá mudo. > SIN VERIFICAR
- Pantalla que parpadea en la parte inferior: el SSD1306 de 0,91" es a veces de 128x32; utilice el tamaño adecuado (Adafruit_SSD1306 128x32).
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinopotentiometre.inoArduinopont-uart.inoArduinooled-i2c.inoArduino