Go Down

Topic: Envoi d'une variable d'un écran Nextion vers un arduino sans bibliothèque. (Read 465 times) previous topic - next topic

Paul49

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


lesept

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...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Paul49


jfs

Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.


lesept

L'image

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
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Paul49

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!

kamill

Bonjour,

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

Paul49

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 ?

fdufnews

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.

jfs59

bonjour,

Quote
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.
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours.

Lao Tseu.

Paul49

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!

gandalf60

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

Code: [Select]
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

Code: [Select]
//==============================================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;
    }
  }

}




Paul49

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.


Go Up