Post

Raspbian Lite + TFT 2"8 Tactile + LXDE

Raspbian Lite + TFT 2"8 Tactile + LXDE

Raspbian Lite + TFT 2"8 Tactile + LXDE

Raspberry PI

Bootez votre Raspberry Pi 3 sur une clé USB
Installation raspbian lite sur SDCard
Ajout d’un disque SSD en liaison USB
Bug sur boot disque (sans SDCard)
Boot sur SDCard et root sur SSD

Locales : fr_FR.UTF-8 -> dpkg-reconfigure locales
TimeZone : Europe/Paris -> dpkg-reconfigure tzdata
Clavier /etc/default/keyboard -> XKBLAYOUT="fr" Journal systemd ,pour avoir les lignes affichées non tronquées, ajouter au fichier ~/.bashrc -> export SYSTEMD_LESS=FRXMK journalctl
Ajouter utilisateur au groupe systemd-journal pour donner les droits de lecture -> sudo usermod -a -G systemd-journal xino
Pour la prise en compte , il faut se déconnecter puis se reconnecter

TFT LCD 2.2 (2.8 + touch screen) serial SPI TFT

Connexion matérielle

ILI9340

Raspberry PI/Afficheur SPI TFT LCD 2.2p (ILI9340)

RPI Aff. Couleur RPI désignation
21 MISO Jaune SPI_MISO GPIO9
12 Led Orange GPIO_GEN1 GPIO18
23 SCLK Violet SPI_CLK GPIO11
19 MOSI Bleu SPI_MOSI GPIO10
18 D/C Gris GPIO_GEN5 GPIO24
22 Reset Brun GPIO25
24 CS Vert SPI_CE0 GPIO8
25 GND Noir - alimentation
17 +3.3v/Vcc Rouge + alimentation

Features:

  • Compatible with Raspberry Pi B+ and B
  • Supports Raspbian Operating system
  • 65K colors and 320x240 Pixel Resolution
  • Powered directly off Raspberry Pi
  • Display full GUI output / primary output
  • High Speed 48MHz SPI connection
  • 25 Frames per second
  • Integrated ILI9341 TFT LCD Driver
  • Integrated 4-wire Resistive Touch Panel and XPT2046 Driver

ILI9341+Touch Screen

Raspberry PI/TouchScreen SPI TFT LCD 2.8p (ILI9341)

RPI Aff. Couleur RPI désignation
11 T_IRQ Vert GPIO_GEN0 GPIO17
  T_D0 = MISO    
  T_DIN = MOSI    
26 T_CS (CS1) Blanc SPI_CE1 GPIO7
  T_CLK = SCLK    
21 MISO Jaune SPI_MISO GPIO9
12 Led Orange GPIO_GEN1 GPIO18
23 SCLK Violet SPI_CLK GPIO11
19 MOSI Bleu SPI_MOSI GPIO10
18 D/C Gris GPIO_GEN5 GPIO24
22 Reset Brun GPIO25
24 CS Vert SPI_CE0 GPIO8
25 GND Noir - alimentation
17 +3.3v/Vcc Rouge + alimentation

Module SPI

Activation du module SPI (en mode su)

1
2
3
4
5
  sudo nano /boot/config.txt
  # Ajouter en fin de fichier
  dtparam=spi=on
  # Redémarrer
  sudo reboot

Vérifier chargement module SPI
SPI est actif si /dev/spidev0.0 et /dev/spidev0.1 existent.

Noyau et modules

Raspbian Jessie intègre nativement le module fbtft
Problème: le module fbtft ne se charge pas au démarrage

Solution: Modifier le fichier /etc/rc.local pour y ajouter le chargement du module (avant exit 0)

/etc/rc.local

1
2
# affichage liaison spi
exec /sbin/modprobe fbtft_device name=adafruit22a speed=48000000 rotate=90 verbose=1

Description:

  • name permet de préciser le module suivant le modèle d’écran
    • TFT 2”2 ILI9340 module adafruit22a
    • TFT 2”8 ILI9341 + touch screen module adafruit28
  • verbose=1 indique que des informations complémentaires doivent être retournées
  • La vitesse du bus SPI (32Mhz par défaut) a été augmentée en ajoutant l’option speed au module fbtf_device (ex: 48000000 pour 48Mhz) : fbtft_device name=adafruit22a speed=48000000
  • Le passage du mode portrait 240x320 en mode paysage 320x240 avec l’option rotate=90 : fbtft_device name=adafruit22a speed=48000000 rotate=90

Redémarrer

1
sudo reboot

L’écran s’allume en restant vide et noir , le noyau nous indique la configuration utilisée

1
2
3
4
5
6
7
8
9
10
11
$ dmesg

[...]
[   17.435539] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   17.436995] spidev spi0.0: Deleting spi0.0
[   17.437527] fbtft_device: GPIOS used by 'adafruit28':
[   17.437534] fbtft_device: 'reset' = GPIO25
[   17.437537] fbtft_device: 'dc' = GPIO24
[   17.437539] fbtft_device: 'led' = GPIO18
[   17.445501] fb_ili9341: module is from the staging directory, the quality is unknown, you have been warned.
[   17.742294] graphics fb1: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB DMA buffer memory, fps=20, spi0.0 at 48 MHz

Le système utilise un mécanisme appelé “framebuffer” qui est une représentation mémoire des pixels qui compose l’écran.
Le raspberry Pi dispose déjà d’un périphérique de ce type /dev/fb0 , l’affichage connecté à la prise HDMI de la carte.
fbset nous retourne ses caractéristiques

1
$ fbset
1
2
3
4
5
mode "656x416"
    geometry 656 416 656 416 32
    timings 0 0 0 0 0 0 0
    rgba 8/16,8/8,8/0,8/24
endmode

Nous pouvons faire la même opération pour notre afficheur /dev/fb1

1
$ fbset -fb /dev/fb1
1
2
3
4
5
6
mode "320x240"
    geometry 320 240 320 240 16
    timings 0 0 0 0 0 0 0
    nonstd 1
    rgba 5/11,6/5,5/0,0/0
endmode

Avec la philosophie UNIX qui nous dit que “tout est fichier” , on peut tester de façon simple le fonctionnement de l’écran
Comme le “framebuffer” est un fichier (/dev/fb1) ,il suffit d’y écrire des données aléatoires pour qu’une myriade de pixels de couleurs variables s’affiche:

1
2
$ cat /dev/urandom > /dev/fb1
   cat: erreur d'écriture: Aucun espace disponible sur le périphérique

On prend des données aléatoires (générateur sans fin /dev/urandom) pour les copier dans l’afficheur (/dev/fb1) et quand l’afficheur est rempli , on sort en erreur.

Configuration système

Utiliser le périphérique d’affichage comme écran du système

Pour que Linux affiche les informations de démarrage et une console sur l’écran , nous devons regarder le fichier cmdline présent sur la partition FAT de la carte SD.
Editer le fichier /boot/cmdline.txt

1
2
3
$ sudo nano /boot/cmdline.txt 
# ajouter les options en fin de ligne
fbcon=map:10 fbcon=font:VGA8x8

On précise que l’on souhaite une console et une police de caractères avec ce nouveau framebuffer

Redémarrage , pour voir s’afficher les messages à l’écran (dur dur la lecture …)

Les options font pour la police et map pour la correspondance

L’option map permet d’établir la correspondance entre le terminal tty et le périphérique “framebuffer” , nous avons choisi 10

  • premier terminal tty1 –> fb1
  • second terminal tty2 –> fb0 (sortie HDMI)
  • pour le reste on boucle :
    • tty3 –> fb1 , tty4 –> fb0 , etc…

Si l’on ne veut pas de la sortie HDMI (fb0) ,positionner l’option map:1 et tous les terminaux tty seront associés au mini-écran (la bascule entre tty se fait par Alt+[F1],Alt+[F2],etc…)

L’option rotate ne concerne que la rotation de la console et non du framebuffer qui est géré par le pilote

Améliorations

La faible résolution écran n’est pas idéale , on va reconfigurer le paquet “console-setup”

1
sudo dpkg-reconfigure console-setup

Laisser les valeurs par défaut:

  • UTF-8
  • Choix automatique du jeu de caractères adapté
  • OK
  • Terminus
  • 6x12 (uniquement tampon vidéo (« framebuffer »))

Redémarrer le système

Raspberry Pi 3

[GUIDE] Raspbian Lite with PIXEL/LXDE/XFCE/MATE/Openbox GUI

Configurer le raspberry avec l’utilitaire

Lancer le gestionnaire de configuration raspberry

1
sudo raspi-config

Tout se passe dans le menu 4 Localisation Options … qu’il faudra sélectionner à chaque paramétrage des options suivantes :

  • I1 Change Locale Set up language and regional settings to match your location : fr_FR.UTF-8 UTF-8
  • I2 Change Timezone Set up timezone to match your location : Europe/paris
  • I3 Change Keyboard Layout Set the keyboard layout to match your keyboard : PC105 fr
  • I4 Change Wi-fi Country Set the legal channels used in your country : FR

On redémarre le raspberry…

1
sudo reboot

Interface graphique sur Raspbian Lite

Cette partie se concentre sur l’installation d’une interface graphique sur Raspbian Lite. Pour avoir un interface GUI, nous avons besoin de ces 4 choses:

  1. Serveur d’affichage (Display Server) Xorg
  2. Environnement de bureau (Desktop Environment) Lightweight (PIXEL) ou Lightweight X11 Desktop Environment (LXDE) ou XFCE Desktop Environment (XFCE) ou MATE Desktop Environment (MATE)
  3. Gestionnaire de fenêtres (Window Manager) Openbox (PIXEL / LXDE) ou XFWM Window Manager (XFCE) ou Marco Window Manager (MATE)
  4. Gestionnaire de connexion (Login Manager) LightDM

Pour ceux qui connaissent Linux, vous vous demandez peut-être pourquoi le gestionnaire de connexion choisi ici est LightDM. Pour la plupart, il est léger et il semble bien. Mais une caractéristique qui, je crois, se démarque des autres gestionnaires de connexion est la possibilité d’exécuter le client Synergy sans erreurs. Synergy est un utilitaire qui vous permet d’utiliser la souris et le clavier d’un ordinateur (Windows, Mac ou Linux) et de le partager avec un autre ordinateur, dans ce cas, un Pi de framboise. Bien sûr, vous pouvez installer un autre gestionnaire de connexion si vous ne voulez pas LightDM.

A-Installation Xorg

1
sudo apt-get install --no-install-recommends xserver-xorg

Si vous installez uniquement xserver-xorg, vous ne pourrez pas lancer le serveur d’affichage Xorg à partir de la ligne de commande. Ce serait un problème si vous ne prévoyez pas d’installer un gestionnaire de connexion.Si tel est le cas, vous pouvez également installer xinit en tapant:

1
sudo apt-get install qxinit

B-Environnement bureau , au choix

1
2
3
4
sudo apt-get install raspberrypi-ui-mods            # Pixel
sudo apt-get install lxde-core lxappearance         # LXDE
sudo apt-get install xfce4 xfce4-terminal           # XFCE
sudo apt-get install mate-desktop-environment-core  # MATE

C-Gestionnaire de connexion pour les environnements LXDE,XFCE et MATE (lightdm intégré à Pixel)

1
sudo apt-get install lightdm

Si vous choisissez de ne pas installer un gestionnaire de connexion mais que vous avez installé xinit plus tôt, cela signifie que chaque fois que vous démarrez votre Pi, vous démarrez toujours dans la ligne de commande. Toutefois, l’environnement de bureau est déjà configuré pour vous et est prêt à être lancé à tout moment.

Redémarrez votre Pi. Une fois le démarrage terminé, vous verrez l’écran de connexion LightDM.
À partir de là, vous aurez besoin d’utiliser à la fois un clavier et une souris.
Connectez-vous et vous devriez maintenant voir le bureau PIXEL, LXDE, XFCE ou MATE!

si aucun gestionnaire de connexion n’a été installé, connectez-vous simplement via la ligne de commande! À tout moment, vous pouvez lancer le serveur d’affichage Xorg en tapant: startx

Sélection afficheur LCD

/usr/share/X11/xorg.conf.d/99-fbturbo.conf , remplacer /dev/fb0 par /dev/fb1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# This is a minimal sample config file, which can be copied to
# /etc/X11/xorg.conf in order to make the Xorg server pick up
# and load xf86-video-fbturbo driver installed in the system.
#
# When troubleshooting, check /var/log/Xorg.0.log for the debugging
# output and error messages.
#
# Run "man fbturbo" to get additional information about the extra
# configuration options for tuning the driver.

Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb1"

        Option          "SwapbuffersWait" "true"
EndSection

écran tactile

dtoverlay

Les paramètres de l’écran tactile (TouchScreen SPI TFT LCD 2.8p ILI9341 avec cint XPT2846 compatible ADS7846)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Name:   ads7846
Info:   ADS7846 Touch controller
Load:   dtoverlay=ads7846,<param>=<val>
Params: cs                       SPI bus Chip Select (default 1)
        speed                    SPI bus speed (default 2MHz, max 3.25MHz)
        penirq                   GPIO used for PENIRQ. REQUIRED
        penirq_pull              Set GPIO pull (default 0=none, 2=pullup)
        swapxy                   Swap x and y axis
        xmin                     Minimum value on the X axis (default 0)
        ymin                     Minimum value on the Y axis (default 0)
        xmax                     Maximum value on the X axis (default 4095)
        ymax                     Maximum value on the Y axis (default 4095)
        pmin                     Minimum reported pressure value (default 0)
        pmax                     Maximum reported pressure value (default 65535)
        xohms                    Touchpanel sensitivity (X-plate resistance)
                                 (default 400)

        penirq is required and usually xohms (60-100) has to be set as well.
        Apart from that, pmax (255) and swapxy are also common.
        The rest of the calibration can be done with xinput-calibrator.
        See: github.com/notro/fbtft/wiki/FBTFT-on-Raspian
        Device Tree binding document:
        www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt

Ajouter prise en charge de l’écran tactile en utilisant ads7846-overlay.dtb dans les “overlays” du dossier /boot/overlays/

1
sudo nano/boot/config.txt
1
2
3
[...]
dtoverlay=ads7846,cs=1,penirq=17,xmin=200,xmax=3900,ymin=200,ymax=3900,xohms=60,pmax=255,swapxy
[...]

Après reboot

1
2
3
4
dmesg |grep ads


[    9.217169] ads7846 spi0.1: touchscreen, irq 183

Ecran tactile , étalonnage

Touchscreen calibration with GUI

Vérifier la prise en charge du module basé sur la puce ADS7843 (compatible avec ads7846)

1
2
lsmod
  hwmon                  10552  1 ads7846

Ce module fournit les informations aus système /dev/input/event0 ,on peut tester

1
sudo cat /dev/input/event0

Puis toucher l’écran tactile avec un stylet, des éléments binaires sont générés sur l’écran.Ctrl C pour arrêter le test

tslib est une bibliothèque qui sert de couche d’abstraction commune pour les événements sur écran tactile. Il comprend des filtres (par exemple pour lisser les événements et calibrer).
Installation des utilitaires de l’écran tactile

1
sudo apt install libts-bin

Pour utiliser ts_calibrate et ts_test, vous devez définir des variables d’environnement.
On passe en mode su (sudo)

1
2
3
sudo -s
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_FBDEVICE=/dev/fb1

Cela va créer une configuration sur la console courante.
Ensuite, lancez le processus d’étalonnage:

1
ts_calibrate

Cela affichera un écran avec un réticule et des instructions.
Touchez le centre de la croix avec votre stylet. Répétez la procédure jusqu’à la sortie du logiciel.

Tester l’étalonnage

1
ts_test

Cela affichera une croix que vous pouvez déplacer et glisser autour. Vous pouvez également passer en mode dessin .

N’oubliez pas de configurer les variables d’environnement, si vous exécutez la commande à partir d’une autre console.

Cet article est sous licence CC BY 4.0 par l'auteur.