[RESOLU] caractère bizarre dans moniteur série

bonjour a tous,

je suis en train de bosser avec un esp32, un écran nextion et les deux cœurs de l'esp32

par moment j'ai des caractères bizarre qui passe sur le moniteur série

la ligne 65 1 xxx est bien une info que je reçoit de mon nextion
comment puis je arriver à savoir ce que veulent dire les petits carré ?

merci a vous

Bonjour,

Deux possibilités :

Vitesse du moniteur série inadéquate

Affichage de données brutes au format non-ascii

merci pour l'infos,
j'ai bien des données qui sont valide (les 65 1 3 etc)
par contre peut être une fonction qui envoie a une vitesse différente ?

que veux tu dire par données brut au format non ascii ??

Salut

L'affichage des petits carrés est-il réalisé par une fonction située dans ton propre code ?

@+

salut,

dans mon code non, j'affiche les messages reçu par le nextion (65 3 2 etc) seulement
je ne sais pas d'ou ils viennent
et cela ne le fait pas tout le temps

après recherche, je pense a des caractères non reconnu qui doivent venir du nextion.
est possible que l'esp32 mélange deux liaison série (2 matériel) ?

j'affiche les messages reçu par le nextion (65 3 2 etc)

Comment les affiches-tu ?
Essaie d'ajouter un caractère reconnaissable avant les informations a afficher, '#' par exemple.

@+

est possible que l'esp32 mélange deux liaison série (2 matériel) ?

Oui.... si le code lui demande de le faire :wink:

Un terminal capable d'afficher les données en hexadécimal permettrait d'en savoir plus sur ces données.
Coolterm par exemple sous Linux, Mac et Windows

normalement il doit pas le faire,
j'essaye avec coolterm de suite pour voir ce qui arrive

verdict,
en ASCII j'ai des petites fléches
et en exa je voit pas grand chose :wink:

bizarre....
pas de valeur hexa pour chacune des flèches ?

Autre piste : mauvais contact dans la liaison TX Nextion -> RX ESP32 ?

je saurais pas faire la différence entre les valeurs hexa des flèches et de ce que je doit recevoir du coup compliqué

j'ai regardé la liaison, essayer de reproduire en la bougeant très violemment et rien vu qui provoque ca
c'est vraiment aléatoire

je teste de désactivé certaine fonction de mon code pour voir si j'arrive a isoler le problème

je saurais pas faire la différence entre les valeurs hexa des flèches et de ce que je doit recevoir du coup compliqué

Cherches des infos sur le code ASCII

en gros : les valeurs inférieures à 0x20 ou supérieures à 0x7F ne donnent pas de lettre ou de chiffre affichable.

Içi le terminal sur le PC recoit certaines données en dehors de la plage [0x20, 0x7F]
lesquelles ? ça permetrait peut être de remonter plus facilement à la source.....



voila mes flèches :wink:

aprés recherche, j'ai le soucis aprés que mon code est executé cette boucle

void getinfoweb () {   // get temp et humi sur serveur web esp01

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis_get_esp >= delay_get_esp) {
    previousMillis_get_esp = currentMillis;

    HTTPClient http;

    // esp01_temp1_t
    http.begin(esp01_temp1_t);
    http.GET();

    payload = http.getString();
    // debut concersion string to int
    //char array[3];
    payload.toCharArray(array, sizeof(array));
    temp1 = atoi(array);
    // fin conversion string to int


    http.end();
    // fin esp01_temp1_t

    // esp01_temp1_h
    http.begin(esp01_temp1_h);
    http.GET();
    payload = http.getString();
    // debut concersion string to int
    // char array[3];
    payload.toCharArray(array, sizeof(array));
    humi1 = atoi(array);
    // fin conversion string to int

    http.end();
    // fin esp01_temp1_h
  }
}

je recherche dans les environs si je trouve quelque choses

voila ce que j'ai dans le terminal en hexa

les FF FF FF correspond bien a une info du nextion (c'est ce qui dit le message est terminé)
j'explorer leur doc pour savoir a quoi correspond le reste

EDIT:

j'ai 4 pages sur le nextion, j'ai le problème sur la 2, 3,4 mais pas la 1ere
je regarde de plus prés

verdict après décodage du code hexa, c'est cette partie qui fait chier

if (temp1_old == temp1) {  //a revoir, con de voir si temp1_old = temp1 je déclare pas le temp1_old ??
      myNextion.setComponentText("temp1", String(temp1));
    }

il ne reconnait pas une variable

j'ai gratter un peu, ma comparaison est con car je me sert pas du temp1_old (une prévision pas faite)
du coup en changeant == par != il exécute pas le setcomponenttext et n'affiche pas des flèches dans le moniteur série
par contre je continue pour savoir pourquoi il prends pas ma variable ^^

Bonjour,

de ce que je comprends, tu utilises la librairie Nextion_Master , je rencontre un problème similaire, visiblement la variable temp1 n'est pas un objet String et donc ça marche pas et en plus le nextion te renvoie un code erreur en hexa ce qui fait que l'affichage sur ton moniteur est exotique, pour la reception du code 65 01 03 FF FF FF c'est tout simplement l'activation de "send componant ID" (case à cocher) dans Nextion Editor et cela corespond au bouton N°3 dans la page 01...
essaie plutôt une commande directe dans ton code du style :

myNextion.setComponentText("t0","COMMENT VAS TU ?");

et regarde bien sur si cela s'affiche dans l'objet t0.txt de la page active du nextion, si ça marche ce n'est pas un problème de TRX série entre ton Arduino et le nextion,
ton pb c'est que le pseudo string que tu envoies n'est pas bon, il faut peut-être creuser dans la bibliothèque pour voir le pb, ou bien t'assurer que tu envoies bien un objet String

pour régler les pb de vitesse il est conseillé de mettre Serial1 ( ou serial que tu utilises) à 9600Bd et dans ton fichier HMI sur la première page dans l'onglet preinitialize event l'instruction suivante: baud=9600 (sans S a baud important !)

voilà si cela peut 'aider
Cordialement,
Jacques

Ha oui, je viens de regarder la lib,

voici le code de setComponent.txt:

boolean Nextion::setComponentText(String component, String txt){
  String componentText = component + ".txt=\"" + txt + "\"";//Set Component text
  sendCommand(componentText.c_str());
  return ack();

voila à partir de la tu devrais peut-être trouver une solution, moi j'ai un autre probleme c'est comment former un objet String a partir d'un tableau de char que je parcours

du style:

EEPROM.get(3020,taille);
      i=0;
      for (int adresse=2700; adresse < (2700+taille+2) ; adresse++){ 
      EEPROM.get(adresse,msg[i]);
      msg3+=msg[i];      
      i++;
       }
       Serial.println(msg3);
       myNextion.setComponentText("t2",msg3);
   }

msg3 est déclarée comme String, sur le moniteur ça marche sur le nextion wallou!!!

si quelqu'un a un conseil il est le bien venu
Cordialement,
Jacques

j'envoie bien ce qu'il faut (mon text temp1 ecrit bien ce que je veut)
seulement quand je suis sur une page ou mon text temp1 n'est pas présent
la il m'affiche l'erreur
du coup comment faire pour bouger une variable d'une autre page ?

je cherche dans la libraire

Depuis l'editeur nextion, change le "vscope" de ta variable temp1 de "local" à "global" (dans le panneau "Attributs" en bas à droite)

Je ne suis pas sur que ça marche mais ça permet d'avoir des variables globales.

Essaie ça et tiens nous au courant.

Sinon il faut être sûr d’être sur la bonne page pour écrire tes variables