J'ai expérimenté avec de minuscules modules d'affichage LCD TFT de 1,8 pouces d' Adafruit et de SainSmart comme écrans pour le Raspberry Pi .
Après pas mal de bidouillage du noyau Linux sur un pilote pour la puce de contrôleur LCD ST7735R, j'ai réussi à les faire fonctionner comme périphérique de console du Pi.
Démonstrations vidéo du système en action :
Photos d'applications framebuffer standard exécutées à l'écran : fbterm avec différentes tailles de police et mplayer lisant un clip vidéo à 24 images par seconde.



Les modules d'affichage LCD TFT 1,8" à bus SPI d'Adafruit et de SainSmart sont fonctionnellement équivalents, à ceci près que le module SainSmart supporte une fréquence de bus SPI bien plus élevée que celui d'Adafruit (32 MHz contre 4 MHz lors de mes tests). Fabien Royer a démontré que cette différence est due à un convertisseur de niveau lent dans le module Adafruit.
Le pilote noyau st7735fb d'origine a été développé par Matt Porter, puis amélioré par Lady Ada, Neil Greatorex et moi-même. Je suis parti de la version proposée par Neil du pilote st7735fb de Matt, que j'ai extraite du dépôt noyau raspberrypi de Lady Ada. J'ai appliqué cette version au noyau actuel de Raspberry Pi 3.2.27+, puis j'ai apporté plusieurs améliorations au pilote st7735fb (et corrigé un bug dans le pilote SPI bcm2708). Depuis, j'ai collaboré avec Neil pour développer d'autres améliorations et j'ai porté le pilote vers le noyau Raspberry Pi 3.6.y à venir.
Détails techniques
Câblage
Le câblage reliant le Raspberry Pi au module d'affichage est le suivant (ou utilisez une carte porteuse comme indiqué ci-dessous) :
| En-tête RasPi P1 | Écran TFT Adafruit 1,8" | Écran TFT SainSmart 1,8" |
|---|---|---|
| Alimentation 5V | LITE | |
| MISO | ||
| GPIO 11 (SCLK) | SCK | SCL |
| GPIO 10 (MOSI) | MOSI | SDA |
| GPIO 8 (CE0) * | TFT_CS | CS |
| CARTE_CS | ||
| GPIO 24 ** | D/C | RS/DC |
| GPIO 25 ** | RÉINITIALISER | RES |
| Alimentation 5V | VCC | VCC |
| Sol | Gnd | GND |
* Ma version du pilote st7735fb_map permet de configurer CE0 (SPI 0.0) ou CE1 (SPI 0.1). ** Ma version permet de configurer n'importe quelle broche GPIO pour l'alimentation (D/C) et la réinitialisation (RESET). *** Comme je n'utilise pas le lecteur de carte microSD situé à l'arrière des modules d'affichage, les broches restantes ne sont pas connectées.
Clonez mon dépôt raspberrypi-linux
Clonez mon dépôt raspberrypi-linux, puis sélectionnez la branche basée sur la version 3.2.27 ou la branche basée sur la version 3.6.y (exécutez « uname -a » sur votre Pi si vous n'êtes pas sûr de celle dont vous avez besoin) :
$ git clone git://github.com/kamalmostafa/raspberrypi-linux.git $ cd raspberrypi-linux $ git checkout rpi-3.2.27+kamal-st7735fb -- OU -- $ git checkout rpi-3.6.y+kamal-st7735fb
Configuration de la compilation du noyau
Le nouveau pilote ST7735FB doit être activé dans la configuration de compilation de votre noyau. Les pilotes peuvent être compilés en tant que modules chargeables ou en tant que pilotes intégrés (la méthode intégrée est présentée ici) :
- Compilation croisée ?
- Si vous effectuez une compilation croisée de ce noyau, par exemple sur un système hôte Linux x86,
- Ajoutez ensuite vos paramètres de compilation croisée à chaque ligne « make » ci-dessous, par exemple :
- $ gagner
- bcmrpi_defconfig
Créez votre fichier .config initial (en utilisant cette méthode ou une autre) :
$ make bcmrpi_defconfig # ... ou autre chose pour créer un fichier .config
Personnalisez ensuite votre fichier .config comme suit :
$ sed -i /CONFIG_FB_ST7735/d .config $ sed -i /CONFIG_SPI_BCM2708/d .config $ make oldconfig
Vous serez invité à sélectionner plusieurs options concernant la configuration de votre panneau ST7735. Répondez aux questions comme indiqué ci-dessous ou tapez « ? » pour obtenir une brève description de chaque option.
Pilote de contrôleur SPI BCM2708 (SPI0) (SPI_BCM2708) [N/m/y/?] (NOUVEAU) O ... Prise en charge du framebuffer ST7735 (FB_ST7735) [N/m/y/?] (NOUVEAU) O Type de panneau ST7735 « onglet rouge » ? (FB_ST7735_PANEL_TYPE_RED_TAB) [O/n/?] (NOUVEAU) O Panneau ST7735 : RVB inversé ? (FB_ST7735_RGB_ORDER_REVERSED) [N/o/?] (NOUVEAU) N (ou Y si le rouge et le bleu sont inversés) Mappage du framebuffer ST7735 vers GPIO/SPI (FB_ST7735_MAP) [O/n/m/?] (NOUVEAU) O Numéro de broche GPIO RST ST7735 (FB_ST7735_MAP_RST_GPIO) [-1] (NOUVEAU) 25 Numéro de broche GPIO CC ST7735 (FB_ST7735_MAP_DC_GPIO) [-1] (NOUVEAU) 24 Numéro de bus SPI ST7735 (FB_ST7735_MAP_SPI_BUS_NUM) [0] (NOUVEAU) 0 Sélection de puce du bus SPI ST7735 (FB_ST7735_MAP_SPI_BUS_CS) [0] (NOUVEAU) 0 Fréquence d'horloge du bus SPI ST7735 (Hz) (FB_ST7735_MAP_SPI_BUS_SPEED) [4000000] (NOUVEAU) 4000000 (ou 32 000 000 pour SainSmart) Mode de bus SPI ST7735 (0, 1, 2 ou 3) (FB_ST7735_MAP_SPI_BUS_MODE) [0] (NOUVEAU) 0
Maintenant, exécutez la commande « make » et installez votre noyau comme d'habitude. (Vous n'êtes pas sûr de la procédure d'installation ? Consultez le tutoriel de Mark pour plus de détails).
Console et session de connexion avec fbcon/getty
Si vous compilez les pilotes st7735 en tant que pilotes intégrés (comme indiqué ci-dessus), vous pouvez ajouter ces options à la fin de la ligne dans /boot/cmdline.txt pour associer tty1 au panneau. Les messages de démarrage habituels du noyau de la console et la connexion getty normale via tty1 s'afficheront alors sur le panneau. (Consultez la documentation fbcon pour plus de détails.)
fbcon=map:10 fbcon=rotate:1 fbcon=font:ProFont6x11
Notez que con2fbmap fonctionne également ; il peut être utilisé pour reconfigurer dynamiquement les terminaux de la console après le démarrage.
Utilisation du panneau avec mplayer
Pour des performances optimales, redimensionnez votre film à la résolution native de l'écran (128 x 160). Exemple :
$ mplayer -vo fbdev2:/dev/fb1 -x 128 -y 160 -zoom votre_fichier_film.mp4
Méthode alternative de connexion avec fbterm
Le pilote st7735fb prend en charge fbcon , qui connecte l'écran en tant que tty1 et/ou autres terminaux virtuels. L'interface de connexion getty standard s'affichera donc sans configuration supplémentaire. La méthode alternative suivante, utilisant fbterm , fonctionne également, mais sa configuration est plus complexe.
Pour utiliser fbterm au lieu de la session de connexion fbcon/getty standard, créez le script fbterm-login suivant et modifiez le fichier /etc/inittab pour le lancer à la place de getty sur tty1 :
/sbin/fbterm-login#!/bin/bash # Exemple : fbterm-login fb1 tty1 export FRAMEBUFFER=/dev/$1 exec /usr/bin/fbterm -r 1 -- /bin/login < /dev/$2
modifier /etc/inittab ...
# 1:2345:respawn:/sbin/getty --noclear 38400 tty1 1:2345:respawn:/sbin/fbterm-login fb1 tty1
La rotation et la taille de la police de la session de terminal peuvent être modifiées en ajustant le commutateur de ligne de commande fbterm -r 1, ou en ajoutant par exemple -s 5.
Carte porteuse Texy « Pi TFT Shield »
Cette carte porteuse « Pi TFT Shield » disponible chez Texy offre un moyen pratique de connecter un module d'écran TFT de 1,8 pouce au Raspberry Pi :

La carte prend en charge plusieurs brochages de panneaux 1,8" différents, notamment Adafruit et SainSmart, et dispose de pastilles de montage pour trois boutons GPIO. Génial !