probleme envoi info vers ecran nextion

Bonjour a tous,

je me présente vite fait,je m’appel Stephan et je suis passionné par les nouvelles technologie et surtout la domotique. Je regarde depuis un petit moment le codage avec arduino et cela me plait beaucoup mais tout seul dans mon coin c’est vraiment dure mais j’avance comme je peux.
J’ai lu les cours sur zeste de savoir qui m’on appris beaucoup de chose, merci a son rédacteur au passage.

Bon venant en au fait, je vous explique mon problème.
je me suis lancer dans l’idée de réaliser un programmateur personnel d’arrosage avec un arduino mega et un écran nextion 3.5".

Avec celui ci je veux piloter depuis l’écran mes électrovannes d’arrosage(Ca ça marche),je veux aussi piloter la vanne en tète de ma pompe qui sélectionne l’eau de la cuve ou du réseau(cette vanne est gérée par un flotteur dans la cuve(ca je peux le forcer depuis l’écran).

Avec un programme a ma sauce ,loin d’être optimal mais qui a le mérite de fonctionner a 90%.
ce que je n’arrive pas a faire c’est envoyer les infos de l’arduino vers l’écran. J’ai chercher mais franchement c’est trop dure pour moi.
la réception des touche depuis l’écran fonctionne peut être pas de manière conventionnelle non plus mais ca marche.
Donc au final comment faire pour envoyer du texte par exemple sur une zone texte de l’arduino vers l’écran.

c’est un peu long désolé, j’espère avoir été claire.

mon code en pièce jointe car trop long.

arrosage_module_ecran_mega.ino (12 KB)

Si vous avez instancié un objet de type texte à l’interface sous le nom de t0 alors pour mettre à jour son contenu vous pouvez faire

 // pour du texte
myNextion.setComponentText("t0", "Bonjour"); 

// pour une valeur
int temperature = 27;
myNextion.setComponentText("t0", String(temperature)); // ou peut être myNextion.setComponentValue(t0", temperature);

// pour un mélange des deux
myNextion.setComponentText("t0", String("Temp:") + String(temperature));

Quelle horreur toutes ces Strings mais c’est sans doute le plus simple

Bonjour,

Si zonetext est le nom de la zone de texte dans laquelle tu veux écrire, il suffit d'envoyer zonetext.txt="texte" suivi de 3 0xFF. Par exemple:

  char *msg="Bonjour";
  
  Serial3.print("zonetext.txt=\"");
  Serial3.print(msg);
  Serial.write('"');
  Serial3.write(0xff);
  Serial3.write(0xff);
  Serial3.write(0xff);

Modification: ajout des guillemets.

c'est plus sexy que toutes ces Strings ! 8) 8)

Phanouf1 bonjour,

si tu ne change pas les nom de tes zones de texte sur le nextion, tu dois envoyer ce format:

t0.txt="mon texte" suivi effectivement des trois 0xFF. tu peut tester directement la commande dans la fenêtre du simulateur nextion pour comprendre. (sans les0xFF).

je te met un exemple de ce que j'utilise comme envoi simple:

      sendTEMPToNextion(); // çà c'est ma fonction
      Serial.print("t3.txt="); // le nom de la zone ou je l'envoi
      Serial.print("\"");        // premier "
      Serial.print(T);           //  variable que j'envoi (en l'occurence un float) sinon nextion prend que des 
                                       //entiers
      Serial.print("\"");       // deuxieme " de fermeture
      Serial.write(0xff);      //
      Serial.write(0xff);     // commande de fin d'envoi (3x) 0xFF 
      Serial.write(0xff);     //

//ce code print t3.txt="valeur de T"ÿÿÿ sur le moniteur serie

Tu as sur le site, un très bon tuto de PerryBebbygton: https://forum.arduino.cc/index.php?topic=604185.0

Il devrait beaucoup t'aider a comprendre pas mal de chose concernant les nextions

Sur le nextion, attention a la quantités de caractères dans ta zone de texte!!

Kamill, t'as méthode est vraiment sympa ;) merci du tuyaux!

J-M-L: c'est plus sexy que toutes ces Strings ! 8) 8)

Surtout ça se passe de la librairie Nextion. Comme phanouf1 s'en passe pour la réception des commandes, je pense qu'il veut aussi s'en passer pour l'envoi (qui est plus simple que la réception).

2terium: Kamill, t'as méthode est vraiment sympa ;) merci du tuyaux!

Sauf que je m’aperçois en te lisant que j'ai oublié les " :-* . Je corrige

kamill: Comme phanouf1 s'en passe pour la réception des commandes, je pense qu'il veut aussi s'en passer pour l'envoi

c'est une bonne idée :)

phanouf1, kamill, J-M-L avez vous une méthode pour envoyer des octets depuis le moniteur serie pour le debug de la réception des message du Nextion?

passer par le simulateur nextion pour avoir les prints de l'arduino, sur le traitement des octets c'est pas vraiment le top!?

sans parler des convertions ^^

parce que le format type "65 01 10 01 FF FF FF" envoyer dans le moniteur serie! même reçu en variable de type byte ou char, le 65 prend case[0] pour le 6 et case[1] pour le 5!! alors que ce n' qu'un seul octet!

En réalité il va tenir dans la case[0], donc pour faire un programme de réception c'est pas évident.

Si quelqu'un sais! je suis preneur! merci

prenez des conventions pour vous simplifiez la vie - si vous tapez #, ça balance 65 01 10 01 FF FF FF en binaire par exemple - si le premier caractère n'est pas un #, par exemple vous tapez coucou, vous balancez "coucou" FF FF FF

2terium: passer par le simulateur nextion pour avoir les prints de l'arduino, sur le traitement des octets c'est pas vraiment le top!?

parce que le format type "65 01 10 01 FF FF FF" envoyer dans le moniteur serie! même reçu en variable de type byte ou char, le 65 prend case[0] pour le 6 et case[1] pour le 5!! alors que ce n' qu'un seul octet!

Je ne vois pas bien ce que tu veux dire. Passer par le simulateur fonctionne bien. L'idéal c'est d'avoir un adaptateur USB TTL pour connecter le simulateur en même temps que le moniteur série. Après tu affiches les codes reçus comme tu veux. Les afficher en hexa (comme tu as fait) c'est le mieux.

Kamill, t'es tjr sur le coup!! bon dommage, j'ai pas d’émulateur USB TTL!! ;)

surement une piste!

Cependant, le simulateur, c'est un peu la misère pour les retours de l'arduino!! oui certe! c'est tjr mieux que rien!!

Crois tu qu'on puisse brancher le Nextion sur l'arduino, et l'arduino sur le port serie?? (aie, j'ai un peut peur du resultat!!)

J-M-L, j'ai essayer les envois série avec # devant , genre #65 01 10 01 FF FF FF, et #65 #01... cela ne reagie pas, alors que le simulateur nextion lui me renvoi ce que je demande!(faut un peu traduire...)

le but c'est de différencier les press touch event qui sont d'origine sur 7 octets , commençant par 0x65 Des retour de valeur, qui sont un peut plus long... commençant par 0x71.

un fois qu'on connais la taille via une copie d'index du buffer reçu avant remise a 0! on cible ,(pour moi) plus facilement les conditions à mettre en place pour extraire ce dons on à besoin du message reçu!

En tous cas, c'est plus facile pour moi d'envoyer sur le nextion, que de recevoir!!!

2terium: Crois tu qu'on puisse brancher le Nextion sur l'arduino, et l'arduino sur le port serie?? (aie, j'ai un peut peur du resultat!!)

Ce n'est pas trop recommandé, mais oui tu peux le faire pour le debug, cependant certains codes destinés au nextion ne vont pas être interprétés correctement (par exemple les 0xff). Je l'avais fait il y a longtemps et je n'avais pas de problèmes (pour que le nextion interprète la commande il faut qu'elle se termine par 3 0xff).

Vous êtes sûr une mega donc vous connectez le nextion sur Serial1 2 ou 3 et gardez Serial pour la communication avec votre PC

Ensuite le # il faut bien sûr que ce soit vous qui codiez sa réception pour préparer un message au nextion.. faut écrire un petit analyseur de commandes sur le port série

bonsoir a tous,

Un grand merci a vous car j’ai beaucoup mieux compris la gestion d’envoi vers l’écran.
j’ai pu faire plein de modif et finir mon projet.(coté prog).

je pense que mon code n’ai pas du tout simplifié mais il a l’avantage de faire ce que je voulais.

je vous met en pièce jointe mon programme pour vous montrer.

Maintenant reste a faire une coque pour tout ca en impression 3d, encore de longues heures de boulot devant moi.

La suite serait de pouvoir consulter tout ca a distance depuis internet, mais la je ne me suis pas encore pencher sur le problème.

arrosage_module_ecran_mega.ino (15.8 KB)

J-M-L merci, je verrais pour l'analyseur, mais je crois que vu mon niveau, pour l'instant, je vais continuer avec le simulateur.

Pour le type de carte, je suis sur nano!! Plus y'as de contraintes!! plus c'est marrant! ;)

Kamill, même sur le simulateur parfois ça bug, des fois l'arduino réagis pas!! Et justement, je me sert des 0xff comme marqueur de réception. je copie la taille de l'indexation du buffer puis je le remet a zero, ça me permet de connaitre la taille du message, et de préparer la réception d’après!(voilà ou j'en suis pour l'instant).

Phanouf1, tu t'es laché sur les Serial.write!!

tu peut te faire une petite fonction bien pratique avec le nextion:

void endNextionCommand(){

Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

}

C'est pas grand chose, mais tu vas économiser des lignes ;)

Bon courage a toi et bonne continuation.

Bonjour,

Effectivement 2terium, avec ça je vais gagner pas mal de ligne et apprendre à utiliser des fonctions. Merci à toi.

Bonjour, Je reviens vers vous pour un autre problème sur le même projet. Je ne sais pas si il faut ouvrir un nouveau sujet ? Mon problème, le programme fonctionne bien sur table mais des que je le branche en réel j'ai un problème sur une entrée qui varie toute seul. Je vous explique. En entrée sur la pin 42 par exemple j'ai une entrée d'un relais pour simuler un bouton poussoir (donc gnd vers relais qui quand il se ferme me renvoi le gnd en pin 42).j'ai mis en input_pullup et en input avec résistance de 10kohm comme j'ai pu trouver mais j'ai toujours se contact qui fait des impulsions quand il veut. Auriez vous une idée ? J'ai aussi essayer en passant par le 5v et résistance de pulldown mais pareil. Merci

Bonjour,

Il faut que tu fasses un traitement d'anti rebond par logiciel. Tu peux aussi essayer d'ajouter un condensateur pour un filtrage hard.

Merci Kamill de ta réponse rapide. J'ai pas préciser mais mon défaut de contact arrive aléatoirement 2 ou 3 ou 5 min après un contact. Donc si j'ai bien compris le traitement anti rebond cela serait plus au moment de l'appuie ? Donc la solution hard avec un condensateur me paraît plus approprié. Pourrais tu m'aider pour le type de condensateur à utilisé stp car je ne sais pas quoi mettre. Merci