4
Bonjour,

Et pour commencer bonne fête à tous, j’espère que noël à était riche en cadeau et en Raspberry Pi. Pour ma part, j'attends des objets geek, mais on en parlera le moment venu. Aujourd'hui je viens poster mon test complet de l'écran de 2.8" TFT fait par texy. 
Je vais aussi dans un premier temps vu que cela n'existe pas encore faire un petit tuto en français, celui-ci ne sera que l’adaptation de l'existant en anglais. Et je finirai donc par vous expliquer tous les avantages et inconvénients de cette solution.

I-Présentation du package de Texy :

J'ai choisi de commander cet écran en particulier, car dans un premier temps l'écran n'est pas à câbler soit même, c'est-à-dire que Texy à conçu une carte sur laquelle il vient souder l’écran, autre avantage de cette carte elle permet d'avoir accès à tous les GPIO toujours disponible. Ensuite toujours compris dans le package, une boite qui permet simplement de tout intégrer facilement et de protéger notre Raspberry Pi.







II-Installation :

Pour l'installation rien de bien compliquer non plus sauf pour les personnes qui ne manipule pas beaucoup la langue de Shakespeare. Donc je vais traduire l'installation.

Dans un premier temps il faut activer le SPI, deux solutions soit par raspi-config et dans advanced activer SPI soit par commande il faut et éditer ce fichier :
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Et penser à mettre un # devant la ligne SPI.
Un dé gros problèmes avec cet écran c'est les mises à jour on y reviendra plus tard, pour le moment il faut installer un rpi-update spécialement conçu :
sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update

maintenant, on déplace ou supprime ce répertoire pour ne pas avoir d'erreur :
sudo mv /lib/modules/$(uname -r) /lib/modules/$(uname -r).bak

On installer le nouveau firmware et l'on redémarre :
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-updatesudo shutdown -r now

Une fois redémarrer on utilise 'modprobe' pour configurer l'écran :
sudo modprobe fbtft dma
sudo modprobe fbtft_device name=hy28a rotate=270 speed=48000000 fps=50

A ce point l'écran est devenu noir, l'écran est donc bien initialisé.
On configurer maintenant le tactile :
sudo modprobe ads7846_device pressure_max=255 y_min=190 y_max=3850 gpio_pendown=17 x_max=3850 x_min=230 x_plate_ohms=100 swap_xy=1 verbose=3

sinon pour le que le module se charge automatiquement au démarrage il faut faire ceci :
sudo nano /etc/modules

et ajoutez-y :
fbtft dma
fbtft_device name=hy28a rotate=270 speed=48000000 fps=50
ads7846_device pressure_max=255 y_min=190 y_max=3850 gpio_pendown=17 x_max=3850 x_min=230 x_plate_ohms=100 swap_xy=1 verbose=3

Après un reboot l'écran et le tactile sont initialisés automatiquement. Pour vérifier taper dmesg et regarder si vous avez pareille que se qui suit :
[   20.102059] fbtft_device:  SPI devices registered:
[   20.108618] fbtft_device:      spidev spi0.0 500kHz 8 bits mode=0x00
[   20.118688] fbtft_device:      spidev spi0.1 500kHz 8 bits mode=0x00
[   20.126882] fbtft_device:  'fb' Platform devices registered:
[   20.135286] fbtft_device:      bcm2708_fb id=-1 pdata? no
[   20.142474] fbtft_device: Deleting spi0.0
[   20.152085] fbtft_device:  GPIOS used by 'hy28a':
[   20.158495] fbtft_device:    'reset' = GPIO25
[   20.181325] fbtft_device:    'led' = GPIO18
[   20.187179] fbtft_device:  SPI devices registered:
[   20.194042] fbtft_device:      spidev spi0.1 500kHz 8 bits mode=0x00
[   20.202089] fbtft_device:      fb_ili9320 spi0.0 32000kHz 8 bits mode=0x03
[   20.342275]
[   20.342275]
[   20.342275] ads7846_device: ads7846_device_init()
[   20.368505] ads7846_device: SPI devices registered:
[   20.381172] ads7846_device:    spidev spi0.1 500kHz 8 bits mode=0x00
[   20.389113] ads7846_device:    fb_ili9320 spi0.0 32000kHz 8 bits mode=0x03
[   20.421072] ads7846_device:[   20.425419] ads7846_device: Settings:
[   20.430480] ads7846_device:   model = 7846
[   20.451105] ads7846_device:   gpio_pendown = 17
[   20.457011] ads7846_device:   swap_xy = 1
[   20.471058] ads7846_device:   x_min = 230
[   20.476404] ads7846_device:   x_max = 3850
[   20.491059] ads7846_device:   y_min = 190
[   20.496320] ads7846_device:   y_max = 3850
[   20.511054] ads7846_device:   x_plate_ohms = 100
[   20.516888] ads7846_device:   pressure_min = 0
[   20.541052] ads7846_device:   pressure_max = 255
[   20.546842] ads7846_device:   keep_vref_on = 1
[   20.561050] ads7846_device:   vref_delay_usecs = 0
[   20.567017] ads7846_device:   vref_mv = 0
[   20.581061] ads7846_device:   settle_delay_usecs = 0
[   20.587191] ads7846_device:   penirq_recheck_delay_usecs = 0
[   20.611048] ads7846_device:   y_plate_ohms = 0
[   20.616607] ads7846_device:   debounce_max = 0
[   20.631051] ads7846_device:   debounce_tol = 0
[   20.636555] ads7846_device:   debounce_rep = 0
[   20.651107] ads7846_device: Deleting spi0.1
[   20.661387] ads7846_device: SPI devices registered:
[   20.667362] ads7846_device:    fb_ili9320 spi0.0 32000kHz 8 bits mode=0x03
[   20.691094] ads7846_device:    ads7846 spi0.1 2000kHz 8 bits mode=0x00
[   20.698795] ads7846_device:
[   21.649752] graphics fb1: fb_ili9320 frame buffer, 320x240, 150 KiB video memory, 4 KiB buffer memory, fps=20, spi0.0 at 32 MHz
[   21.725057] ads7846 spi0.1: touchscreen, irq 187
[   21.752372] input: ADS7846 Touchscreen as /devices/platform/bcm2708_spi.0/spi_master/spi0/spi0.1/input/input0

Maintenant passons au calibrage de l'écran pour se faire nous avons besoin de plusieurs package :
sudo apt-get update
sudo apt-get install libts-bin evtest xinput python-dev python-pip

ont installe evdev en utilisant pip :
sudo pip install evdev

et pour le calibrer il faut faire ceci :
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate


Voilà maintenant vous voyez un écran avec de petits carrés sur lesquelles il faut appuyer, pour être le plus précis possible utiliser un stylet, stylo, etc.






À partir de la vous avez un écran configurer et prés à l'emploi. Voici un petit programme en python avec pygame pour tester l'écran :
#!/usr/bin/python
# touchv5
# Texy 1/6/13

import pygame, sys, os, time
from pygame.locals import *

from evdev import InputDevice, list_devices
devices = map(InputDevice, list_devices())
eventX=""
for dev in devices:
    if dev.name == "ADS7846 Touchscreen":
        eventX = dev.fn
print eventX

os.environ["SDL_FBDEV"] = "/dev/fb1"
os.environ["SDL_MOUSEDRV"] = "TSLIB"
os.environ["SDL_MOUSEDEV"] = eventX

pygame.init()

# set up the window
screen = pygame.display.set_mode((320, 240), 0, 32)
pygame.display.set_caption('Drawing')

# set up the colors
BLACK = (  0,   0,   0)
WHITE = (255, 255, 255)
RED   = (255,   0,   0)
GREEN = (  0, 255,   0)
BLUE  = (  0,   0, 255)
CYAN  = (  0, 255, 255)
MAGENTA=(255,   0, 255)
YELLOW =(255, 255,   0)
 
# Fill background
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill(WHITE)
box = pygame.draw.rect(background, YELLOW,(0, 0, 40, 240))
box = pygame.draw.rect(background,  CYAN, (40, 0, 40, 240))
box = pygame.draw.rect(background, GREEN, (80, 0, 40, 240))
box = pygame.draw.rect(background,MAGENTA,(120, 0, 40, 240))
box = pygame.draw.rect(background, RED,   (160, 0, 40, 240))
box = pygame.draw.rect(background, BLUE  ,(200, 0, 40, 240))
box = pygame.draw.rect(background, BLACK ,(240, 0, 40, 240))

# Display some text
font = pygame.font.Font(None, 36)
text = font.render("Touch here", 1, (BLACK))
#text = pygame.transform.rotate(text,270) 
textpos = text.get_rect(centerx=background.get_width()/2,centery=background.get_height()/2)
background.blit(text, textpos)

screen.blit(background, (0, 0))
pygame.display.flip()

running = True
# run the game loop
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
            running = False  
        elif event.type == pygame.MOUSEBUTTONDOWN:
            print("Pos: %sx%s\n" % pygame.mouse.get_pos())
            if textpos.collidepoint(pygame.mouse.get_pos()):
                pygame.quit()
                sys.exit()
                running = False
        elif event.type == KEYDOWN and event.key == K_ESCAPE:
            running = False
    pygame.display.update()

Ensuite pour ceux qui veule afficher  le bureau lxde voici la démarche, editer le fichier :
sudo nano /etc/X11/xinit/xinitrc

et ajouter la ligne suivant avant la ligne"./etc/X11/Xsession" :
DISPLAY=:0 xinput --set-prop 'ADS7846 Touchscreen' 'Evdev Axis Inversion' 0 1

et pour lancer il suffit de faire :
FRAMEBUFFER=/dev/fb1 startx -- -dpi 60

pour ceux qui ont des probleme d'inversion d'axe il faut editer le fichier suivant :
sudo nano /usr/share/X11/xorg.conf.d/10-evdev.conf
il faut modifier la section "InputClass" comme se qui suit :
Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "InvertY" "true"
EndSection

Et pour finir pour ceux qui souhaite avoir la console de démarrage sur l’écran il faut ouvrir le fichier :
sudo nano /boot/cmdline.txt
et ajouter à la fin de la ligne :
fbcon=map:10 fbcon=font:VGA8x8
Voila la partie installation de l'écran est fini et voici comment mettre à jour votre système sans tout perdre :
sudo apt-mark hold raspberrypi-bootloader
sudo apt-get update
sudo apt-get upgrade
et pour le rpi-update :
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update

III-Programme  :

Vous l'avez peut être déjà vu sur l'article précédent j'ai fait un programme sur python avec pygame qui me permet notamment de contrôler les GPIO restante du raspberry, j'ai donc créé un dépôt pour que tout le monde y ait accès et puisse le modifier. Pour l'utiliser rien de plus simple télécharger le dans un dossier donner les droits via un chmod à "main.py" et lancer le et le tour est joué.

Le depot : lien

Vidéo :




IV-Test et conclusion :

Après deux semaines de test et de programmation, voici ce que je peux dire sur ce petit écran. Dans un premier temps les avantages :

-Pas de soudure à faire 
-Juste à brancher directement sur le raspberry
-Possibilité via une nappe de récupérer les GPIO disponibles
-Installation logiciel assez simple, car instruction claire de Texy

Ensuite les inconvénients :
-Il faut forcement faire comme expliquer plus haut pour mettre à jour le raspberry
-Il n'est pas "plug&play" c'est-à-dire que pour chaque utilisation par exemple lire vidéo ou musique directement sur l'écran il y a une manipulation à faire, ce qui n'est pas pour un novice évident
-On perd beaucoup de broches GPIO(Tout celle qui servent au SPI SLCK, MOSI, MISO, CE0 & CE1 et trois GPIO classiques GPIO17, GPIO18 & GPIO25)

Pour conclue cet écran sera parfait pour réaliser de petits projets de supervision, sa qualité semble pour le moment assez fragile tout de même, mais le gros avantage reste la boite fournier et surtout la carte électronique souder à l'écran et prête a fonction du colis. Concernant l'envoie et le SAV vu que Texy semble être un particulier le stocke et donc a chaque limité, pour ma le premier écran est arriver cassé de même que ça boite, Texy ma donc le lendemain envoyer un nouveau kit donc vendeur très sérieux.

Voilà en espérant que l'article vous à plus.














Enregistrer un commentaire

  1. Bonjour, j'avais une question : vous parlez de faire une manipulation pour lancer tel ou tel application, qu'entendez vous par la ?
    D'avance merci

    RépondreSupprimer
    Réponses
    1. Bonjour, ne comprend pas votre question, pour moi les application sont des programme en python qui utilise une librairie graphiquement qui se nomme pygame qui permet d'afficher directement sur le touchscreen notre programme.

      Supprimer
  2. Bonjour, ou l'avez-vous acheté car vous n'avez pas précisé de lien pour l'achete ?

    RépondreSupprimer
    Réponses
    1. Je n'ai pas mis de lien parcque le vendeur "texy" fait des vente sur ebay avec un nombre de produit limité à chaque fois. Par exemple au moment on je vous répond il n'y a pas de vente.

      Supprimer

 
Top