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:
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.
Pour installer la bibliothèque, les lignes de commande suivantes ne sont probablement pas nécessaires si vous utilisez une version récente de Raspberry Pi OS (dans mon cas, tout était déjà installé). Mais ça ne coûte rien de vérifier:
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 RESET de l'écran - Broche GPIO25 du Raspberry Pi
- Broche AO (ou DC/RS) de l'écran - Broche GPIO24 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 SCK/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.
Pour installer la bibliothèque, les lignes de commande suivantes ne sont probablement pas nécessaires si vous utilisez une version récente de Raspberry Pi OS (dans mon cas, tout était déjà installé). Mais ça ne coûte rien de vérifier:
sudo apt-get update
sudo apt-get install build-essential python3-dev python3-smbus python3-pip python3-pil python3-numpy
sudo pip3 install RPi.GPIO
Les 4 lignes suivantes, par contre, sont essentielles:
sudo pip3 install Adafruit_GPIO
git clone https://github.com/cskau/Python_ST7735
cd Python_ST7735
sudo python3 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 python3 setup.py install"
À lire aussi
Cet écran couleur ST7735 peut également être contrôlé par un Raspberry Pi Pico , 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 (Twitter, Facebook)
Testé sur un rpi zero wh, fonctionne vraiment bien
RépondreSupprimerMerci
Bonjour. J'ai acheté le même petit écran que vous (Hailege 1.8 "pouce ST7735R SPI 128 * 160 TFT) et comme vous je tente d'y afficher quelque chose depuis un raspberry Pi 4B.
RépondreSupprimerJ'ai donc suivi attentivement votre tuto, j'ai vérifié au moins 20 fois les branchements, mais je n'arrive qu'a avoir un écran blanc (qui signifie juste que led- et led+ sont bien branchés).
En cherchant, je suis tombé sur un script qui permet de tester que la communication RX/TX se fait bien en SPI (https://github.com/torvalds/linux/blob/master/tools/spi/spidev_test.c) il semble que cette communication ne se fait pas bien ... (avec le loopback c ok, donc c pas le Pi qui à un soucis) et j'ai aussi testé avec un 2eme écran (j'en ai acheté 2), ca fait pareil ...
Impossible de trouver d'autre schéma de cablage que le votre (tout se réfère a l'Arduino mais pas au Pi).
Bref, au cas ou vous auriez une idée pour me dépanner svp ... Merci
vous avez autorisé la communication spi dans raspi config ?
Supprimer