comment envoyer des informations de l'arduino vers nextion

Bonjours a tous, je viens demander de l'aider. J'écume depuis des semaine les forums afin de pouvoir incorporer plusieurs sketch arduino en un, pour créer mon propre sketch.

Cependant je ne comprend pas comment afficher a l'écran de mon nextion, les informations obtenu par mon arduino.

par exemple dans ce cas je voudrais afficher l'heure dans une fenêtre.
HEURE dans la fenetre "timeheure".
MINUTE dans la fenetre "timeminute".

lorsque je met en route le moniteur série de l'arduino j'ai bien l'heure qui s'affiche mais comment l'envoyer au nextion.

voici mon debut de code qui a pour le moment des informations qui parte du nextion vers l'arduino et la réception des donnés pour une sonde DHT22.

si une âme charitable peu m'aider ca serai cool.

//declaration des librairies.

#include "DHT.h"
#include <Wire.h>
#include "RTClib.h"

//declaration des constante.

const int LUMMIERE=8;
const int CHIHIROS=7;
const int POMPE=6;
const int CO2=5;
const int CHAUFFAGE=4;

 DHT dht(DHTPIN, DHTTYPE);
RTC_DS3231 rtc;

 
#define DHTPIN 2  // on declare DHTPIN sur 2.
#define DHTTYPE DHT11 // on declare le type de sonde DHT.


float temperature = 0.00f;
float humidity = 0.00f;






String STRrecu = " " ;  //  déclaration de variable

void setup()              //  partie setup qui ne sera executé qu'une fois
{
  Serial.begin(9600);     //  initialisation du port serie à 9600 bits par seconde
  Serial.setTimeout(100); //  définition du temps de scrutation quant on utilise Serial.readString()par défaut à 1000ms (le programme et en pause pendant la scutation).
  pinMode(8, OUTPUT);   // définition de la pin 8 comme port de sortie.
  pinMode(7, OUTPUT);   // définition de la pin 7 comme port de sortie.
  pinMode(6, OUTPUT);   // définition de la pin 6 comme port de sortie.
  pinMode(5, OUTPUT);   // définition de la pin 5 comme port de sortie.
  pinMode(4, OUTPUT);   // définition de la pin 4 comme port de sortie.
  dht.begin(); 

  digitalWrite( POMPE , HIGH );   //demarrage de la pompe au demmarage du programme en cas de coupure de courrant la pompe repart seul sans toucher lécran.
  digitalWrite( CHAUFFAGE , HIGH );   //demarrage du chauffage au demmarage du programme en cas de coupure de courrant le chauffage repart seul sans toucher lécran.


  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
 
}



void loop()               //  partie programme qui sera lu en boucle
{
    
  STRrecu = Serial.readString();      //  recevoir une chaine de characters (le programme attend 100ms que la chaine ce finisse à partir de la reception du 1er character)
  
//--------------------statut lummiere-----------------------------------------------------
  if (( ( STRrecu ) == ("lummiereon") ))   //  si la chaine de characters ="ledon"
  {
    digitalWrite( LUMMIERE , HIGH );         //  alors mettre le pin 8 au niveau haut (5v)
  }
  if (( ( STRrecu ) == ("lummiereoff") ))  //  si la chaine de characters ="ledoff"
  {
    digitalWrite( LUMMIERE , LOW );          //  alors mettre le pin 8 au niveau bas (0v)
  }
//----------------------------------------------------------------------------------------

//--------------------statut chihiros-----------------------------------------------------
  if (( ( STRrecu ) == ("chihiroson") ))  //  si la chaine de characters ="ledoff"
  {
    digitalWrite( CHIHIROS , HIGH );         //  alors mettre le pin 7 au niveau haut (5v)
  }
  if (( ( STRrecu ) == ("chihirosoff") ))  //  si la chaine de characters ="ledoff"
  {
    digitalWrite( CHIHIROS , LOW );          //  alors mettre le pin 7 au niveau bas (0v)
  }
//----------------------------------------------------------------------------------------

//--------------------statut pompe--------------------------------------------------------
  if (( ( STRrecu ) == ("pompeon") ))  //  si la chaine de characters ="ledoff"
  {
    digitalWrite( POMPE , HIGH );         //  alors mettre le pin 6 au niveau haut (5v)
  }
  if (( ( STRrecu ) == ("pompeoff") ))  //  si la chaine de characters ="ledoff"
  {
    digitalWrite( POMPE , LOW );          //  alors mettre le pin 6 au niveau bas (0v)
  }
//----------------------------------------------------------------------------------------

//--------------------satut co2-----------------------------------------------------------
 if (( ( STRrecu ) == ("co2on") ))  //  si la chaine de characters ="ledoff"
 {
   digitalWrite( CO2 , HIGH );         //  alors mettre le pin 6 au niveau haut (5v)
  }
 if (( ( STRrecu ) == ("co2off") ))  //  si la chaine de characters ="ledoff"
 {
   digitalWrite( CO2 , LOW );          //  alors mettre le pin 6 au niveau bas (0v)
  }
//----------------------------------------------------------------------------------------

//--------------------statut chauffage----------------------------------------------------
 if (( ( STRrecu ) == ("chauffageon") ))  //  si la chaine de characters ="ledoff"
 {
   digitalWrite( CHAUFFAGE , HIGH );         //  alors mettre le pin 6 au niveau haut (5v)
  }
 if (( ( STRrecu ) == ("chauffageoff") ))  //  si la chaine de characters ="ledoff"
 {
   digitalWrite( CHAUFFAGE , LOW );          //  alors mettre le pin 6 au niveau bas (0v)
  }
//----------------------------------------------------------------------------------------


    DateTime now = rtc.now();
    

    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
  

    Serial.println();
    delay(100);
}



  

void readSensor()
{
 humidity = dht.readHumidity();
 temperature = dht.readTemperature();
}

void sendHumidityToNextion()
{
  String command = "humidity.txt=\""+String(humidity,0)+"\"";
  Serial.print(command);
  endNextionCommand();
}

void sendTemperatureToNextion()
{
  String command = "temperature.txt=\""+String(temperature,0)+"\"";
  Serial.print(command);
  endNextionCommand();
}

void endNextionCommand()
{
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  }



//  retour au début de la boucle

a_l_aide.ino.ino (5.15 KB)

Avec

Serial.print()

Tu ernvoies des données vers le moniteur série via le premier port série de ta carte Arduino et via le port USB

Si tu utilise le port Serial pour comminuquer avec le moniteur série, il te faut un autre port série pour communiquer avec l'afficheur Nextion (Serial1 ou Serial2, par exemple)

  • Quel est le type de ta carte Arduino ?
  • Quel est le modèle de ton afficheur Nextion ?
  • Comment est configuré le port série de l'afficheur ?
  • Quel est le cablage utilisé entre la carte Arduino et l'afficheur ?

Si tu as une seule page sur l'afficheur ou si tu envoie des données sur la page active, tes foncttions sendTemperatureToNextion() et endNextionCommand() sont correctes

Merci de t'intéresser à moi

Il faut lire la doc... utiliser les classes fournies et regarder les exemples pour préparer l’interface

Tiens c'est bizarre j'avais écrit tout un texte il n'apparaît pas.

Pour l'arduino c'est un mega 2560.
Le nextion que j'ai commandé et le 5 pouces en classique NX8048T050.
L'écran nextion sera brancher sur l'arduino à travers les pin RX et TX.
Sur l'afficheur je suis en 9600 Baud.

"Comment est configuré le port série de l'afficheur ?" Là-bas contre j'ai pas compris quelle est ta question. Si c'est ce que je pense le TX sur RX et le RX sur le TX.

L'écran nextion sera branché sur l'arduino à travers les pin RX et TX.

Votre MEGA a plusieurs ports Série. celui qui s'appelle Serial est connecté aussi à votre liaison USB et vous l'utiliserez pour charger un programme sur votre MEGA ou afficher des information de debug --> il faut connecter votre Nextion sur Serial1 pins 19 (RX) et 18 (TX), Serial2 pins 17 (RX) et 16 (TX), ou Serial3 pins 15 (RX) et 14 (TX)

Bien sûr il faut croiser les fils, donc le Rx de l'Arduino va sur le Tx du Nextion et inversement
Il faut aussi relier les grounds des 2 cartes

Ok merci pour les renseignements sur les ports séries. Donc j'ai bien l'heure qui s'affiche sur le moniteur série, et du coup comment j'envoie ça sur nextion ?

Là, il y a la doc qui décrit l'interface avec les afficheurs Nextion:

Là, il y a la librairie avec des exemples:

Tu commences par essayer les exemples et tu comprendras vite comment fonctionne ces afficheurs

Si tu branche ton Nextion sur le Serial1 (pins 19 =RX et pin 18=TX)
Dans ton code

void setup()              //  partie setup qui ne sera executé qu'une fois
{
  Serial1.begin(9600);     //  initialisation du port serie 1 à 9600 pour l'afficheur Nextion
   ...
}

void sendHumidityToNextion()
{
  String command = "humidity.txt=\""+String(humidity,0)+"\"";
  Serial1.print(command);
  endNextionCommand();
}

void sendTemperatureToNextion()
{
  String command = "temperature.txt=\""+String(temperature,0)+"\"";
  Serial1.print(command);
  endNextionCommand();
}

void endNextionCommand()
{
  Serial1.write(0xff);
  Seria1l.write(0xff);
  Serial1.write(0xff);
  }

Super cool messieurs, merci de me mettre dans la voie :slight_smile: . Par contre j'aurais une petite question comment se fait-il qu'il n'y ait pas de tuto sur ces écrans nextions? Est-ce que c'est un mauvais produit? Pourtant leurs possibilités sont impressionnantes.

bricodoudou:
Super cool messieurs, merci de me mettre dans la voie :slight_smile: . Par contre j'aurais une petite question comment se fait-il qu'il n'y ait pas de tuto sur ces écrans nextions? Est-ce que c'est un mauvais produit? Pourtant leurs possibilités sont impressionnantes.

cf le post 7 pour les tutos... ils ont de la doc et une librairie arduino mais ce n'est pas un produit spécialement Arduino et ils ont leur propre forum / communauté d'utilisateurs. faudrait poster là bas plutôt

bricodoudou:
Est-ce que c'est un mauvais produit? Pourtant leurs possibilités sont impressionnantes.

ça ne se configure que sur PC (moi je suis mac et linux donc j'y touche pas), les APIs sont limitées pour faire des choses un peu avancées et c'est assez cher... donc pour bidouiller on préfère souvent prendre un écran LCD et faire sa propre interface

Si tu cherches bien, les tutos ne manquent pas. Bien heureusement car la documentation disponible est succinte

Personnellement, je n'utilise pas la librairie Nextion, je la trouve lourde à utiliser et trop gourmande en ressources.
Mais il faut jouer entre le code coté Arduino et les ressources disponibles (code) coté Nextion
On ne peut pas tout faire coté Nextion, mais ce qui peut être fait allège considérablement le code Arduino