Interpréteur Processing
Générer du graphisme en Processing depuis l’Arduino |
Maj : 06/07/2024 Abstract : This page shows my special tool, an interpreter to create everithing on Processing animation, without coding in Processing.
Résumé : |
Cette page est trop ancienne et va être réécrite prochainement !
Afin de bien comprendre l’intérêt du tableau blanc sous Processing, il serait utile de commencer par ces exemples qui montrent comment dessiner sous Processing seul.
Les mèmes résultats seront obtenus en sous-traitant tous les calculs à un ESP32 distant qui envoie ses ordres à Processing en WiFi.
Emulation Rolex
sous Processing
Lune sous rocessing
L’idée de cet interpréteur est de disposer de la fantastique résolution d’un PC ou d’une tablette comme interface d’un Arduino en simplifiant au maximum la programmation.
Il est possible de faire tout ce que l’on fait sur un LCD graphique, mais en beaucoup mieux, sans rien programmer en Processing.
Mon interpréteur traduit toutes les commandes Arduino en Processing. Cette version se limite à tout ce qui est utile pour faire de l’acquisition de capteurs et afficher les courbes en jolis graphismes.
L’outil est totalement ouvert, il est très simple d’ajouter de multiples autres commandes pour des animations sans limites.
La sortie basique est en USB, mais comme cela est décrit sur le Net, l’adaptation en WiFi est immédiate.
Cela s’avère très pratique en développement Arduino, car cet affichage est un formidable outil de debug qui permet d’afficher toutes les variables critique en temps réel.
Configuration
Ce programme a été testé sur mes cartes ESP32 S3 qui possèdent l’horloge temps réel (RTC) DS3231 avec son driver Adafruit.
Si vous n’avez pas cette configuration, commentez la première ligne du code en .ino : #define DS3231 // Comment if RTC not present ! l’émulateur fonctionnera mais en mode réduit, Les heures et dates seront aléatoires et ne seront pas modifiables dans le menu. Ce firmware adresse aussi une led et un buzer, mais ils ne sont pas indispensables.
Nous trouvons ici trois parties indépendantes :
Un module sous Processing, qui sera utilisé sans modifications pour exécuter toutes les animations possibles, comme par exemple le traceur de courbes décrit ici.
Un driver, qui est une classe en C, <C_Interpret>, noyau d’exécution des commandes Arduino. Cette classe dialogue avec le module Processing, reliant l’Arduino au PC par la liaison USB ou par Wifi (non implanté pour simplifier).
C’est une extension des commandes Arduino qui fabrique les chaînes (String) pour génèrer l’affichage des écrans par Processing. Cette classe est à installer dans votre directorie des libraires Arduino.
Un programme de démonstration sous Arduino, que vous pourrez remplacer par le votre pour créer tous les affichages sur le PC.
Il s’agit ici de la partie d’affichage complète d’un système d’acquisition de données d’une multitude de capteurs. La partie acquisition et traitement de données, décrite par ailleurs n’a pas sa place dans ce démonstrateur Processing, et a été remplacée par un générateur de courbes aléatoires pour alléger.
Le logiciel d’affichage graphique de données
Maintenant que nous avions vu le moteur dont il n’y a plus à se préoccuper, il reste à conduire le véhicule. Cela ne se passe que du coté Arduino, il n’y a plus rien à écrire coté Processing
Cet exemple commence par des démonstrations des performances graphiques pour montrer la vitesse très rapide :
Formes aléatoires en cercles et triangles.
Cercles décroissants.
Rotation d’image pour montrer qu’ici les timings sont critiques, si l’on raccourcit le délai, les bugs apparaitront.
Différentes tailles d’affichage de l’heure, le fond rectangulaire du pré effacement ètant calculé d’après le taille du font.
Grilles et différents positionnement des zones clickables, dont nous aurons besoin par la suite, depuis 3*3 pour les gros doigts en mouffles de ski, jusqu’à 10*10. Il n’est pas très intéressant d’aller au-delà.
En exploitation, il suffit ensuite d’appeler la grille par sa résolution, les zones sont numérotées et en cliquant, le numéro de la case sera renvoyé pour traitement.
Evidement ces démos sont désactivables en commentant la ligne concernée dans le source Arduino.
L’ensemble peut paraître complexe, car il y a beaucoup de briques !
Le système d’acquisition de capteurs est autonome et dispose de son propre afficheur graphique local. Il faut toujours un noyau central basé sur un ESP32 qui collecte et met en forme les données qui sont enregistrées sur l’ EEPROM 27c512 de sa carte horloge temps réel (RTC) DS3231. Dans les exemples : Domotique Nextion et Domotique par Internet
l’ESP32 gère en plus un afficheur graphique local, un Nextion 800x480.
Un logiciel écrit en PHP et implanté dans le cloud sur le serveur Voilec, dialogue avec l’ESP32 et crée des pages html interactives qui sont affichées via un browser
Nous parlons maintenant dans cette page d’un dispositif complémentaire totalement différent ! Ce qui est proposé ici vient se greffer à l’existant, il ne fait ni l’acquisition des données ni l’enregistrement, mais il en exploite les données enregistrées décrites ci-dessus, pour pouvoir les afficher en un endroit quelconque en WiFi.
Ici, cela ne fait pas appel au serveur précédent dans le cloud, c’est l’ESP32 central qui fabrique les pages interactives sans passer par l’Internet, ce qui n’a rien à voir. Les trois systèmes cohabitent avec bonheur mais sont indépendants (mais partagent les données communes).
Dans ce chapitre commun, ce petit gribouillis vous montrera peut-être plus clairement les approches décrites dans mes pages pour afficher graphiquement les données d’acquisition, à partir du "maître", l’ESP32 central, qui centralise une dizaine de capteurs variés. Ces trois affichages fonctionnent bien simultanément sur le même ESP32 maître. Il semble que cela fasse de multiples emplois redondantsi, car en définitive il s’agit de divers affichages qui affichent les mêmes courbes, mais avec des approches totalement différentes, afin de montrer divers chemins possibles. Le terminal en http, visible sur un browser est décrit ici : Domotique via Internet L’affichage en dur sur un Nextion en 800x480 est décrit ici : Domotique Nextion locale L’affichage sur un Pc via Processing est décrit ici : Interpréteur Processing L’affichage sur un moniteur HDMI est décrit ici :Atom PSRAM display |
Limitations de la classe <C_Interpret>
Classe minimaliste
Cette classe ouverte est volontairement simplifiée au maximum pour plus de clarté. Elle ne comprend que les commandes strictement nécessaires au démonstrateur de cette page.
Une version plus complète qui n’est pas mise en ligne pour le moment donne accès à beaucoup d’autres fonctions.
Sur la page Rolex par Processing, le programme est indépendant de l’Arduino, et n’utilise que Processing.
Avec le jeu de commandes étendues de l’interpréteur, le même résultat est réalisable depuis l’Arduino (en rajoutant les quelques commandes manquantes).
Ces commandes étendues comprennent entre autres : createShape, loadShape, beginShape, endShape, addChild…
Les outils JSON,vertex, courbes de Bezier, et bien d’autres du long dictionnaire Processing. Elles seront introduites peu à peu lors de la mise en ligne de nouveaux exemples.
Size en dur !
Un autre des problèmes très gênant est qu’il est impossible de fixer la taille de la fenêtre depuis l’Arduino !
Quand le .pde se lance, il faut impérativement que le setup commence par size (largeur, hauteur), ces valeurs étant en dur, elles ne seront plus modifiables quand le .ino se lancera !
Cela veut dire que pour changer la taille, il faudra écrire dans le .pde, ce qui est contraire à l’esprit de cet interpréteur qui se vante de pouvoir tout faire sans toucher le code .pde
C’est un sujet qui est très présent dans les forums, mais je n’ai pas trouvé de solution qui fonctionne vraiment !
Vous trouverez ceci, ou une variante utilisant settings() :
PImage img;
void setup() {
img = loadImage("uneImage.png");
size(img.width, img.height); }
Il suffirait alors de renommer une image (même vide) de la taille de la fenêtre désirée pour ne pas avoir à toucher au code .pde (qui peut être compilé en dur en .exe).
Si l’on change d’image sous Arduino, il faudra évidement relancer Processing ou passer par l'Arduino la commande reset();
Le seul problème est que cela ne fonctionne pas pour moi, et je ne comprends pas…
Cet exemple est en réalité le squelette d’un système d’acquisition et d’affichage de données complet. Pour être opérationnel, il suffit de rajouter :
Le vrai moteur qui est le module d’enregistrement des capteurs comme décrit dans la page Domotique Nextion
Le calcul des heures du soleil, à chercher sur le Net. Rien d’original, j’utilise une version basée sur l’UnixTime. Une des implantations est en page Nextion, mais il y a beaucoup d’autres exemples sur le Net.
La page de menu de paramétrage et de choix des capteurs qui ne présente aucune difficulté.
Chargez d’abord l’outil sur le site mère Processing.org et installez-le, c’est très rapide. Ensuite fouillez dans les multiples exemples du site puis du Net pour commencer à en comprendre les possibilités…
Cette autre page vous montrera un exemple de réalisation graphique en Processing seul : Rolex par Processing
Préalable : L’heure est celle du PC. Si vous voulez tester à pleine vitesse, il suffit de changer alors sur la première ligne : int clockMode = 0 ; en = 1 ;
--------------> Logiciels en réécriture, nouveaux sources prochainement.