Mise en oeuvre du bus I2C : piloter un afficheur OLED

Ce tutoriel explique comment mettre en œuvre un afficheur I2C (ou I2C) OLED avec MicroPython. Il est très facile d’utiliser un écran OLED avec MicroPython pour afficher des messages. Nous verrons dans cet exemple comment brancher l’écran sur le bus I2C, puis comment le piloter pour y envoyer des messages avec MicroPython. Pour l’exemple, nous utiliserons l’écran monochrome OLED, 192 x 32 pixels de Adafruit, cependant tous les écrans intégrant le contrôleur SSD1306 sont compatibles.

Qu’est-ce que l’I2C ?

I2C est l’acronyme de “Inter-Integrated Circuit” (en français : bus de communication intégré inter-circuits). Il s’agit d’un bus série fonctionnant selon un protocole inventé par Philips. Pour dialoguer sur un bus I2C, chaque module “esclave” qui s’y trouve branché est identifié par une adresse codée sur 7 bits afin de dialoguer avec le contrôleur maître intégré au STM32WB55.

Avec la prolifération des modules I2C, il pourrait arriver que deux ou plusieurs modules que vous auriez connectés sur un bus I2C aient la même adresse, ce qui conduirait inévitablement à des plantages. Pour éviter ce type de conflits, vous devrez consulter les fiches techniques de vos modules et, pour ceux qui le permettent, prendre soin de modifier (si nécessaire) leur adresse I2C, généralement codée dans leur firmware.

Le nombre maximum d’équipements est donc limité par le nombre d’adresses disponibles, 7 bits d’adressage et un bit R/W (lecture ou écriture), soit 128 périphériques, mais il dépend également de la capacité du bus (dont dépend la vitesse maximale du bus).

Le bus I2C utilise 4 broches : deux pour son alimentation (GND et VDD) et deux pour communiquer :

  • SDA (Serial Data Line) : ligne de données bidirectionnelle,
  • SCL (Serial Clock Line) : ligne d’horloge de synchronisation bidirectionnelle.

Ces 2 lignes sont tirées au niveau de tension VDD à travers des résistances de tirage (ou de pull-up en anglais).

Vous trouverez plus d’informations sur la page Wikipédia dédiée à l’I2C.

Matériel requis

  1. La carte NUCLEO-WB55
  2. Un afficheur avec un contrôleur SSD1306

Voici comment brancher l’écran OLED :

  • D15=SCL
  • D14=SDA
oled

Le code MicroPython

Les scripts présentés ci-après sont disponibles dans la zone de téléchargement. Lorsque vous aurez terminé le téléchargement, il faudra transférer le fichier dans le répertoire du périphérique PYBLASH.

# Objet du script :
# Ecrire un texte sur un afficheur OLED contrôlé par un SSD1306.
# Démonstration de mise en oeuvre du bus I2C.

from machine import Pin, I2C # Classes pour piloter les entrées-sorties et le bis I2C
import ssd1306 # Classe pour piloter l'afficheur
from time import sleep_ms

# Initialisation du périphérique I2C
i2c = I2C(1)

# Pause d'une seconde pour laisser à l'I2C le temps de s'initialiser
sleep_ms(1000)

# Paramétrage des caractéristiques de l'écran
largeur_ecran_oled = 128
longueur_ecran_oled = 32
oled = ssd1306.SSD1306_I2C(largeur_ecran_oled, longueur_ecran_oled, i2c)

# Envoi du texte à afficher sur l'écran OLED
oled.text('MicroPython OLED!', 0, 0)
oled.text('    I2C   ', 0, 10)
oled.text('Trop facile !!!', 0, 20)
oled.show()