Utilisation d’un module d’affichage I2C OLED avec le Raspberry Pi

Utilisation d'un module d'affichage I2C OLED avec le Raspberry Pi

Les modules d’affichage OLED miniatures sont un excellent moyen d’ajouter un petit écran à vos projets Raspberry Pi. Ils sont disponibles en différentes tailles, mais les tailles courantes incluent 128 × 32 et 128 × 64 pixels. Les moins chers ont des pixels d’une seule couleur qui sont soit blancs, jaunes ou bleus. Mon appareil a des pixels blancs et utilise une interface I2C qui ne nécessite que quatre fils pour être connecté au Pi.

Dans ce tutoriel, je vais expliquer comment j’ai configuré mon module d’affichage OLED 0.96″ à l’aide de l’interface I2C du Pi. Une fois configuré, il est facile d’utiliser Python pour placer du texte, dessiner des formes ou même afficher des images et des animations simples.

Le module OLED

Mon module d’affichage OLED est un module d’affichage à LED LCD OLED série 128X64 I2C IIC SPI de 0,96″.

Écran I2C OLED 128x64 (avant)
Écran I2C OLED 128x64 (arrière)

Il a quatre broches. Deux sont pour l’alimentation (Vcc et Gnd) et deux pour l’interface I2C (SDA et SCL). L’en-tête peut avoir besoin d’être soudé avant de pouvoir l’utiliser.

Mettre à jour le système d’exploitation

Comme pour tous mes projets, j’ai commencé par créer une carte SD avec la dernière image Raspbian. Ensuite, je me suis assuré que c’était à jour en exécutant les commandes suivantes :

sudo apt update
sudo apt upgrade

Cette étape peut prendre quelques minutes s’il y a beaucoup de packages à mettre à jour, mais cela évite généralement une certaine frustration à l’avenir.

Configuration du module d’affichage

Mon écran avait quatre broches, deux pour l’alimentation et deux pour l’interface I2C.

Affichage I2C OLED et câblage GPIO Raspberry Pi

Je les ai connectés directement à l’en-tête GPIO du Raspberry Pi en utilisant le schéma suivant :

Broche OLED Broche GPIO Pi Remarques
Vcc 1 * 3.3V
Terre 14 ** Terre
SCL 5 I2C SCL
ADD 3 I2C SCA

* Vous pouvez connecter la broche Vcc à la broche 1 ou 17 car elles fournissent toutes deux 3,3 V.
** Vous pouvez connecter la broche Gnd aux broches 6, 9, 14, 20, 25, 30, 34 ou 39 car elles fournissent toutes la terre.

Activer l’interface I2C

L’interface I2C est désactivée par défaut, vous devez donc l’activer. Vous pouvez le faire dans l’outil raspi-config sur la ligne de commande en exécutant :

sudo raspi-config

Pour plus de détails sur cette étape, veuillez consulter ma façon d’activer l’interface I2C sur le poste Raspberry Pi.

Les bibliothèques suivantes sont peut-être déjà installées mais exécutez quand même ces commandes pour vous en assurer :

sudo apt install -y python3-dev
sudo apt install -y python-smbus i2c-tools
sudo apt install -y python3-pil
sudo apt install -y python3-pip
sudo apt install -y python3-setuptools
sudo apt install -y python3-rpi.gpio

Si vous utilisez Python 2, utilisez plutôt ces commandes :

sudo apt install -y python-dev
sudo apt install -y python-smbus i2c-tools
sudo apt install -y python-pil
sudo apt install -y python-pip
sudo apt install -y python-setuptools 

Je recommanderais d’utiliser Python 3 à moins que vous n’ayez une très bonne raison d’utiliser Python 2.

Trouver l’adresse du module d’affichage OLED

Avec les bibliothèques I2C installées, j’ai utilisé la commande i2cdetect pour trouver le module sur le bus I2C.

i2cdetect -y 1

et j’ai le résultat suivant :

Module d'affichage OLED I2C

C’était une bonne nouvelle car cela montrait que l’appareil avait été détecté avec une adresse de « 0x3c ». Il s’agit de l’adresse hexadécimale par défaut pour ce type de périphérique. Je n’ai aucune idée de la raison pour laquelle le PCB de l’appareil suggère que l’adresse est « 0x78 » alors qu’elle est clairement « 0x3c ».

Si vous avez un Model B Rev 1 Pi d’origine, tapez plutôt la commande suivante :

i2cdetect -y 0

Installer la bibliothèque Python OLED

Pour afficher du texte, des formes et des images, vous pouvez utiliser la bibliothèque Python Adafruit. Il devrait fonctionner avec tous les écrans basés sur SSD1306, y compris le leur Appareils 128×32 et 128×64.

Pour installer la bibliothèque, nous allons cloner le référentiel git d’Adafruit. Assurez-vous que git est installé en exécutant :

sudo apt install -y git

Clonez ensuite le dépôt à l’aide de la commande suivante :

git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

Une fois cela terminé, accédez au répertoire de la bibliothèque :

cd Adafruit_Python_SSD1306

et installez la bibliothèque pour Python 2 :

sudo python setup.py install

et/ou Python 3 :

sudo python3 setup.py install

Ce processus vous donnera la possibilité d’inclure la bibliothèque dans vos propres scripts Python.

Exemples de scripts Python

Nous sommes maintenant prêts à tester quelques exemples de scripts. Naviguez dans le répertoire « exemples » :

cd examples

Vous devriez y trouver un certain nombre d’exemples de scripts tels que :

  • animer.py
  • boutons.py
  • image.py
  • formes.py
  • stats.py

Ces exemples peuvent être exécutés en utilisant :

python shapes.py

ou en utilisant Python 3 :

python3 shapes.py

Les exemples devraient vous donner des écrans qui apparaissent dans les exemples ci-dessous :

Exemples d'écran I2C OLED

En modifiant ces scripts, vous pouvez créer vos propres graphiques avec des formes, des images et du texte en fonction de votre projet. Voyez si vous pouvez deviner quelles étaient les photos que j’ai téléchargées sur mon Pi à partir de Google Images !

Réglage de la taille de l’écran

Les exemples Adafruit supposent que vous avez un écran 128×32. Ils fonctionnent toujours avec un écran de 128×64 pixels mais il vaut mieux les changer avant de passer à quelque chose de plus compliqué. Pour ce faire, éditez simplement les scripts et désactivez la ligne de configuration 128×32 en plaçant un caractère # au début, et activez la ligne 128×64 en supprimant le caractère # au début. La section dans le script devrait maintenant ressembler à ceci :

Exemples Python d'affichage I2C OLED

Cette étape devient indispensable si vous souhaitez commencer à créer vos propres images à afficher à l’écran.

Création de nouvelles images

Vous avez donc essayé l’exemple image.py et vous vous êtes demandé comment créer vos propres images ? C’est assez simple si vous avez une application de retouche d’image telle que Photoshop ou GIMP. Je préfère utiliser GIMP car il est gratuit.

Idéalement, vous voulez que les images soient :

  • Résolution 128×64
  • Couleur 1 bit (c’est-à-dire noir et blanc)

Par défaut, l’exemple image.py convertira l’image en 1 bit mais il suppose que la résolution est correcte.

Vous remarquerez dans le script une ligne alternative qui redimensionne et convertit une image afin que vous puissiez charger des images sans vous soucier de leur taille et de leur couleur.

Charger l’image et convertir en couleur 1 bit :

image = Image.open('happycat_oled_64.ppm').convert('1')

Chargez une image, redimensionnez et convertissez en 1 bit :

image = Image.open('example.png').resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

La technique que vous utilisez dépend de vous. Le redimensionnement et la conversion prennent un temps de traitement supplémentaire, donc dans les applications hautes performances, vous alimentez mieux les images de script qui ont déjà été redimensionnées.

Redimensionner et convertir des images

Si vous souhaitez charger une image ou une photo alors chargez-la dans votre application graphique et procédez comme suit :

  • Charger l’image
  • Redimensionner/mettre à l’échelle à 128 × 64
  • Convertir en couleur 1 bit (monchrome)
  • Exporter en tant que fichier « .pbm » ou « .png »
  • Copiez sur votre Pi au même endroit que votre script Python
  • Mettez à jour le script Python pour utiliser votre nouveau fichier

L’exemple d’image Adafruit est un fichier « ppm » car il est en couleur bien qu’il soit converti en monochrome au moment où il est affiché à l’écran. Adafruit utilise ppm car la bibliothèque prend également en charge ses modules OLED couleur. Si vous n’avez pas d’écran couleur, vous pouvez passer en pbm ou en png.

Je préfère créer des fichiers « pbm » car ce sont des fichiers en noir et blanc et beaucoup plus petits. Cela signifie également que votre script Python n’a pas besoin de les convertir. La bibliothèque peut gérer les deux, assurez-vous simplement d’utiliser le nom de fichier et l’extension corrects dans vos scripts.

Augmentation de la vitesse du bus I2C

Si vous affichez plusieurs images par seconde, cela vaut la peine d’augmenter la vitesse du bus de l’interface car cela peut améliorer les performances. Veuillez consulter le message Changer la vitesse du bus Raspberry Pi I2C.

Dépannage

Si votre écran ne fonctionne pas, vous devez commencer au début de ce didacticiel et le parcourir. Voici quelques éléments à considérer :

  • Avez-vous activé I2C et installé « python-smbus » et « i2c-tools » ?
  • Les quatre connexions du module sont-elles correctes ? Avez-vous confondu SDA et SCL ?
  • « i2cdetect -y 1 » vous a-t-il donné l’adresse de l’affichage sur le bus I2C ?
  • Si votre écran utilise une adresse autre que 0x3c, avez-vous ajusté le script Python ?

Acheter un écran OLED miniature

Ces écrans sont disponibles auprès d’un certain nombre de détaillants, alors jetez un œil et choisissez celui qui convient à votre emplacement :

Lisez attentivement les descriptions car certains modules d’affichage OLED utilisent l’interface SPI plutôt que I2C. C’est bien, mais vous devrez suivre un didacticiel différent pour utiliser ce style.

Certains des liens de produits sur cette page sont des liens d’affiliation. Je reçois une petite commission basée sur les achats effectués via ces liens. Le prix que vous payez est le même.