oled-i2c.ino
Les bibliothèques Adafruit se compilent telles quelles sur le core STM32F1 : le SSD1306 se branche sur PB6/PB7 (Wire1 mappé en Wire par défaut) et la jauge animée prouve que le bus tourne.
Matériel requis
Une carte de développement GD32F103C8T6 (Cortex-M3 108 MHz, compatible broche à broche Blue Pill), alimentée en 3,3 V/5 V, avec un adaptateur ST-Link ou série. 1 OLED SSD1306 I2C 128×64.
Branchement
SDA sur PB7, SCL sur PB6 (câblage Wire par défaut du core), VCC 3,3 V, GND. Adresse 0x3C.
Fonctionnement
Wire pilote l'I2C matériel du GD32 ; Adafruit_SSD1306 garde le framebuffer et le recopie sur display(). Le test begin() échoue proprement si l'adresse est fausse. Avec Arduino : installez le core « STM32F1 » (Roger Clark, gestionnaire de cartes) et choisissez la carte « GD32F103C » ; le LED utilisateur est PC13 (actif à LOW). En C : bibliothèque GD32F10x + ST-Link.
Pour aller plus loin
Affichez la tension du potentiomètre en jauge, ou scannez le bus pour lister tous les modules Grove/I2C.
oled-i2c.ino
// OLED SSD1306 128x64 sur Wire (PB6/PB7 par defaut du core).
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define ADRESSE 0x3C
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
unsigned long precedent = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!oled.begin(SSD1306_SWITCHCAPVCC, ADRESSE)) {
Serial.println("OLED absent (0x3C ?)"); for (;;);
}
oled.clearDisplay();
oled.setTextColor(SSD1306_WHITE);
}
void loop() {
if (millis() - precedent < 200) return;
precedent = millis();
oled.clearDisplay();
oled.setTextSize(1);
oled.setCursor(0, 0);
oled.printf("GD32F103\n%lu ms\n", millis());
oled.drawLine(0, 40, 127, 40, SSD1306_WHITE);
int jauge = (millis() / 50) % 128;
oled.fillRect(0, 48, jauge, 10, SSD1306_WHITE);
oled.display();
}