Netion Display wieder mal vornehmen

Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Netion Display wieder mal vornehmen

Beitrag von Admin »

Bernhard - Fony hat geschrieben: Do 3. Aug 2023, 15:00 Nicht nur, wenn man bei manchen TFT Lib ( Grundsätzlich Adafruit) nicht aufpasst passiert auch sowas, so am Rande, mag die Adafruit nicht, je nach TFT LCD nehme vom Oli Krause, Bodmer oder LcdWicki ( ist auch sehr gut beschrieben, aber nicht einfach, man muss sich einarbeiten )
Ich muss mich mal wieder in die Nextion Displays einarbeiten. Die habe ich vor so etwa 2-3 Jahren schon mal komplett durchgepauckt, aber dann wieder nichts mehr damit gemacht. Da kann ich wieder von vorne anfangen. :(o): :(o):

Franz
Bernhard - Fony
Beiträge: 76
Registriert: Mo 12. Jun 2023, 17:49
Kontaktdaten:

Netion Display wieder mal vornehmen

Beitrag von Bernhard - Fony »

Habe kein Nextion, war schon am nachdenken ob ich was ähnliches hole, habe doch gelassen, bin gewohnt direkt die steuern, gestern kam ein 3,5" IPS habe den nur getestet ob wirklich IPS ;) kommt in meine Wetterstation die normale sind doch ziemlich blick "empfindlich".
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Netion Display wieder mal vornehmen

Beitrag von Admin »

Ich habe seit ein paar Jahren ein 3,5 Zoll, damit habe ich schon den Umgang gelernt, Jetzt muß ich nochmal von Vorne anfangen. Ich habe mir vor ein paar Monaten ein 7 Zoll Nextion besorgt. Damit möchte ich jetzt nochmal anfangen. Dass ich mit dem Nextion wieder arbeiten kann.

Grüße aus den kalten Ohlstadt
Franz
Bernhard - Fony
Beiträge: 76
Registriert: Mo 12. Jun 2023, 17:49
Kontaktdaten:

Netion Display wieder mal vornehmen

Beitrag von Bernhard - Fony »

Dan viel Spaß, und damit in der Glocke Ping mach wie das wahr :)
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Netion Display wieder mal vornehmen

Beitrag von Admin »

Ja, das wird ein ganzes Stück Arbeit. Ich hatte damals dafür eine gute HP gefunden, die ich durchgeackert habe. Da werde ich auch wieder loslegen. Die Seite von Böcker Systemelektronik hattest du ja im Arduino CC Forum vor kurzen jemand empfohlen.

Ich bleibe natürlich an den anderen Themen schon auch dran. Ich muss ja nicht Stur nur noch das Nextion Display bearbeiten.

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Netion Display wieder mal vornehmen

Beitrag von Admin »

So ich habe mich seit gestern wieder mal ans Nextion Display gemacht. Die im letzten Beitrag hier, von 2023 :lol: als gute Nextion - Lernseite erwähnte HP, gibt es nicht mehr. :sad: :eek: :shock:

Aber OK, hilft ja nichts. Ich habe jedenfalls im Moment ein Gerät zur Langzeit - Spannungskontrolle in Arbeit, dem das große 7" Nextion - Display seeeehr gut stehen würde. Deshalb bin ich wieder bei dem Thema gelandet. :(o): Nach so an die 5 Jahre, in denen ich mit dem Nextion NICHTS mehr zu tun hatte, ist Gott sei Dank auch das aller letzte bischen Wissen zu dem Thema, raus aus der Birne. Ich habe mir mein kleines Nextion 3,5" Display zum arbeiten auf eine Halterung gebaut und werden mir damit erst mal wieder die Grundlagen reinziehen. Das 7" Display ist mir ein bischen zu unhandlich. Ausserdem möchte ich es nicht killen bei meinen Tests. Bei dem kleinen sind nur 35,- im Eimer, beim 7" sind das 130,- Euronen. Und das kleine 3,5" macht alles, was ich jetzt wieder in die Birne reinhämmern muss, genauso gut.
.
Nextion 3.5 Zoll_Test.JPG
Nextion 3.5 Zoll_Test.JPG (566.46 KiB) 6391 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Netion Display wieder mal vornehmen

Beitrag von Admin »

Ich bekomme gerade nen Koller, weil nichts klappt, mit dem ESP32 in Verbindung mit neum Nextion. Jetzt habe ich erst mal die Kommunikation
Arduino <-> Nextion getestet und da geht schon mal wieder was.
Hier das Bild mit zwei Messwerten.
.
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Netion Display wieder mal vornehmen

Beitrag von Admin »

Ich möchte zu dem Thema Nextion Kommunikation mal ein paar Diskusionen dazu hier verlinken.
Hier mal das erste, das ich dazu im ArduinoCC begonnen habe.
HIer ist noch eine sehr Umfangreiche Info, die ich gerade erst gefunden habe. Auch im ArduinoCC Forum. Da bin ich selber gerade erst bei lesen und wenn es interessant ist, auch gleich Testen.
Und das hier zum Thema Rückmeldungen von Nextion zum Arduino.
Und hier ist was, was ich mir selber auch noch in die alte Birne reinziehen muss.
Hier ist noch eine Anleitung von Nextion leider nicht in Deutsch.

Hier sind die beiden Displays, 7" & 3,5", mit denen ich zur Zeit meine Tests mache.
.
Nextion Spannungsüberwachung.jpg
Nextion Spannungsüberwachung.jpg (564.62 KiB) 6197 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Netion Display wieder mal vornehmen

Beitrag von Admin »

Endlich habe ich jetzt die Serial2 Schnittstelle vom NodeMCU ESP32 von Joy-it, an dem Nextion Display, mit dem Tipp eines Users im ArduinoCC Forum zum Laufen gebracht. War eine sehr schwere Geburt. Aber gut, wieder was dazu gelernt. Man braucht dafür eine Lib, die "HardSerial.h" dass man eine eigene Seriale für das Nextion Display hat. Sie ist an den Ausgängen zwar als "Serial2", also als TX2 / RX2 geschriftet, aber wenn man glaubt, man könnte sie einfach so, wie bei vorhandenen Hardware Serial Anschlüssen üblich, benutzen, dann irrt man sich gewaltig. :(o): :(o):

OK, aber jetzt klappt das schon mal. Das ist jetzt nur ein Testprogram, mit dem ich noch weiter alles was ich beim Nextion brauche, teste. Es fehlen noch die Rückantworten vom Nextion zum ESP32, dann kann ich das ganze im Langzeit - Spannungsüberwachungs Gerät einsetzen.

Code: Alles auswählen

#include <Wire.h>
#include <HardwareSerial.h>
HardwareSerial nxtSerial2(2);
byte NexT[3] = { 255, 255, 255 };  // global deklarieren
const byte bufferSize = 64;
/*
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;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
//######################################################################################
//#################################### SETUP ###########################################
//######################################################################################
//
void setup() {
  Serial.begin(115200);
  nxtSerial2.begin(9600, SERIAL_8N1, 16, 17);
  //
  nxtSerial2.print("Startseite.Volt1.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  nxtSerial2.print(Messung);
  nxtSerial2.write(NexT, 3);
  nxtSerial2.print("Startseite.Volt2.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.print(ads_mv0);
  nxtSerial2.write(NexT, 3);
}
//######################################################################################
//#################################### LOOP ############################################
//######################################################################################
//
void loop() {
  startzeit = millis();
  kommunikation();
  NextionRueck();
  endzeit = millis();
  //Serial.println(endzeit - startzeit);
}
//######################################################################################
//########################## Kommunikation mit dem Nextion #############################
//######################################################################################
//
void kommunikation() {
  nxtSerial2.print("DatenzumPC.Textfeld1.txt=\"Ein Test\"");
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("DatenzumPC.Textfeld1.txt=\"Ein weiterer Test\"");
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("Startseite.Volt3.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  nxtSerial2.print(Messung);
  nxtSerial2.write(NexT, 3);
  nxtSerial2.print("Startseite.Volt4.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.print(ads_mv0);
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("Startseite.Volt4.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("Startseite.Volt4.val=37");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("Startseite.Volt4.val=32");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("Startseite.Volt3.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.write(NexT, 3);
  delay(1000);
  nxtSerial2.print("Startseite.Volt4.val=39");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial2.write(NexT, 3);
}
//######################################################################################
//########################### Rückmeldung vom Nextion auswerten ########################
//######################################################################################
//
void NextionRueck() {
  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool allesDa = false;
  if (nxtSerial2.available()) {
    uint8_t inChar = nxtSerial2.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) && buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      allesDa = true;
    } else {
      allesDa = (bIndex == bufferSize);
    }
  }
  if (allesDa) {
    if (*buffer != 0x65) {
      Serial.println(F("No TouchEvent"));
    } else {
      Serial.print(F("TouchEvent: page "));
      Serial.print(buffer[1]);
      Serial.print(F(", id "));
      Serial.print(buffer[2]);
      Serial.print(F(", event "));
      Serial.println(buffer[3] ? F("PRESS") : F("RELEASE"));
    }
    bIndex = 0;
  }
}
Ich werde auch mal suchen, ob es andere ESP32 gibt, die das selbe Format mit den 2x15 Anschlüssen haben und zum Ansprechen der Hardwaremässig vorhandenen Serial2 keine Lib benötigen. Solche Stolperfallen mag ich nicht. Also wenn es andere ESP32 für mein Anschluss - Shield gibt, trete ich die ESP32 von Joy-it in die Tonne. Denn dann kann ich gleich eine SoftSerial Lib nehmen, die ja dann nichts anderes macht, als bestimmte Stifte für TX/RX zu benutzen.
Benutzeravatar
Admin
Administrator
Beiträge: 1318
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Netion Display wieder mal vornehmen

Beitrag von Admin »

So, ich habe inzwischen für alles, was ich für mein Gerät zur Spannungsüberwachung für wichtig erachte, eine gute Lösung gefunden. Das hier ist das derzeitige Programm nur zur Kommunikation mit dem Display. Als nächstes werde ich das Programm in das Spannuns - Überwachungs - Programm einbauen. Und die Kontrolle für das Oled - Display, den Umschalter zur Einstellung der Messschwelle, sowie die beiden Taster, "FRAM Löschen" & "Daten zum PC übertragen" aus dem Programm entfernen.

Code: Alles auswählen

#include <Wire.h>
#include <HardwareSerial.h>
HardwareSerial Nextion(2);
byte NexT[3] = { 255, 255, 255 };  // global deklarieren
const byte bufferSize = 64;
int Abfragezaehler = 0;
byte PW = 0;
byte PC = 0;
byte ME = 0;
byte MeIO = 0;
/*
Wird dann so benutzt:
Serial2.write(NexT, 3);
*/
byte Seite = 0;  // Nextion Startseite einstellen
float Messung = 35.44;
float ads_mv0 = 30.33;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
//######################################################################################
//#################################### SETUP ###########################################
//######################################################################################
//
void setup() {
  Serial.begin(115200);
  Nextion.begin(9600, SERIAL_8N1, 16, 17);
}
//######################################################################################
//#################################### LOOP ############################################
//######################################################################################
//
void loop() {
  startzeit = millis();
  ESPzuNEXT();
  NEXTzuESP();
  endzeit = millis();
  //Serial.println(endzeit - startzeit);
}
//######################################################################################
//########################## Kommunikation mit dem Nextion #############################
//######################################################################################
//
void ESPzuNEXT() {
  Nextion.print("dim=50");  // Display wird etwas gedimmt
  Nextion.write(NexT, 3);
  //Nextion.print("DatenzumPC.Textfeld1.txt=\"Ein Test\"");
  //Nextion.write(NexT, 3);
  Nextion.printf("Startseite.Volt1.txt=\"%5.3f\"", Messung);
  Nextion.write(NexT, 3);
  Nextion.printf("Startseite.Volt2.txt=\"%5.3f\"", ads_mv0);
  Nextion.write(NexT, 3);
  //Nextion.printf("PasswortAW.t0.txt=\"\""); // Passwort löschen
  //Nextion.write(NexT, 3);
  //Nextion.print("page 0"); // Display auf Seite 0 umschalten
  //Nextion.write(NexT, 3);
  /*
  Nextion.print("cirs 400,373,20,RED");  // z.B. RED, GREEN, YELLOW, BLUE, GRAY, = 50712
  Nextion.write(NexT, 3);
  delay(1000);
  Nextion.print("cirs 400,373,20,YELLOW");  // RED, GREEN, YELLOW, BLUE, GRAY, = 50712
  Nextion.write(NexT, 3);
  delay(1000);
  Nextion.print("cirs 400,373,20,GREEN");  // RED, GREEN, YELLOW, BLUE, GRAY, = 50712
  Nextion.write(NexT, 3);
  delay(1000);
  Nextion.print("cirs 400,373,20,50712");  // RED, GREEN, YELLOW, BLUE, GRAY, = 50712
  Nextion.write(NexT, 3);
  delay(1000);
  */
}
//######################################################################################
//########################### Rückmeldung vom Nextion auswerten ########################
//######################################################################################
//
void NEXTzuESP() {
  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  if (Nextion.available()) {
    if (Abfragezaehler == 0) {
      delay(300);
    }
    uint8_t inChar = Nextion.read();
    buffer[bIndex++] = inChar;
    if ((buffer[0] == 101) || (buffer[0] == 80) || (buffer[0] == 35)) {
      Abfragezaehler = 0;
    }

    Serial.print(Abfragezaehler);
    Serial.print(" Buffer = ");
    Serial.println(buffer[0]);
    //----------------------------------- Menüseite wurde aufgerufen -------------
    if ((Abfragezaehler == 0) && (buffer[0] == 35)) {  // page 0 Start
    Serial.println(F("Seite Null wurde aufgerufen"));
      if (MeIO == 1) {
        Nextion.print("Startseite.MessungStart.txt=\"Messungen Stopp\"");
        Nextion.write(NexT, 3);
      }
    }
    // -----------------------------FRAM löschen Taste + PW Abfrage --------------
    if ((Abfragezaehler == 0) && (buffer[0] == 80)) {  // P? für Passwort
      PW = PW + 1;
    }
    if ((Abfragezaehler == 1) && (buffer[0] == 51)) {  // 3?
      PW = PW + 1;
    }
    if ((Abfragezaehler == 2) && (buffer[0] == 54)) {  // 6?
      PW = PW + 1;
    }
    if ((Abfragezaehler == 3) && (buffer[0] == 57)) {  // 9?
      PW = PW + 1;
    }
    if ((Abfragezaehler == 4) && (buffer[0] == 57)) {  // 9?
      PW = PW + 1;
    }
    if ((Abfragezaehler == 4) && (PW == 5)) {
      Serial.println("Passwort ist korrekt");
      Nextion.printf("PasswortAW.t0.txt=\"\"");  // Passwort löschen
      Nextion.write(NexT, 3);
      Nextion.print("page 0");
      Nextion.write(NexT, 3);
      Nextion.print("Startseite.Meldungen.txt=\"FRAM wird geloescht !!\"");
      Nextion.write(NexT, 3);
      PW = 0;
    }
    if ((Abfragezaehler == 4) && (PW < 5)) {  // Ist es nicht die FRAM - löschne Taste
      PW = 0;
    }
    //----------------------------------------------------------------------------
    // --------------------------------------- Daten zum PC Abfrage --------------
    if ((Abfragezaehler == 0) && (buffer[0] == 101)) {  // Tasten Event ?
      PC = PC + 1;
    }
    if ((Abfragezaehler == 2) && (buffer[0] == 3)) {  // Daten zum PC ?
      PC = PC + 1;
    }
    if ((Abfragezaehler == 7) && (buffer[0] == 50)) {  // Taste 2 ?
      PC = PC + 1;
    }
    if ((Abfragezaehler == 7) && (PC < 3)) {  // Ist es nicht die Daten zum PC Taste
      PC = 0;
    }
    if ((Abfragezaehler == 7) && (PC == 3)) {
      PC = 0;
      Serial.println("Daten zum PC übertragen");
      Nextion.print("page 0");
      Nextion.write(NexT, 3);
      Nextion.print("Startseite.Meldungen.txt=\"Daten werden zum PC uebertragen\"");
      Nextion.write(NexT, 3);
    }
    //----------------------------------------------------------------------------
    // ----------------------------------------- Messungen Starten Abfrage -------
    if ((Abfragezaehler == 0) && (buffer[0] == 101)) {  // Tasten Event ?
      ME = ME + 1;
    }
    if ((Abfragezaehler == 2) && (buffer[0] == 2)) {  // Taste Messungen IO ?
      ME = ME + 1;
    }
    if ((Abfragezaehler == 7) && (buffer[0] == 49)) {  // Taste 1 ?
      ME = ME + 1;
    }
    if ((Abfragezaehler == 7) && (ME < 3)) {  // ist es nicht die ME - Taste
      ME = 0;
    }
    if ((Abfragezaehler == 7) && (ME == 3) && (MeIO == 0)) {
      ME = 0;
      Serial.println("Messungen Starten");
      Nextion.print("page 0");
      Nextion.write(NexT, 3);
      Nextion.print("Startseite.Meldungen.txt=\"Messungen wurden gestartet\"");
      Nextion.write(NexT, 3);
      Nextion.print("Startseite.MessungStart.txt=\"Messungen Stopp\"");
      Nextion.write(NexT, 3);
      MeIO = 1;
    }
    if ((Abfragezaehler == 7) && (ME == 3) && (MeIO == 1)) {
      ME = 0;
      Serial.println("Messungen Stoppen");
      Nextion.print("page 0");
      Nextion.write(NexT, 3);
      Nextion.print("Startseite.Meldungen.txt=\"Messungen wurden gestoppt\"");
      Nextion.write(NexT, 3);
      Nextion.print("Startseite.MessungStart.txt=\"Messungen Start\"");
      Nextion.write(NexT, 3);
      MeIO = 0;
    }
  }
  //----------------------------------------------------------------------------
  Abfragezaehler++;
  bIndex = 0;
}
Ich gehe später noch auf die verschiedenen Befehle an das Display und die verschiednen Abfragen der Infos vom Display zu meiner CPU ein.
Das Nextion.HMI File ist hier auch noch zum Download angehängt. Das spielt mit dem Programm hier zusammen. Das ist für ein 7" Display angelegt
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste