samedi 23 novembre 2019

Écran couleur SPI ST7735 et Raspberry Pi

Je vous explique aujourd'hui comment j'ai procédé pour contrôler un petit écran couleur SPI ST7735 ("KMR-1.8 SPI") de 128 * 160 pixels, branché à un Raspberry Pi, grâce à un script en Python.


Connexions

Il existe plusieurs modèles d'écrans couleurs basés sur le contrôleur ST7735, et le nom des broches peut varier d'un modèle à l'autre.  Le modèle que j'ai utilisé comporte 16 connecteurs (mais 9 d'entre eux suffisent à faire fonctionner l'écran).




J'ai branché l'écran à mon Raspberry Pi 2 de la façon suivante:
  • Broche GND de l'écran - Une des broches GND du Raspberry Pi
  • Broche VCC de l'écran - Une des broches 5V du Raspberry Pi
  • Broches NC de l'écran - Pas branchées
  • Broche AO (ou DC/RS) de l'écran - Broche GPIO25 du Raspberry Pi
  • Broche SDA de l'écran - Broche GPIO10 du Raspberry Pi
  • Broche SCL de l'écran - Broche GPIO11 du Raspberry Pi
  • Broche CS de l'écran - Broche GPIO8 du Raspberry Pi
  • Broches SDA/MISO/MOSI/SD_CS de l'écran - Pas branchées (pour carte SD)
  • Broche LED+ de l'écran - Une des broches 3,3 V du Raspberry Pi
  • Broche LED- de l'écran - Une des broches GND du Raspberry Pi


Activation de SPI

Si ce n'est pas déjà fait, il est important d'activer le protocole SPI sur votre Raspberry Pi.  Pour ce faire, on ouvre "Configuration du Raspberry Pi" dans le menu "Préférences" de Raspbian.


Dans l'onglet, on coche "Activé" sur la ligne "SPI".



Installation de la bibliothèque

J'ai utilisée la bibliothèque Python ST7735, adaptée par Clement Skau à partir d'une bibliothèque qu'Adafruit avait conçue pour un autre modèle d'écran.

J'ai suivi à la lettre la procédure d'installation proposée sur la page github de la bibliothèque:

sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip python-imaging python-numpy
sudo pip install RPi.GPIO
sudo pip install Adafruit_GPIO
git clone https://github.com/cskau/Python_ST7735
cd Python_ST7735
sudo python setup.py install

Le répertoire Python_ST7735 comporte un dossier "Examples". Le script "image.py" qui s'y trouve constitue une façon simple et rapide de vérifier le fonctionnement correct de l'écran (ça affiche à l'écran l'image contenue dans le fichier "cat.jpeg").



Vous pouvez facilement modifier ce script afin d'afficher une image de votre choix.



Le script "shapes.py", toutefois, n'est pas tout à fait au point: il a visiblement été conçu pour un écran ayant une résolution différente, et on ne voit à l'écran qu'une partie de l'image construite.

Exemple de script en python

Puisque la bibliothèque utilise la Python Imaging Library (PIL), c'est assez facile de trouver de la documentation pour apprendre à construire des images pouvant être affichées à l'écran.

Les coordonnées sont définies selon l'orientation en mode portrait; la bibliothèque ne semble pas comporter une façon simple de définir une orientation en mode paysage.

Dans le script ci-dessous, j'affiche quelques formes géométriques, puis j'écris l'adresse IP du Raspberry Pi (utile pour travailler en mode "headless") ainsi que la date et l'heure.





-

-

Inversion du bleu et du rouge!

Sur certains modèles d'écran ST7735, les couleurs seront incorrectes: ce qui devrait être rouge apparaît en bleu, et ce qui devrait être bleu apparaît en rouge!  (C'est un écran "bgr" plutôt que "rgb"). Si vous constatez ce phénomène sur votre écran, la solution consiste à modifier la bibliothèque Python_ST7735:
  • Ouvrez le fichier /Python_ST7735/ST7735/ST7735.py avec un éditeur de texte.
  • À la ligne 241, remplacez self.data(0xC8) par self.data(0xC0) .
  • Retournez dans le répertoire Python_ST7735 et tapez à nouveau la commande "sudo python setup.py install"


À lire aussi

Cet écran couleur ST7735 peut également être contrôlé par un Arduino, un STM32, un ESP8266 ou un ESP32.

Parmi les nombreux articles de ce blog portant sur le Raspberry Pi, certains décrivent l'utilisation d'autres modèles d'afficheurs: écran OLED SH1106, écran Nokia 5110,  afficheur LCD 16 X 2...

Yves Pelletier   (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire