Arduino - Écran OLED SSD1309 128×64 | Tutoriel OLED I2C de 2,42 pouces
Un écran OLED (diode électroluminescente organique) offre des pixels auto-émissifs qui produisent des noirs profonds, un contraste élevé et de larges angles de vue — ce qui en fait une excellente amélioration par rapport aux LCD traditionnels. Le SSD1309 est le circuit intégré pilote couramment trouvé sur des modules OLED I2C 128×64 de 2,42 pouces (parfois étiquetés 2,4 pouces).

Dans ce guide étape par étape, vous apprendrez comment connecter et programmer le SSD1309 OLED 128×64 avec une carte Arduino en utilisant la bibliothèque DIYables_OLED_SSD1309. Plus précisément, nous aborderons :
- Connecter l'écran OLED SSD1309 de 2,42 pouces à Arduino via I2C.
- Afficher du texte et des chiffres sur l'écran.
- Centrer le texte à la fois verticalement et horizontalement.
- Tracer des formes géométriques (lignes, rectangles, cercles, triangles, rectangles arrondis).
- Affichage d'images bitmap monochromes.
- Défilement matériel dans les quatre directions.
- Ajuster le contraste et réduire la luminosité de l'écran.
- Utiliser des polices externes personnalisées de la collection de polices Adafruit GFX.
Préparation du matériel
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables STEM V3 (Arduino inclus) | |
| 1 | × | Kit de Capteurs DIYables (30 capteurs/écrans) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À propos de l'écran OLED SSD1309 de 2,42 pouces
Le SSD1309 est un circuit intégré pilote OLED CMOS à puce unique conçu pour des panneaux à matrice de points 128×64. Il est compatible au niveau des registres avec le SSD1306 largement utilisé, de sorte que de nombreux exemples de code existants puissent être réutilisés avec peu de modifications. Les principales différences matérielles sont :
- Pas de pompe de charge intégrée — le SSD1309 nécessite une alimentation VCC externe, bien que pratiquement toutes les cartes breakout (y compris les modules de 2,42 pouces et 2,4 pouces) soient livrées avec un convertisseur boost intégré, ce qui est transparent pour vous.
- Tolérance de tension plus élevée — le SSD1309 accepte jusqu'à 16 V en VCC, tandis que le SSD1306 est limité à environ 4,2 V.
Le module OLED de 2,42 pouces (2,4 pouces) utilise généralement le pilote SSD1309 et offre une résolution de 128 × 64 pixels avec une interface I2C. La couleur du panneau (blanc, bleu, jaune, vert, ou à double zone) est déterminée par le matériau OLED physique et n'est pas contrôlable par logiciel.
Ce tutoriel communique avec l'affichage via le bus I2C, qui ne nécessite que deux fils de signal (SDA et SCL) et peut partager le bus avec d'autres périphériques I2C.
Schéma des broches de l'OLED SSD1309 (Module I2C)
Le module OLED I2C SSD1309 typique de 2,42 pouces expose quatre broches :
- GND — Connectez au rail de masse de l'Arduino.
- VCC — Alimentation. Branchez sur le 5 V de l'Arduino (ou sur le 3,3 V, selon le régulateur intégré du module).
- SCL — Ligne d'horloge I2C.
- SDA — Ligne de données I2C.

※ Note:
- L'ordre des broches varie selon les fabricants. Vérifiez toujours les étiquettes sérigraphiées sur votre module avant le câblage.
- Ce tutoriel a été vérifié avec l'écran OLED SSD1309 de 2,42 pouces de DIYables. D'autres modules basés sur le SSD1309 de 2,4 ou 2,42 pouces devraient fonctionner de manière identique.
Schéma de câblage — Arduino et OLED SSD1309 128 × 64
- Schéma de câblage entre Arduino et l'OLED SSD1309 de 2,42 pouces 128×64

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
- Photographie du câblage réel entre l'Arduino et l'OLED SSD1309 128×64

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Lors de l'utilisation d'une variante Arduino différente, les broches I2C changent. Le tableau ci-dessous indique les connexions correctes :
| OLED Module | Arduino Uno, Nano | Arduino Mega |
|---|---|---|
| Vin | 5V | 5V |
| GND | GND | GND |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Premiers pas — OLED SSD1309 avec Arduino
Étape 1 : Installer la bibliothèque DIYables_OLED_SSD1309
- Ouvrez l’IDE Arduino et cliquez sur l’icône Bibliothèques dans la barre latérale gauche.
- Tapez "DIYables_OLED_SSD1309" dans la zone de recherche et localisez la bibliothèque publiée par DIYables.
- Cliquez sur le bouton Installer.

- L'IDE vous invitera à installer la dépendance requise (Adafruit GFX Library). Cliquez sur Tout installer pour continuer.

Étape 2 : Modèle de programmation de base
Chaque sketch qui pilote le SSD1309 suit le même schéma : inclure les fichiers d'en-tête, créer un objet d'affichage, l'initialiser dans setup(), dessiner dans le tampon hors-écran, puis pousser le tampon vers l'écran avec display().
- Incluez les en-têtes requis:
- Définir les dimensions de l'écran (128 × 64 pour le module de 2,42 pouces) :
- Créez l'objet d'affichage (passez -1 lorsque aucune broche de réinitialisation n'est connectée):
- Initialiser l'affichage dans setup():
- Après cela, vous êtes libre d'appeler n'importe quelle fonction de dessin (clearDisplay(), drawPixel(), print(), etc.) puis oled.display() pour mettre à jour l'écran.
※ Note:
Tous les exemples de code de ce tutoriel ciblent le SSD1309 OLED 128×64 (2,42 pouces) et utilisent la bibliothèque DIYables_OLED_SSD1309.
Code Arduino — Bonjour le monde sur l'écran OLED SSD1309
Le point de départ le plus simple : imprimez quelques lignes de texte à différentes tailles.
Code Arduino — Afficher du texte sur l'écran OLED SSD1309
L’exemple suivant illustre davantage de fonctionnalités de texte — plusieurs tailles, le formatage des nombres et la macro F() pour économiser de la RAM.
Référence des fonctions d'affichage utiles
Ci-dessous se trouve une liste de référence rapide des fonctions les plus fréquemment utilisées lors de l’utilisation de l’OLED SSD1309 via la bibliothèque DIYables.
- oled.clearDisplay() — effacer le tampon d'image (tous les pixels éteints).
- oled.display() — transférer le tampon vers l'écran OLED afin que les modifications soient visibles.
- oled.drawPixel(x, y, color) — allumer ou éteindre un pixel individuel.
- oled.setTextSize(n) — mettre à l'échelle la police par le facteur *n* (1 = 6×8, 2 = 12×16, …, jusqu'à 8).
- oled.setCursor(x, y) — déplacer le curseur de texte vers les coordonnées en pixels *(x, y)*.
- oled.setTextColor(SSD1309_PIXEL_ON) — couleur du texte uniquement (l'arrière-plan est transparent).
- oled.setTextColor(SSD1309_PIXEL_OFF, SSD1309_PIXEL_ON) — texte avec une couleur d'arrière-plan explicite.
- oled.println("message") — afficher une chaîne et passer à la ligne suivante.
- oled.println(number) — afficher un entier en décimal.
- oled.println(number, HEX) — afficher un entier en hexadécimal.
- oled.startscrollright(start, stop) — défilement matériel vers la droite entre la page *start* et la page *stop*.
- oled.startscrollleft(start, stop) — défilement matériel vers la gauche.
- oled.startscrolldiagright(start, stop) — défilement matériel en diagonale vers la droite.
- oled.startscrolldiagleft(start, stop) — défilement matériel en diagonale vers la gauche.
- oled.stopscroll() — arrêter tout défilement matériel actif.
- oled.setContrast(value) — régler la luminosité de l'affichage (0–255).
- oled.dim(true/false) — diminuer rapidement la luminosité de l'affichage jusqu'au minimum ou restaurer le contraste précédent.
- oled.invertDisplay(true/false) — inversion des couleurs au niveau matériel (pixels allumés ↔ pixels éteints).
Comment centrer verticalement et horizontalement le texte sur l'écran OLED SSD1309
Voir Comment centrer verticalement et horizontalement sur un OLED
Code Arduino — Dessiner des formes sur l'écran OLED SSD1309
Parce que la bibliothèque DIYables_OLED_SSD1309 étend Adafruit_GFX, vous obtenez un ensemble complet de primitives de dessin de formes : pixels, lignes, rectangles, rectangles remplis, cercles, cercles remplis, triangles, triangles remplis et rectangles arrondis. Le sketch ci-dessous parcourt tous ces éléments avec des démos animées.
Code Arduino — Défilement matériel sur OLED SSD1309
Le SSD1309 dispose d'un moteur de défilement intégré qui déplace le contenu de l'affichage sans utilisation du processeur. La bibliothèque DIYables expose quatre directions de défilement : droite, gauche, diagonale-droite et diagonale-gauche. Chacune prend un paramètre de page de départ et d'arrêt (les pages sont des bandes horizontales de 8 pixels de haut numérotées de 0 à 7 sur un écran de 64 pixels de haut).
※ Note:
Appelez toujours display() pour pousser votre contenu sur l'écran OLED avant de commencer un défilement. Évitez de dessiner du nouveau contenu pendant que le défilement est actif — appelez stopscroll() d'abord.
Code Arduino — Afficher une image bitmap sur l'OLED SSD1309
Pour afficher une bitmap sur l'écran OLED SSD1309, vous devez d'abord convertir votre image en un tableau d'octets C. Utilisez l'outil en ligne gratuit image2cpp online tool pour ce faire :
- Téléchargez votre image (PNG, JPG, BMP, etc.).
- Définissez la taille du canvas à 128×64 (ou plus petite).
- Choisissez Code Arduino comme format de sortie.
- Copiez le tableau généré dans votre sketch.

L’exemple ci-dessous alterne entre une icône en forme de cœur 16×16 et un logo DIYables en pleine largeur:
※ Note:
- Les dimensions du bitmap ne doivent pas dépasser la résolution de l'écran (128×64 pour le module de 2,42 pouces).
Code Arduino — Contraste et réduction de la luminosité sur l'OLED SSD1309
Le SSD1309 prend en charge 256 niveaux de contraste (0 à 255). La bibliothèque DIYables offre setContrast() pour un contrôle fin et dim() pour basculer rapidement entre la luminosité minimale et le niveau configuré précédemment.
Code Arduino — Polices externes personnalisées pour l'OLED SSD1309
La bibliothèque Adafruit GFX est livrée avec des dizaines de polices FreeFont évolutives (Sérif, Sans, Mono — chacune en Regular, Bold, Italic et quatre tailles). Vous pouvez activer l'une d'entre elles sur l'afficheur SSD1309 en incluant l'en-tête correspondant et en appelant setFont().
※ Note:
- Lorsqu'une police externe est active, la coordonnée Y du curseur se réfère à la ligne de base du texte, et non au coin supérieur gauche. Cela diffère de la police intégrée 5×7.
- Les polices externes sont stockées dans la mémoire flash (PROGMEM). Sur les cartes AVR à mémoire limitée (Arduino Uno = 32 ko de mémoire flash), utilisez-les avec parcimonie.
Dépannage de l'OLED SSD1309
Si rien n'apparaît sur l'OLED SSD1309 de 2,42 pouces après avoir téléversé votre croquis, effectuez les vérifications suivantes :
- Vérifiez le câblage — confirmez que SDA, SCL, VCC et GND sont connectés aux broches Arduino correctes.
- Confirmez le contrôleur — cette bibliothèque est conçue pour le SSD1309. Si votre module utilise un contrôleur différent (par exemple SH1106), il ne répondra pas correctement.
- Vérifiez l'adresse I2C — la plupart des modules SSD1309 sont par défaut à 0x3C, mais certains utilisent 0x3D. Exécutez le sketch de balayage I2C ci-dessous pour détecter l'adresse réelle:
Sortie attendue du moniteur série lorsque le SSD1309 est détecté :
- Assurez-vous que display() est appelé — le SSD1309 utilise une mémoire tampon de trame. Les fonctions de dessin ne modifient que le tampon dans la RAM; rien n'apparaît à l'écran tant que vous n'appelez pas oled.display().
- Vérifiez l'alimentation — le module de 2,42 pouces consomme plus de courant que les petits écrans OLED. Assurez-vous que votre source d'alimentation peut fournir un courant suffisant (généralement 20 à 40 mA à pleine luminosité).