Envoi d'une variable d'un écran Nextion vers un arduino sans bibliothèque.

Bonjour,

Je viens chercher de l’aide ici car je n’ai pas trouvé/compris la solution à mon problème sur les autres poste et forum.
Voici mon problème:
J’ai récemment fais l’acquisition d’un écran Nextion, le Enhanced NX4832K035-011.
Mon soucie concerne l’envoi d’un entier du Nextion vers l’arduino.
Je m’explique sur une des page de mon écran j’ai la possibilité de régler une température “consigne”.
Cette température est un attribut de type number, et je voudrais renvoyer cette valeur sous forme d’entier et non de string vers mon arduino.
Je précise que je n’utilise pas la bibliothèque Nextion.
Je vous joint une photo de la page en question si ça peut aider.
N’hésitez pas a me solliciter pour tout autre information complémentaire.

Je vous remercie par avance pour votre aide.

Paul

Ton message n'est pas dans la bonne section, utilise le bouton 'report to moderator' pour demander de le déplacer. Ensuite lis les messages épinglés en haut du forum pour voir comment poster une image dans un message...

Merci pour les précisions je modifie ça.

Topic déplacé...

Merci beaucoup jfs!

L'image |500x281 Je connais très peu les écrans Nextion mais je crois qu'ils peuvent communiquer avec l'arduino par la liaison série. Si c'est le cas, tu peux passer ta valeur comme ça. Il existe des tutos pour se servir de la liaison série, par exemple celui ci

Si ton port série est déjà utilisé, pour le PC par exemple, tu peut utiliser la bibliothèque softwareserial qui te permet de créer d'autres liaisons séries.

Edit : en effet , voici un tuto pour faire ça

Bonjour,

Merci pour votre réponse. En effet le Nextion communique via la liaison série de l'arduino. Mon projet est déjà bien avancé, je commence à comprendre les subtilités du logiciel nextion ( mais j'ai du mal). Mais mon problème persiste . J'arrive uniquement à envoyer des chaînes de caractères ( des strings) et pas des entier ( Et encore je comprend pas tout)... De plus j'ai pas de soucis à communiquer de l'arduino vers le Nextion ( mes capteurs connectés à l'arduino renvoient bien les valeurs à l'écran).

Pour faire simple, se que je voudrais faire:

  • ma température "réel" est envoyée par l'arduino sur l'écran (Ça fonctionne)

  • ma température "consigne" se règle depuis l'écran nextion avec une incrémentation +ou-1 via les boutons tactiles de l'écran (Ça fonctionne)

  • quand ma température "réel" dépasse la température "consigne" je voudrais que le Nextion envoi l'info à l'arduino pour activer ou désactiver une sortie ( ça fonctionne pas)

Pour faire encore plus simple je veux uniquement renvoyer la température "consigne" réglé via l'écran à l'arduino sous forme d'un entier le plus simplement possible.

Merci d'avance!

Bonjour,

Il suffit de convertir la chaine reçue en entier (avec atoi par exemple).

Merci pour ta réponse kamill. Oui effectivement c'est un option. J'y avais pensé mais je voudrais éviter d'utiliser des fonctions pour changer le type de ma variable. Il y a pas un moyen tout simple d'envoyer un entier depuis un nextion ?

Paul49: Il y a pas un moyen tout simple d'envoyer un entier depuis un nextion ?

Ça, c'est dans la doc Nextion qu'il faut le chercher.

bonjour,

J'arrive uniquement à envoyer des chaînes de caractères ( des strings) et pas des entier ( Et encore je comprend pas tout)...

envoyer autre chose que des chaines c'est prendre le risque d'envoyer des caractères de contrôles.

Effectivement, il existe la fonction "covx" qui permet de convertir une variable de type numérique en texte ou de texte en type numérique. Mais pour ça je pense qu'il faut utiliser leur bibliothèque. Et comme je le disais précédemment mon but est de ne pas utiliser de bibliothèque Nextion. Je comprend pas qu'il n'existe pas de moyen simple pour communiquer avec la liaison série... Vraiment dommage que Nextion ne soit pas open source....

En tout cas merci pour vos réponses, on va bien finir par trouver!

Bonjour

Pour avoir beaucoups cherché une solution fiable d'une com de nextion vers arduino je me permet de vous donner les infos qui m'on permis de réussir.

le nextion ne peut envoyer que du .txt, c'est dommage mais c'est comme cela.

Les exemples de bouts de prog que je donne, proviennent de PerryBebbington sur le forum anglais https://forum.arduino.cc/index.php?topic=604185.0

Merci a lui.

Coté Nextion

printh a5     //Start
printh a5     //Start
printh a5     //Start
printh 02 //N° page /data 01
print va100.txt      // pour qui? //data 02
print va97.txt      //valeur a transmettre // 4 datas

Coté arduino

//==============================================Reception données de Nextion =======================================

// 3X A5     N° de page     1 Caractère (qui envoi)   4 caractères de données ex: 19.6 ou 4444

void HMI_read() {
  static uint8_t HMI_read_data[10];         //This is a temporary buffer to hold the data from the display. Space for 10 bytes although this demonstration only uses 6 bytes
  static uint8_t HMI_read_data_i;           //This is a count of how many bytes have been received from the display.
  static uint8_t a5count;                   //0xa5 repeated 3 times is used as a start indicator, this is a count of how many times it has been received.
  uint8_t readreceptnextion;                //This is to hold the last received byte to ensure that it is only read from the receive buffer once.

  while (Serial2.available() > 0) {         //Read every byte in the receive buffer
    readreceptnextion = Serial2.read();

    if (readreceptnextion == 0xa5) {        //Count the number of times 0xa5 has been received
      ++a5count;                            // caracteres de demarrage de message
      if (a5count > 2) {
        a5count = 0;
        HMI_read_data_i = 0;
      }
    }
    else {
      a5count = 0;
    }
    // =========================================== fin de reception des caractères de demarrage ================================================
    // Lecture des datas

    HMI_read_data[HMI_read_data_i] = readreceptnextion;
    if (HMI_read_data_i == 6) {
      text[1] = (HMI_read_data[1]);
      text[2] = (HMI_read_data[2]);
      text[3] = (HMI_read_data[3]);
      text[4] = (HMI_read_data[4]);
      text[5] = (HMI_read_data[5]);
      text[6] = (HMI_read_data[6]);

      numpage = text[1];
      quichar = (text[2]);
      recup[1] = text[3];//1er caractere ex:1
      recup[2] = text[4];//2eme caractere ex:9
      recup[3] = text[5];//3eme caractere ex: .
      recup[4] = text[6];//4eme caractere ex 6   =19.6
      valeur = atof(recup);

    }
    ++HMI_read_data_i;
    if (HMI_read_data_i > 9) {
      HMI_read_data_i = 9;
    }
  }

}

Merci beaucoup pour votre réponse. Je part en déplacement quelques jours j'esserai votre solution dès que je rentre . Bien sûr je vous tiendrais au courant. Bonne journée.