arduino + nextion

Bonjour,

je suis en train de galérer avec les ecrans Nextions et l'arduino.

Voici la config Hardware:

  • Arduino nano every
  • ecran nextion NX3224T028_011
  • 2 capteurs DS18B20
    voici une des pages du GUI: (page TEMPERATURE)

Le principe de ce projet, est de faire une acquisition de temperature sur 2 capteurs onewire en parallèle.
afficher les valeurs pour chaque capteur, et tracer le relevé de temperature dans un graphe.
Les boutons (+) et (-) permettent de zoomer, le chiffre 100 en bas à gauche indique la valeur du zoom.
le bouton en bas à gauche permet de changer de page vers le menu "INFORMATION".
Dans la page "INFORMATION" (non, non je ne crie pas... ) on accède à un menu "CONFIG" qui permet de changer la luminosité de l'écran et le taux de rafraichissement du graphe ( de 1 à 60 secondes, par palliers )
Le menu "INFORMATION" indique le nombre de capteurs DS18B20 trouvés sur le bus onewire et donne l'adresse de chacun.

Je précise que toutes les fonctionalités sont ok.

Afin de connaitre la page sur laquelle l'écran se trouve, j'envoie régulièrement une requete "sendme" à l'écran (toutes les environ 500ms , dans la boucle LOOP). L'ecran doit répondre par l'envoi d'une trame de 5 octets ( 66 01 FF FF FF ) , "01" étant le numero de la page actuellement affichée.

En fonction de la page sur laquelle l'ecran se trouve, l'arduino appelle différentes procédures:

  • page TEMPERATURE--> acquisition de temperature sur les capteurs et envoi des valeurs à afficher.
  • page INFORMATION--> affichage d'infos sur les capteurs et leurs adresses.
  • Page CONFIGURATION --> pas d'action

J'ai supprimé tous les messages de débuggages sur le port serie arduino/pc et le port SERIAL est fermé.
seul est ouvert le port SERIAL1 qui utilise les pins 0 et 1 qui sont reliées au nextion.

à la mise sous tension, l'ecran affiche la page d'accueil et passe à la page TEMPERATURE.
A ce moment tout fonctionne, les valeurs sont affichée toutes les secondes.

Au changement de page, ça ne marche plus, l'arduino ne détecte pas le changement de page.
Comme il envoie une requete "sendme" toutes les 500ms, le port serie1 répond, mais le buffer semble recevoir un nb d'octets trop grand et ne peut pas interpréter la trame reçue.

J'ai passé un temps considérable à essayer de débugger ce problème en changeant le moyen de communication arduino/nextion, la vitesse, etc... rien n'y fait.
Mais j'ai remarqué que lorsque j'ouvre le port serie arduino/pc ( qui n'est pas utilisé dans mon soft ), tout d'un coup l'arduino comprends la reponse à la requete "sendme" et identifie la page.
quand je passe sur le page CONFIGURATION, mais probleme... je ferme le port serie et le ré-ouvre, l'arduino identifie la requete et reconnait la page 3.

J'ai fait des tests sur une alim seule (au cas ou des trucs passeraient sur le port serie ), et monitoré les trames à l'oscillo sur SERIAL1 (pour voir si tout communique), arduino envoie bien la requete "sendme" mais le même genre de problème survient, sauf que ça tourne en boucle car je n'ai plus de moyen d'ouvrir le port serie du pc.

J'ai donc l'impression que l'arduino me fait une crasse quand j'utilise le port serie1 et que l'ouverture du port serie classique (celui du televersement) resyncronise tout le monde ???? Comme il n'y a pas de signaux de controle hardware, la communication asynchrone ne semble pas très fiable et plante de temps en temps...

J'ai fait une vérif des signaux électriques, qui sont propres et non pollués, j'ai donc écarté les problème de masse et de compatibilité de niveaux.

j'ai été un peu long, mais si quelqu'un avait des suggestions, je suis preneur...merci

Bon finallement , je me répond tout seul...
j'ai laissé tout en plan pendant une bonne heure, tout débranché et le PC en veille.

je remet tout en route, ça marche......va comprendre.....
j'imagine que toute la ram s'est vidée ainsi que les buffers internes, ce qui n'était peut être pas le cas quand je faisais des essais en continu.?

seul est ouvert le port SERIAL1 qui utilise les pins 0 et 1 qui sont reliées au nextion.

les GNDs étaient-ils bien connectés aussi ?

oui, j'ai commencé par éliminer les problèmes de masse et de niveaux sur les ports...

Mais depuis 3 jours je suis en test, et tout fonctionne.

C'est pour ça que j'ai mis en doute l'arduino, mais sans debugger , il n'est pas facile de voir ce qui se passe dans ses registres et sa ram... dommâge.
Un bon debugger, c'est vraiment la seule chose qui peut manquer à Arduino, mais comme c'est un IDE gratuit, il ne fallait pas s'attendre à des miracles sur ce point.

Un bon debugger, c'est vraiment la seule chose qui peut manquer à Arduino, mais comme c'est un IDE gratuit, il ne fallait pas s'attendre à des miracles sur ce point.

miracle en vue !!

le debugger arrive dans l'IDE 2.0 (beta 4 actuellement), debugger limité pour l'instant à un petit nombre de cartes :

As of today, the debugger supports all the Arduino boards based on the SAMD and Mbed platforms (MKR family, Nano 33 IoT, Nano 33 BLE, Portenta, Zero). Maintainers of Arduino cores for third-party boards can add support for debugging by adding the relevant configuration parameters; a technical guide for this is coming. You’ll need to connect a debugging probe such as the Segger J-link to the JTAG pins on the board and you’ll be ready to go.

source : Announcing the Arduino IDE 2.0 (beta) | Arduino Blog

c'est bon ça !!!!
Hate de voir ça !