Kommunikation mit dem Nextion Display

Hallo Gemeinde
da ich bischen viele Baustellen habe, nehme ich sie mir jetzt Stück für Stück vor, dass ich mal auf nen Grünen Zweig komme. Ich habe jetzt gerade mal zum wieder auffrischen der Kommunkikation Arduino - Nextion, ein Nexition 3,5 Zoll an einen Arduion Mega an die Serial2 angehängt. Und die Kommunikation klappt natürlich.
So viel ich weiß, kann man keine Kommazahlen direkt zum Arduino übetragen und diese darauf darstellen. Also muss man die Zahlen Teilen in vor dem Komma und nach dem Komma ? Ich habe mir den Aufbau am Nextion schon klar gemacht.

Ein Zahlenfeld für die Zahl vor dem Komma, ein Textfeld für das Komma, ein Zahlenfeld für die Zahl hinter dem Komma, ein Textfeld für das “V” dahinter, das für Volt steht.

Oder hat sich in den 5 Jahren, wo ich das Nextion nicht mehr in Arbeite hatte, da was geändert, dass man KommaZahlen jetzt darstellen kann ?

Der zweite Punkt wäre. Kann ich Text auch aufs Nextion übertragen und in einem Textfeld darstellen ?

Franz

Ein bischen läuft schon.

Von wo aus willst du die Übertragen?

Ich vermute du willst aus dem Arduino Daten auf dem Nextion darstellen. Du kannst deine Zahl mit Komma und V als ein String im Arduino konvertieren und dann nur den String in ein Textfeld senden.

Wieso geändert?
Die Nextion Displays haben schon immer Text- und Zahlenfelder.
Und damit geht das ohne Probleme auch mit Komma im Textfeld.
Wurde dir ja auch schon geschrieben.

Ws mache ich da schon wieder falsch ?
Ich schicke vom Arduino an das Nextion Textfeld, Type 116, auf der Seite “3”, diese Anweisungen.

Serial2.print("page 3");
  Serial2.write(NexT, 3);
  Serial2.print("Textfeld1.val=Ein_Test");
  Serial2.write(NexT, 3);

Und NICHTS passiert. :roll_eyes: Also doch, der erste Teil schon, Die Anzeige wechselt auf die Seite 3, aber der Text “Ein Test” erscheint nicht im Textfeld.

Fehlt da nicht die 3 x 0xFF ?

Das ist die Zeile

byte NexT[3] = { 255, 255, 255 };

Serial2.write(NexT, 3);

und das funktioniert auch.

Also meine glasskugel ist defekt, ich kann nicht mehr auf dein Monitor schauen., wo her sollen wir wissen was Serial2.write(NexT, 3); macht.

Dass da nix geht, liegt vermutlich daran, dass beim Textfeld nicht val, sondern txt beschrieben werden sollte.
Versuch mal

Serial2.print("Textfeld1.txt=Ein_Test");

Jedenfalls ist das mir so, z.B. das Textfeld "Sendername" aus meinem Radio:

Nur der Vollständigkeit halber:
Das war im anderen Thread in Post #10 schon zu sehen:

byte NexT[3] = { 255, 255, 255 };

Ok, dan kommt es wie kommen muss, man sollte schon alles zeigen, nicht nur nichts sagende Teilstücke.

Soll ich also keine Antwort auf deine Frage geben ?? Ich habe einfach nur beantwortet, dass das dieses dreimal 0xff ist.

Danke, teste ich gleich mal.

Setze deinem Text immer die Seitenbezeichnung davor.
Beispiel:

Serial2.print("Seite.Feldname.txt=dein_text");
Serial2.write(NexT, 3);

oder bei Variablen

Serial2.print("Seite.Feldname.txt=\"");
Serial2.print(deine Variable);
Serial2.write(NexT, 3);

Ich setzte hier mal das Programm rein. Ist natürlich nur eine Momentaufnahme, weil ich ja alles Mögliche testen will.


#include <Wire.h>
byte NexT[3] = { 255, 255, 255 };  // global deklarieren
/*
Wird dann so benutzt:
Serial2.write(NexT, 3);
*/
byte Seite = 0;  // Nextion Startseite einstellen
int Messung = 35;
int ads_mv0 = 30;
String Text31 = "Ein Test";
unsigned long Sekundenablauf01 = 0;
const unsigned long Pausezeit01 = 5000;
//
void setup() {
  Serial.begin(115200);
  Serial2.begin(9600);

  Serial2.print("Volt1.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  Serial2.print(Messung);
  Serial2.write(NexT, 3);
  Serial2.print("Volt2.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.print(ads_mv0);
  Serial2.write(NexT, 3);
}
//
void loop() {
  kommunikation();
}
//
void kommunikation() {
  Serial2.print("page 3");
  Serial2.write(NexT, 3);
  Serial2.print("Daten_suchen.Textfeld1.txt=Ein_Test");
  Serial2.write(NexT, 3);
  delay(3000);
  Serial2.print("page 0");
  Serial2.write(NexT, 3);
  Serial2.print("Volt3.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  Serial2.print(Messung);
  Serial2.write(NexT, 3);
  Serial2.print("Volt4.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.print(ads_mv0);
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=37");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=32");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt3.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=39");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
}

Klappt übrigens noch immer nicht. :roll_eyes: Also denText ausgeben auf Seite 3 “Daten_suchen” Textfeld1.
Wire.h wird noch nicht benötigt. habe ich nur schon mal rein, dass ich es nicht vergesse, wenn ich das Abfragen von Nachrichten Nextion → Arduino testen will.

Wenn es nicht zu geheim ist:
Häng mal an Dein .HMI-File ein .txt dran und lade es hoch (xxx.HMI.txt). Ich würde gerne nachher mal draufschauen.

Mein_3.5zoll.HMI.txt (7,4 MB)

Klar, Syntaxfehler, merkt man doch wenn man doch wenn 1A zurück kommt.

Deshalb das Geeiere bei Text ....

text_send = "start.temp2.txt=\"" + String(temp_pool, 1) + "\"";
senden_an_display();

cu

Danke.
@hawe07546 war schneller als ich.

Die Anführungszeichen können im Text mit angegeben werden:

Serial2.print("Daten_suchen.Textfeld1.txt=\"Ein_Test\"");

Verstehe ich nicht??? Das Nextion "redet" über Serial2, zumindest sehe ich das so :roll_eyes:.

Und das ist doppelt gemoppelt:

cu

Ja, wenn man was zurück bekommt. Ich werte die Antwort noch nicht aus. :roll_eyes:

Aber OK, danke euch. Wieder ein Stück weiter. Ist ja schon recht aufwendig. Was sagen diese \ dem Nextion ?