Pb de librairies

Bonjour,
Je tatonne un peu car j'essaie de me débrouiller seul ainsi qu'avec les tutaux mais là, je ne comprends pas le problème.
Je souhaite juste pour l'instant récupérer la date et l'heure d'un GPS NEO6 et l'afficher sur un ecran Nextion. J'ai donc paramétrer avec Nextion Editor les cases attendant les données mais lorsque je compile mon programme, soit il me dit que la librairie n'existe pas ou que la syntaxe utilisé n'est pas reconnu. Pourtant c'est ainsi que j'ai vu les exemples. Aussi bien pour le GPS que pour le Nextion.

avez-vous une idée ?

#include <SoftwareSerial.h>
#include <TinyGPSPlus.h>
#include <Nextion.h>
#include <NexText.h>

TinyGPSPlus gps;
SoftwareSerial ss(3, 2); // RX, TX for GPS module
SoftwareSerial nextionSerial(7, 8); // RX, TX for Nextion display

NexText tdate = NexText(0, 1, "tdate");
NexText theure = NexText(0, 2, "theure");

unsigned long year, month, day, hour, minute, second;
unsigned long age;

void setup() {
  Serial.begin(115200);
  ss.begin(9600); // GPS module baud rate
  nextionSerial.begin(9600); // Nextion display baud rate

  nexInit(); // Initialize Nextion display
}

void loop() {
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  smartDelay(1000);

  while (ss.available() > 0) {
    if (gps.encode(ss.read())) {
      // Get date and time from GPS
      int year, month, day, hour, minute, second;
      gps.crack_datetime(&year, &month, &day, &hour, &minute, &second);

      // Format date and time strings
      char dateString[12];
      snprintf(dateString, sizeof(dateString), "%02d/%02d/%02d", month, day, year);
      
      char timeString[9];
      snprintf(timeString, sizeof(timeString), "%02d:%02d:%02d", hour, minute, second);

      // Update Nextion components with date and time
      dateText.setText(dateString);
      timeText.setText(timeString);
    }
  }
}
void smartDelay(unsigned long ms) {
  unsigned long start = millis();
  do {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}


Voila le message d'erreur

C:\Users\legion\Documents\Arduino\sketch_mar12a\sketch_mar12a.ino: In function 'void loop()':
C:\Users\legion\Documents\Arduino\sketch_mar12a\sketch_mar12a.ino:32:11: error: 'class TinyGPSPlus' has no member named 'crack_datetime'
       gps.crack_datetime(&year, &month, &day, &hour, &minute, &second);
           ^~~~~~~~~~~~~~
C:\Users\legion\Documents\Arduino\sketch_mar12a\sketch_mar12a.ino:42:7: error: 'dateText' was not declared in this scope
       dateText.setText(dateString);
       ^~~~~~~~
C:\Users\legion\Documents\Arduino\sketch_mar12a\sketch_mar12a.ino:42:7: note: suggested alternative: 'NexText'
       dateText.setText(dateString);
       ^~~~~~~~
       NexText
C:\Users\legion\Documents\Arduino\sketch_mar12a\sketch_mar12a.ino:43:7: error: 'timeText' was not declared in this scope
       timeText.setText(timeString);
       ^~~~~~~~
C:\Users\legion\Documents\Arduino\sketch_mar12a\sketch_mar12a.ino:43:7: note: suggested alternative: 'NexText'
       timeText.setText(timeString);
       ^~~~~~~~
       NexText

exit status 1

Compilation error: 'class TinyGPSPlus' has no member named 'crack_datetime'

Pour la première erreur, crack_datetime existe dans la bibliothèque TinyGPS mais pas dans TinyGPSPlus.

Pour les autres erreurs, elles viennent du fait que tu utilises les variables dateText et timeText que tu n'as jamais définies. Tu voulais probablement utiliser dateString et timeString ?

Je déplace la discussion dans le forum principal.

Bonsoir,
Merci du retour. En fait avec TinyGPS j'ai la même chose donc j'ai essayé d'autres librairie au cas ou.

En global ou peux-t-on trouver les syntaxes utilisées dans les librairies ?
Je remplace dateText par datesting ?
Dans la librairies Nextion cela n'existe pas non plus, j'ai trouver une autre librairie ITEADLIB_Arduino_Nextion-0.7.0 mais je ne comprend pas pourquoi tout n'est pas dans la librairie.

Merci

Dans la doc s’il y en a une sur le GitHub ou sinon il faut regarder le code (le .h) et les exemples

Dans le fichier TinyGPS.h :

  void crack_datetime(int *year, byte *month, byte *day, 
    byte *hour, byte *minute, byte *second, byte *hundredths = 0, unsigned long *fix_age = 0);

Pour que ça compile, il faut charge TinyGPS.h et non TinyGPSPlus.h :
#include <TinyGPS.h>
en espérant que ça ne va rien casser dans le reste du code...

Non, en fait en relisant, je pense que je me suis gouré. Je suppose que dateText et timeText sont plutôt liées à ton Nextion ? Je vois la méthode setText dans la bibliothèque NexText.h et tu as déclaré des zones de texte ici :

Donc, je suppose que les lignes qui posent problème servent à mettre ces zones de texte à jour (je n'ai jamais utilisé d'écran Nextion, d'où ces suppositions). Donc, il faut écrire :

      tdate.setText(dateString);
      theure .setText(timeString);

Bonjour,
Je vais essayer ça. Oui c'est bien nextion.
En fait je veux prendre les valeurs GPS pour les afficher sur mon nextion qui sera sur mon volant.

Fabrice

Bon, tous le temps passé à ne pas comprendre m'embête un peu.
J'avoue ne plus savoir quoi faire et je reste persuader que ce n'est pas grand chose.
Je suis reparti au plus simple, cad envoyer des datas simple sur le nextion et déjà je galère !!
S'il n'est pas en TxRx 0,1 ça fonctionne pas, j'ai essayer SoftwareSerial, mais vous en dites beaucoup de mal :), du coup j'ai essayé NeoSWSerial et c'est pareil

#include <NeoSWSerial.h>

// Déclaration de l'objet SoftwareSerial pour communiquer avec l'écran Nextion
NeoSWSerial nextionSerial(0, 1); // RX, TX

void setup() {
  // Ouvre la communication série avec une vitesse de 9600 bauds
 //Serial.begin(9600);
  nextionSerial.begin(9600);
}

void loop() {
  // Envoie l'instruction pour afficher "Bonjour" sur l'écran Nextion
  nextionSerial.print("tdate.txt=");
  nextionSerial.print("\"");
  nextionSerial.print("bonjour");
  nextionSerial.print("\"");
  nextionSerial.write(0xFF); // Envoie de la commande End of Text
  nextionSerial.write(0xFF);
  nextionSerial.write(0xFF);

  nextionSerial.print("nsat.val=15");
  nextionSerial.write(0xFF); // Envoie de la commande End of Text
  nextionSerial.write(0xFF);
  nextionSerial.write(0xFF);

  // Attend 2 secondes avant d'envoyer la prochaine instruction
  delay(500);
  nextionSerial.print("tdate.txt=");
  nextionSerial.print("\"");
  nextionSerial.print("au revoir");
  nextionSerial.print("\"");
  nextionSerial.write(0xFF); // Envoie de la commande End of Text
  nextionSerial.write(0xFF);
  nextionSerial.write(0xFF);

  nextionSerial.print("nsat.val=48");
  nextionSerial.write(0xFF); // Envoie de la commande End of Text
  nextionSerial.write(0xFF);
  nextionSerial.write(0xFF);
delay(500);
}

Donc sur l'émulateur Nextion Editor c'est nickel et en vrai ça marchotte, toutes les lettres n'apparaisse pas....Je suppose conflit avec USB mais alors comment faire ? I2C je ne connais pas du tout.

Si vous avez des idées...
Fabrice

quel arduino avez vous ?

C'est un UNO et au final faudrait que cela passe dans un nano, c'est pour s'intégrer dans mon volant.

UNO ou Nano c'est la même chose niveau port série et mémoire.

êtes vous obligé de prendre un nextion?

Non pas obligé mais maintenant que j'ai investi 50euros, c'est dommage.
Après je trouvais le coté sympathique de pouvoir gérer par clic ecran plusieurs affichage différent de mon tableau de bord, ayant toujours les mêmes données, la vitesse via le GPS et le compte tour via....je sais pas encore.

Il y aurait une alternative ecran couleur ?

Il y’a d’autres écrans avec fonction touch qui ne nécessitent pas de liaison série

Mais si vous avez déjà essayé déjà avec investi il faut le faire marcher

Si vous alternez en permanence entre les deux ports séries vous risquez de perdre des données d’un côté car la partie softwareserial n’est pas robuste

Il faudrait uniquement écouter le gps - et quand vous aurez un fix - vous arrêtez d’écouter et mettez à jour l’écran.

Ça veut dire cependant que vous allez rater des clicks sur l’écran sans doute

Si les deux fonctionnent en parallèle j’ai ne sais pas si ça va être robuste

Les clics sur l'écran sont juste fait au moment de démarrer la voiture, histoire de changer d'affichage mais une fois fait j'y touche plus et combien même il n'y a pas d'interaction entre l'écran et larduino. Les écrans sont géré par le nextion en autarcie.
Seule les données de vitesse doivent être mis à jour en instantané.

Je ne trouve pas de méthode pour le connecter simplement. Je trouve bizarre que je ne peux pas mettre sur un autre port série :thinking:

Fabrice

Oui mais on ne fait pas du SoftWareSerial sur les IOs 0 et 1 qui correspondent à la liaison série matérielle. En plus si ton Nextion est connecté sur les IOs 0 et 1 il est en conflit avec l'interface série de l'ATmega et le circuit d'interface USB.

Je comprends ça mais si je mets autre chose mon écran n'est plus animé ! Ce que je ne comprends pas du tout d'ailleurs et j'ai passé beaucoup de temps sans y arriver.

Il y a des notifications sur le port série sans doute

Je pensais surtout trouver quelqu'un qui aurait la solution pour avancer plus vite, j'ai encore passer 15 heures dessus ce weekend ! Et du coup le reste n'avance pas non plus....

Serialisez les problèmes.

Le GPS parlant lentement, mettez le en software serial
Mettez l’écran sur Serial mais débranchez le pour charger le code
Écrivez un bout de code qui boucle tant qu’il n’y a pas un fix
Une fois le fix obtenu envoyez cela à l’écran

Bonjour,
Très matinal :grin:.
J'ai déjà opté pour cette solution même sans le GPS juste Envoi donnée toutes les 500ms sur l'écran et déjà c'est moyen.
Si je passe par un méga en version mini vous pensez que cela pourrait résolu mon PB ou alors..... pas d'autres idées, sur les forums et tutaux ils sont tous en 0-1 et n'ont pas l'air d'avoir de soucis.
Fabrice

faut profiter de la journée :slight_smile:

le GPS par défaut généralement envoie une trame par seconde. Avez vous modifié le votre?