L’écran LCD bon marché utilise une série USB

Parcourir les marchés asiatiques en ligne est toujours une expérience. Parfois, on voit des choses à des prix ridiculement bas. D’autres fois, vous voyez des choses et vous vous demandez qui les achète et pourquoi – un oreiller aux crevettes ? Mais parfois, vous voyez quelque chose qui pourrait probablement avoir un objectif plus utile que le cas d’utilisation proposé.

C’est le cas de la surabondance d’« écrans intelligents » que l’on peut trouver à des prix très bas. Apparemment, ceux-ci sont vendus comme moniteurs système. Un écran LCD de la taille d’une carte de visite se connecte via USB et affiche la vitesse de votre processeur, la température, etc. Bien sûr, cela nécessite un logiciel Windows sommaire. Je n’utilise pas Windows, et si je le faisais, je ne serais pas disposé à mettre en place un service étrange juste pour pouvoir voir de minuscules affichages des informations de mon système. Mais un écran LCD IPS de 3,5 pouces pour 15 $ ou moins a probablement d’autres utilisations. Mais comment le conduire ? Il s’avère que c’est plus facile que vous ne le pensez et que le matériel semble également raisonnablement piratable.

Comme beaucoup de produits bon marché, ces écrans sont vendus sous différents noms et, apparemment, il existe quelques différences subtiles. Deux des principaux fabricants de ces écrans sont Turing et XuanFang, bien que ces noms soient rarement vus dans les listes en ligne. Comme on peut s’y attendre, cependant, quelqu’un a procédé à une ingénierie inverse du protocole et il existe un logiciel Python qui remplacera le logiciel Windows d’origine utilisé par les appareils. Mieux encore, il existe un exemple d’utilisation de la bibliothèque à vos propres fins.

Matériel intérieur

Il n’y a pas grand chose derrière le couvercle métallique. Le retrait des deux vis révèle cette disposition soignée.

Le matériel est super simple – du moins la variante que j’ai. Un processeur CH552T bon marché est un 8051 avec un cœur USB. Il devrait être possible de le pirater et de reprogrammer le tout, mais cela semble demander beaucoup de travail. Il y a un régulateur de 3,3 V et une poignée de petits composants sur la carte.

Il existe deux ports USB-C et un connecteur pour se connecter au port USB interne d’une carte mère. Cependant, vous ne pouvez utiliser qu’un seul des ports à la fois. Il n’y a en fait qu’un seul port. Les différents ports sont là pour que vous puissiez acheminer le fil en fonction de vos préférences de montage.

Du point de vue logiciel, cela ressemble à… un port série ! J’espérais que la conversion USB se produisait en dehors de la puce, car un écran LCD RS232 de niveau logique aurait été vraiment très cool ! Hélas non. Le CH552 possède son propre contrôleur USB. D’un autre côté, l’appareil dispose de deux UART normaux, il serait donc possible de supposer que vous puissiez reflasher le contrôleur.

À l’intérieur du logiciel

Le logiciel Python est assez simple à utiliser. Il existe plusieurs versions de l’écran, et vous devez savoir laquelle vous possédez : la mienne est une révision B. Le logiciel peut trouver automatiquement le port série, ce qui semble bien fonctionner, ou vous pouvez spécifier un numéro de port. Vous pouvez utiliser des appels simples pour effacer l’écran, dessiner du texte, déposer des images et dessiner des « barres de progression » que le logiciel de stock utilise comme compteur.

En lisant le code, plusieurs commandes sont disponibles. On fournit une poignée de main avec l’écran. Vous pouvez également régler l’éclairage LED, la luminosité et l’orientation, portrait ou paysage. Pour afficher du texte ou des graphiques, vous créez une image et l’envoyez à l’écran.

Le code fourni utilise la bibliothèque Pillow pour Python. Bien entendu, il vous serait possible d’interagir directement avec l’écran dans vos propres applications en utilisant directement le port série. Le protocole sous-jacent envoie 8 octets à la fois dans un paquet de 10 octets. Le code est facile à lire, vous pouvez donc facilement créer vos propres pilotes si vous le souhaitez.

Un exemple rapide

Naturellement, j’ai dû l’essayer par moi-même. Mon but? Affichez le dernier titre du Hackaday sur le petit écran. Je suis resté avec Python puisque les bibliothèques étaient prêtes à fonctionner et j’ai préparé un graphique Jolly Screwer avec un petit espace en bas.

Le code ouvre simplement l’écran, gratte le titre, le dessine, puis se ferme. Si vous souhaitez des mises à jour constantes, vous devez exécuter le tout à partir d’une tâche cron ou d’un minuteur systemd.

Voici le code :

#!/usr/bin/env python3

import requests

from bs4 import BeautifulSoup
from library.lcd.lcd_comm_rev_b import LcdCommRevB, Orientation

# init LCD
lcd=LcdCommRevB() # default is AUTO,320,480
lcd.Reset() # Does nothing for Rev B hardware
lcd.InitializeComm()
lcd.SetOrientation(Orientation.LANDSCAPE)
lcd.SetBrightness(10);

# background graphic
back='had.png'
lcd.DisplayBitmap(back)

# scrape
r=requests.get('http://www.hackaday.com')
if (r.ok) :
   soup=BeautifulSoup(r.content, 'html.parser')
   entry=soup.find('div', class_='entry-intro')
   title=entry.findAll('a')[1].text;
# put title on LCD
   print(f"Found {title}\n")
   lcd.DisplayText(" " + title, 0, 280, font_size=16, font_color=(0,0,0), background_color=(255,255,255))
   exit(0)
else : # error message
   lcd.DisplayText(" Internet error!", 0, 280, font_size=16, font_color=(0,0,0), background_color=(255,255,255))
exit(1)


La bibliothèque BeautifulSoup facilite l’extraction du titre, du moins jusqu’à ce que nous procédions à une refonte du site. Après cela, il suffit d’appeler DisplayText. Vous pouvez trouver le code et le graphique dont vous avez besoin sur GitHub. Une bonne idée de le récupérer à partir de là, car l’affichage du code ci-dessus dans le navigateur est toujours suspect lorsque vous avez besoin d’une indentation.

Si vous avez besoin d’un écran LCD rapide et sale (et bon marché) et que vous disposez d’un port hôte USB et de Python, cela pourrait être exactement ce qu’il vous faut. Même sans Python, le protocole serait facile à reproduire. On est encore tenté de reflasher le CH552 pour le convertir afin d’utiliser un port série normal. Si vous décidez de tenter votre chance, vous devrez comprendre la programmation. L’en-tête serait un bon endroit pour relever la broche D+ à 3,3 V pour passer en mode chargeur de démarrage. Faites-nous savoir comment vous faites!

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.