jeudi 11 août 2022

Utilisation d'un écran OLED SPI SSD1306 avec Arduino

Dans cet article, nous explorons l'utilisation d'un écran OLED SPI SSD1306 avec un Arduino.

OLED signfie "organic light-emitting diode": chaque pixel de l'écran peut s'allumer comme s'il s'agissait d'une LED (par opposition à d'autres technologies d'affichage qui nécessitent un rétroéclairage). Ces petits écrans monochromes ne coûtent pas cher et offrent un excellent contraste peu importe l'éclairage ambiant. 


J'ai fait mes tests avec un afficheur dont la résolution est 128 par 64 pixels (c'est la résolution la plus fréquente). 

Jusqu'à tout récemment, j'avais exclusivement utilisé des écrans OLED qui utilisaient une interface I2C: 4 connecteurs étaient suffisants pour les faire fonctionner. Les modèles SPI, qui sont en principe plus rapides, comportent 7 connecteurs.

Les broches de mon afficheur sont identifiées de cette façon:

  • GND (la masse)
  • VCC (alimentation qui, sur ce modèle, peut être de 5 V ou de 3,3 V)
  • D0 : qui est en fait le signal d'horloge SPI (SCLK)
  • D1: qui transmet les infos du microcontrôleur vers l'écran (MOSI)
  • RES: reset
  • DC: permet permuter entre les modes "data" ou "command"
  • CS: "chip select", essentiel si plusieurs appareils sont branchés sur le même bus SPI.


Par défaut, l'afficheur fonctionne en "SPI à 4 fils". Mais il est possible de le transformer en afficheur "SPI à 3 fils" ou I2C en modifiant la configuration des résistances au verso de l'écran.

Connexions de l'écran OLED à un Arduino Uno

J'ai fait mes premiers tests avec un Arduino Uno, et j'ai branché l'écran OLED de cette façon:

  • GND de l'écran OLED : GND de l'Arduino Uno
  • VCC de l'écran OLED: sortie 5 V de l'Arduino Uno
  • D0 : broche 13 de l'Arduino Uno
  • D1: broche 11 de l'Arduino Uno
  • RES: broche 8 de l'Arduino Uno
  • DC: broche 9 de l'Arduino Uno
  • CS: broche 10 de l'Arduino Uno

Les broches RES, DC et CS peuvent être branchées à n'importe quel broche de l'Arduino: nous les définissons dans le sketch. Les broches D0 et D1, toutefois, doivent être connectées aux broches dédiées à la communications SPI.

Autres cartes

J'ai aussi fait des tests sur d'autres cartes (ESP8266, ESP32, STM32), également programmées au moyen de l'IDE Arduino. J'indique ici les numéros des broches utilisées pour D0 et D1 (SCLK et MOSI):

ESP8266:   D0: GPIO14  et D1: GPIO13
ESP32:  D0: 18  et D1: 23
STM32 "Blue Pill":  D0: A5 et D1: A7

Vous branchez RES, DC et CS où vous voulez, en n'oubliant pas de modifier le sketch en conséquence.


Bibliothèque u8g2 ou Adafruit?

Les deux bibliothèques les plus utilisées pour piloter un écran OLED avec une carte Arduino sont u8g2 et la bibliothèque d'Adafruit. Chacune des deux constitue un excellent choix.

J'ai testé les deux bibliothèques avec un Arduino Uno, un ESP32, un ESP8266 et un STM32 "Blue Pill". Tout a fonctionné correctement avec la bibliothèque u8g2, mais je ne suis pas parvenu à faire fonctionner la Blue Pill avec la bibliothèque d'Adafruit (l'écran demeurait noir).

Il me semble que la bibliothèque d'Adafruit est un peu plus conviviale, et que u8g2 présente un plus grand choix de polices de caractères (incluant des polices accentuées, ce qui est bien pratique en français).

Évidemment, chacune des deux bibliothèques est accompagnée d'un grand nombre de fichiers d'exemples qui permettent de visualiser rapidement plusieurs résultats possibles.

Vous trouverez ci-dessous deux sketches qui sont assez similaire: ils affichent un peu de texte et quelques formes géométriques simples, ainsi qu'une illustration bitmap. Le premier sketch est conçu pour être utilisé avec la bibliothèque u8g2, alors que l'autre nécessite la bibliothèque d'Adafruit.

Sketch utilisant la bibliothèque u8g2

Ce premier sketch utilise la bibliothèque u8g2, que vous pouvez installer à partir du gestionnaire de bibliothèques.

-

-

Sketch utilisant la bibliothèque Adafruit

La bibliothèque Adafruit SSD1306 nécessite également la bibliothèque Adafruit GFX. Les deux bibliothèques peuvent être installées dans le gestionnaire de bibliothèques.


-

-

Affichage d'un dessin bitmap

Les deux scripts ci-dessus affichent un dessin bitmap dont les données se trouvent au début du sketch. Pour transformer un dessin bitmap en données exploitables par un Arduino, plusieurs options sont possible: on peut utiliser un logiciel comme Gimp pour sauvegarder l'illustration sous la forme d'un fichier XBM qu'on  ouvre ensuite avec un éditeur de texte, ou on peut utiliser un outil en ligne comme celui-ci.


À lire également:

J'ai publié quelques articles concernant l'utilisation d'un écran OLED I2C SH1106: avec un Arduino Uno,  avec une carte ESP8266 ou ESP32, ou avec une carte STM32.

D'autres articles concernent l'utilisation d'autres afficheur avec un Arduino: Écran couleur ST7735,  afficheur Nokia 5110, afficheur LCD 2 X 16, etc.


Yves Pelletier (Facebook)

Aucun commentaire:

Enregistrer un commentaire