🛠 Afficheur OLED I2C SSD1306
Objectifs
Piloter un afficheur OLED SSD1306 128x64 en I2C depuis le GD32F103C8, qui dispose de 2 périphériques I2C. C'est le démo « canonique » de l'écosystème communautaire GD32 : les dépôts CommunityGD32Cores (gd32-pio-projects et les démos du core Arduino) montrent justement un SSD1306 (souvent accompagné d'un DHT11). Vous apprendrez le câblage du bus, le rôle des pull-up et le diagnostic d'adresse.
Matériel
- Carte GD32F103C8T6 / CBT6 compatible Blue Pill
- Module OLED SSD1306 0,91" ou 0,96" en I2C (adresse 0x3C en général)
- Broches I2C : SCL sur PB6, SDA sur PB7 (mappage par défaut de I2C0 sur LQFP48) >
- Résistances de pull-up 4,7 kΩ vers 3,3 V sur SCL et SDA (souvent intégrées au module OLED)
- VCC du module en 3,3 V uniquement (2,6-3,6 V pour les broches du GD32)
Code complet
// 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 : vérifier 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);
}
Vérification attendue
L'écran affiche « Bonjour GD32F103 ! » puis un compteur qui s'incrémente chaque seconde. Si begin échoue, le message d'erreur apparaît sur la console série USART0. Un scan I2C (croquis « I2C scanner ») doit lister l'adresse 0x3C quand le module est branché.
Erreurs fréquentes
- Adresse 0x3C vs 0x3D : certains modules sont en 0x3D (strap sur le module) ; faites un scan I2C avant d'accuser le bus.
- SCL/SDA échangés : l'afficheur ne répond jamais ; inversez les deux fils (le bus ne peut pas être détruit par cet échange, mais rien ne cause non plus).
- Pull-up absentes : sans résistance de tirage au haut, le bus ne libère jamais la ligne ; vérifiez si votre module les embarque (très souvent oui).
- VCC en 5 V : certains modules acceptent 5 V en VCC mais sortent un niveau 5 V côté logique, hors plage garantie du GD32 ; alimentez en 3,3 V.
- Mauvais port I2C : le GD32 a 2 I2C ; si le core mappe Wire sur I2C0 et que vous avez câblé les broches d'I2C1 (ou le remap PB8/PB9), le bus reste muet. >
- Écran qui clignote en bas : le SSD1306 0,91" est parfois en 128x32 ; utilisez la taille adaptée (Adafruit_SSD1306 128x32).
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinopotentiometre.inoArduinopont-uart.inoArduinooled-i2c.inoArduino