Anthias
mail
2 connectés     # #

r

Atom PSRAM display

Une interface HDMI pour Arduino ESP32

m5


Introduction
Mon expérience
Quelques applications
Le bilan final

Maj : 27/05/24

Abstract :
I have always been frustrated on Arduino by the limited selection of high-resolution SPI TFT screens availables.The idea of using an ESP32 with HDMI output was a dream, to works with the rich variety of Raspberry's screens, and I was excited to discover the Atom PSRAM! However, after intensive testing, my enthusiasm waned and I abandoned the idea. I returned to my previous solution, which involves using Processing on a Raspberry Pi emulator as a slave, with commands sent via WiFi from an ESP32.

Résumé :
J'ai toujours été frustré sur Arduino par la sélection limitée d'écrans TFT SPI haute résolution disponibles. L'idée d'utiliser un ESP32 avec sortie HDMI était un rêve, pour fonctionner avec la riche variété d'écrans Raspberry, et j'étais ravi de découvrir ce Atom PSRAM ! Cependant, après des tests intensifs, mon enthousiasme s’est estompé et j’ai abandonné l’idée. Je suis revenu à ma solution précédente, qui consistait à utiliser Processing sur un émulateur Raspberry Pi comme esclave, avec des commandes envoyées via WiFi depuis un ESP32.

nextion  Introduction

Enfin une sortie HDMI pour mes ESP32 ! Le concept de l’Atom PSRAm semblait bien séduisant. Le prix d’une cinquantaine d’Euros était très correct.
La maigre documentation est ici : https://docs.m5stack.com/en/atom/atom_display

En résumé : Maximum 720P (1280x720) image outpu 2K
Programmable RGB LED (classic WS2182), reset button x1, button x1, Grove expansion port x1, (2 GPIO avalaibles).
Use FPGA (Gowin GW1NR-9C) to simulate traditional SPI TFT-LCD Data output
 Built-in LT8618SX RGB to HDMI chip (supports 24bit color depth)
SPI interface (FPGA) + I2C interface (LT8618SX)((<-- Non disponible de l'estérieur !)
USB driver chip CH9102
ATOM Display PSRAM (ESP32-PICO-V3-02)
8MB flash   520KB SRAM + 2MB PSRAM
G22, G19, G5, G33, G25, G21 (<-- Utilisation réservée au FPGA !) G26, G32 utilisables
Il existe aussi une version Pico, sensiblement au même prix, mais avec deux fois moins de mémoire.

Cela est bien séduisant sur le papier et j’ai commandé trois spécimens.
J’ai fait tourner les quelques dizaines d’exemples disponibles, en décortiquant les codes et les bibliothèques pour tester ces limites et pallier à cet énorme problème qui est apparu immédiatement :
Il n’y a aucune documentation sur ce produit, il faut tout deviner !
Deux raisons :
Il est très peu diffusé, donc aucun forum ni personne pour poser des questions.
Le nom choisi est stupide, si vous faites une recherche « ATOM », vous trouverez une multitude de liens mais aucun n'a de rapport avec cette carte.

Le bilan sera en fin de cette page.

 Haut de page

nextion  Mon expérience de l'Atom PSRAM

Matériel utilisé pour les tests : Téléviseur 2k, 24 pouces, évidement en HDMI.

J’ai travaillé intensément sur ce produit pendant de nombreuses semaines. Je n'ai pas réussi à faire reconnaitre LVGL ou Square Line sur ce matériel.
Voici quelques-uns de mes programmes Atom développés sous PlatformIO.

a

Haut de page

nextion  Quelques applications

Mon obsession, le cadran Rolex, j’en ai fait sur tous les cartes possibles pour tester les performances. Le principe est complètement différent de celui du Nextion qui affichait une photo du cadran sans aiguilles (c’est trop banal !), ici aucune photo, le fond est entièrement calculé par l’ESP32 de l’Atom!
Pour le reste, les couches d’aiguilles sont calculées à l’identique et superposées au fond.
Cet éclaté montre la construction simplifiée des aiguilles comme sur Nextion avec un faisceau de segments calculés. Cela ne marche pas sur l’Atom car le moirage est très important suivant les angles.
Les aiguilles Atom ont été créées en utilisant la fonction drawTriangle pour les pointes, mais pour le centre, il n’existe pas de fonction drawQuadangle (la fonction drawRectangle ne permet que des rectangles horizontaux). Pour faire un rectangle incliné, il suffit de juxtaposer deux triangles sur une diagonale. Cela crée un remplissage de points sans trous éliminant le moirage.
Je n’ai pas pu implanter la trotteuse comme d’habitude, l’affichage est beaucoup trop lent, j’ai limité le rafraichissement à la minute.

exemple page : rolexA arduino

.SinCos

r

Un autre problème de l’Atom est que l’écran HDMI n’est pas tactile !
Pour contourner le défaut, j’ai utilisé une petite télécommande infrarouge (quelques € en Chine), branchée sur le GPIO G26, disponible sur la prise externe J3. Il reste G32 pour sortir un petit buzzer car le HDMI ne passe pas le son.
Le cadran n’est pas une photo, il est entièrement calculé et vectorisé afin d’adapter n’importe quelle taille.
Cela fonctionne très bien et permet de simuler la souris pour changer les pages et valider des commandes.

 

i

Diverses images JPG pour tester les vitesses d’affichage, les qualités sont bonnes.
Le problème est le temps d’affichage de la page considérable, une seconde pour ces exemples, c’est inacceptable.

Cela est toutefois suffisant pour des applications lentes comme la domotique qui n’implique qu’un rafraîchissement d’écran toutes les deux minutes, un scintillement étant alors parfaitement toléré..

Les damiers ne sont pas des JPG, mais calculés directement pour tenter d’améliorer les vitesses.

i

y

i

Voici les réglages utilisés pour le convertisseur d’images de Bodmer de JPG en C (c'est un fichier en .h).
Il est préférable d’éviter le 24 bits, la taille du .h étant déjà énorme en 16 bits, ici 1.8 Mb…
Le calcul du nombre de points retrouve cette valeur : 1280 * 720 *2
Les couleurs sont déclarées en « short » de 16 bits, en non pas en « int » qui prend 32 bits.

 

 

c

Une petite collection de quelques fonts pour tester les rendus.

Il faut conserver « size 1  », sinon chaque pixel est multiplié, choisir des fonts plus grands si nécessaire. Il n’y a pas de font vectoriel.

 

 

f

Premier brouillon rapide pour tester le positionnement de mes outils de domotique.
Un relevé toutes les 2 minutes pendant 24 heures : 24*60/2 = 720, impose la taille du graphique à 720 points de large, détails dans mes autres pages domotique.
Il reste de la place à gauche pour afficher une petite Rolex.
Les données sont reçues en WiFi, l’ensemble étant autonome.

 

 

d

L’après Atom : Processing

Je reprends mon travail d’interpréteur de commandes sur Processing nextion en sommeil depuis quelques années.

L’avantage est qu‘un projet sur Processing développé sur une plateforme est immédiatement transposable sur une autre sans rien changer.
Sur l’Atom, il n’y a aucune documentation, mais sur Processing c’est l’inverse, documentation immense et quantité d’exemples spectaculaires créés par des artistes talentueux, avec une syntaxe très simple.

r c
p

Haut de page

nextion  Le bilan final

J’ai pu obtenir des informations précises, et communiquer avec la société, et il s’avère que ce PSRAM est extrêmement peu fiable. J’ai eu droit aux deux pannes récurrentes classiques et obtenu le remplacement de deux de mes Atom PSRAM.

Première panne classique : La communication avec l’ESP2 se fait normalement, il est possible de faire tourner un programme qui sort des données en série, aucun problème de programmation, aucune erreur, mais il n’y a plus aucune sortie HDMI, comme si le câble était débranché. Ayant plusieurs unités (je me méfiais), j’ai constaté que le gros bloc contenant le FPGA n’était pas en cause, mais que le problème venait du petit module PSRAM, c’est pour cela que vous en voyez deux de plus (en panne) sur la première photo.
Deuxième panne classique : Toujours du module PSRAM, le port USB disparait un jour (et ne revient jamais) comme si le câble USB n’existait plus. Le test est fait sur divers PC (les deux autres PSRAM fonctionnaient), il n’y a aucune solution autre que le remplacement.

Autre classique pénible, après avoir chargé un programme, ou un reset, plus rien ne s’affiche, il faut débrancher puis rebrancher USB, HDMI et cela peut repartir.

Cela fait beaucoup de problèmes et m’a bien refroidi, à chaque branchement, je me demandais si cela allait recommencer. Les deux modules isolés sur la photo du haut sont tombés en panne...
Le bloc chauffe beaucoup, tout est très tassé sur une toute petite surface et il n’y a aucune aération, ce qui est préjudiciable à la fiabilité.

L’idée était d’alimenter en 3.3V par la prise J3 et laisser le module autonome sans USB, interprétant les commandes distantes en WIFI.

Après ces essais, j’ai abandonné ce matériel et rebasculé sur Processing, qui est considérablement plus rapide et offre des possibilités graphiques sans aucune comparaison possible.
Regardez sur le site Processing les énormes possibilités graphiques et la vitesse, ce qui change des commandes très limitées et de la lenteur de l’Atom.
Le développement fait sur PC est transposé simplement sur Raspberry Pi, sur miniPC, ou sur tablette Android, la communication se faisant par WiFi.
Cela fera l’objet d’une autre page.

Autre solution à explorer : PcDuino de linkSprite

Haut de page

© Christian Couderc 1999-2024     Toute reproduction interdite sans mon autorisation


* Page vue   252   fois       IP : 34.239.170.244

 Haut de page         Dernière retouche le 29 Mai 2024 à 06 h         Retour page précédente

   Collector