Nextion Display am Arduino NANO

Hallo zusammen,

ich würde gerne mein Nextion Display als Klingelplatte hernehmen. Eine dreiteilige Grafik habe ich bereits mit dem Editor erstellt und aufs Display geschrieben (inkl. der Variablen), geht wunderbar.
Angeklemmt wird das Display an einem Arduino NANO, der einfach nur die Tastenbefehle an einen Raspberry 3 weitergeben soll.
Jetzt meine Frage : " wie muss der Loop aussehen, dass alle drei Taster überwacht und ausgewertet werden " ?

Besten Dank schonmal vorab.

Gruß, Atze

Dann zeige uns doch mal Deinen Sketch (bitte in Codetags </>-Button oben links im Forumseditor).
Da wir nicht wissen können, was Du auf dem Nextion gebaut hast, musst Du das schon selbst schreiben.

Wie hast Du das Nextion angeschlossen?

Gruß Tommy

(deleted)

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

int Klingel3=11;            // Benennung der Pin's GPIO
int Klingel2=12;            // Benennung der Pin's GPIO
int Klingel1=13;            // Benennung der Pin's GPIO

SoftwareSerial nextion(0, 1);  // Zuweisung von TX und RX 

Nextion myNextion(nextion, 9600);

void setup() {
  pinMode(Klingel3, OUTPUT);          // Zuweisung ob Ein- oder Ausgang
  pinMode(Klingel2, OUTPUT);          // Zuweisung ob Ein- oder Ausgang
  pinMode(Klingel1, OUTPUT);          // Zuweisung ob Ein- oder Ausgang
  Serial.begin(115200);
  myNextion.init(); // ruft immer page0 vom Nextion auf
}

void loop() {
   String message = myNextion.listen();          //überwacht die Eingangssignale des Nextion
   if(message == "65 0 2 1 ffff ffff ffff")     // Vergleich von b0
  
   {
    if(digitalRead(Klingel3)==LOW)
    
     {
      digitalWrite(Klingel3, HIGH);
       
     }
    else
    {
      digitalWrite(Klingel3, LOW);

    
   
    
  String message = myNextion.listen();  //überwacht die Eingangssignale des Nextion  
  if(message == "65 0 3 1 ffff ffff ffff")  // Vergleich von b0

   {
      if(digitalRead(Klingel2)==LOW)
      {
        digitalWrite(Klingel2, HIGH);
       }
    else
    {
      digitalWrite(Klingel2, LOW);   

    }
    }
    }
   }
}

Warum verwendest für Software-Serial die Schnittstelle zu Hardware-Serial ?
Das kann nur zu Problemen führen.

Hallo,

der NANO muss schon sein, da ich den Pi nicht in der Klingelplatte ausserhalb des Hauses einbauen will, wegen Netwerkanbindung.
Der NANO gibt dann die Signale an die GPIO des Pi weiter, sozusagen als einfache I/O Signale.

Die .HMI- Datei kann ich leider nicht uploaden.

HotSystems:
Warum verwendest für Software-Serial die Schnittstelle zu Hardware-Serial ?
Das kann nur zu Problemen führen.

Leider bin ich noch nicht so weit in der Materie drin.
Was genau meinst du ?

Danke und Gruß, Atze

Atze69:
Leider bin ich noch nicht so weit in der Materie drin.
Was genau meinst du ?

Danke und Gruß, Atze

Du musst für Software-Serial eigene Pins verwenden (Beispiel D2 und D3).
D0 und D1 werden als Hardware-Serial für USB verwendet, das ist es keine gute Lösung, die auch für Software-Serial zu verwenden.

Erledigt, geht auch :slight_smile:

SoftwareSerial nextion(2, 3); // Zuweisung von TX und RX

Leider wird immer nur noch ein Zustand überwacht !?!

Eine der Tasten auf dem Nextion geht einwandfrei und schaltet mir auch das eine Relais, allerdings die beiden anderen nicht :frowning:

Gruß

Atze69:
.....

Leider wird immer nur noch ein Zustand überwacht !?!

Eine der Tasten auf dem Nextion geht einwandfrei und schaltet mir auch das eine Relais, allerdings die beiden anderen nicht :frowning:

Ok, das kann auch nicht funktionieren.
Deine if-Abfragen sind falsch aufgebaut.
Die 2. If-Abfrage liegt noch innerhalb der ersten.

Sie dir mal die geschweiften Klammern genau an.
Die Abfragen müssen voneinander getrennt sein, damit sie auch hintereinander durchlaufen werden.

Dein Nextion schickt ja auch nur eine Meldung. Diese eine musst Du auswerten und nicht vor jeder Auswertung eine neue Meldung erwarten.
Sprich: Die Zeile

String message = myNextion.listen();

darf es im Loop nur einmal geben. Dann musst Du wohl message auswerten.

Ansonsten verwendet kaum einer die Nextion-Lib. Deshalb wirst Du da wenig Hilfe bekommen.

Gruß Tommy

Und was macht die if-Abfrage mit Klingel2 und Klingel3 in der String-if-Abfrage ?

"if (digitalRead(Klingel2) == LOW)"

Evtl. sollte die Loop so aussehen ?

void loop() {
  String message = myNextion.listen();          //überwacht die Eingangssignale des Nextion

  if (message == "65 0 2 1 ffff ffff ffff")    // Vergleich von b0
  {
    digitalWrite(Klingel3, HIGH);
  }
  else
  {
    digitalWrite(Klingel3, LOW);
  }


  if (message == "65 0 3 1 ffff ffff ffff") // Vergleich von b0
  {
    digitalWrite(Klingel2, HIGH);
  }
  else
  {
    digitalWrite(Klingel2, LOW);
  }
}

HotSystems:
Und was macht die if-Abfrage mit Klingel2 und Klingel3 in der String-if-Abfrage ?

"if (digitalRead(Klingel2) == LOW)"

Evtl. sollte die Loop so aussehen ?

void loop() {

String message = myNextion.listen();          //überwacht die Eingangssignale des Nextion

if (message == "65 0 2 1 ffff ffff ffff")    // Vergleich von b0
  {
    digitalWrite(Klingel3, HIGH);
  }
  else
  {
    digitalWrite(Klingel3, LOW);
  }

if (message == "65 0 3 1 ffff ffff ffff") // Vergleich von b0
  {
    digitalWrite(Klingel2, HIGH);
  }
  else
  {
    digitalWrite(Klingel2, LOW);
  }
}

Vielen Dank Dieter, genau so geht es, habe noch ein wenig angepasst, damit alle 3 Klingeln eingebunden sind.
Mit de eckigen Klammern komme ich noch nicht so klar :slight_smile:

Gruß, Atze

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

int Klingel3=11;            // Benennung der Pin's GPIO
int Klingel2=12;            // Benennung der Pin's GPIO
int Klingel1=13;            // Benennung der Pin's GPIO

SoftwareSerial nextion(2, 3);  // Zuweisung von TX und RX 

Nextion myNextion(nextion, 9600);

void setup() {
  pinMode(Klingel3, OUTPUT);          // Zuweisung ob Ein- oder Ausgang
  pinMode(Klingel2, OUTPUT);          // Zuweisung ob Ein- oder Ausgang
  pinMode(Klingel1, OUTPUT);          // Zuweisung ob Ein- oder Ausgang
  Serial.begin(115200);
  myNextion.init(); // ruft immer page0 vom Nextion auf
}

void loop() {
  String message = myNextion.listen();          //überwacht die Eingangssignale des Nextion

  if (message == "65 0 2 1 ffff ffff ffff")    // Vergleich von b0
  {
    digitalWrite(Klingel3, HIGH);
  }
  else
  {
    digitalWrite(Klingel3, LOW);
  }


  if (message == "65 0 3 1 ffff ffff ffff") // Vergleich von b1
  {
    digitalWrite(Klingel2, HIGH);
  }
  else
  {
    digitalWrite(Klingel2, LOW);
  }

  if (message == "65 0 4 1 ffff ffff ffff") // Vergleich von b1
  {
    digitalWrite(Klingel1, HIGH);
  }
  else
  {
    digitalWrite(Klingel1, LOW);
  }
}

(deleted)

Atze69:
Vielen Dank Dieter, genau so geht es, habe noch ein wenig angepasst, damit alle 3 Klingeln eingebunden sind.
Mit de eckigen Klammern komme ich noch nicht so klar :slight_smile:

Das freut mich, dass es bei dir jetzt funktioniert.
Danke für die Rückmeldung.

Nur was genau meinst du mit den eckigen Klammern ?

Der NANO ist einzig und alleine verbaut, dass ich nicht den Pi mit der Netwerkanbindung außerhalb des Hauses Klingelkasten) verbauen muss. :slight_smile: :slight_smile: :slight_smile:

Sorry, hatte ich nicht richtig gelesen, mit dem Kabel zwischen Pi und Nextion, da hast du allerdings Recht :slight_smile:

Atze69:
Der NANO ist einzig und alleine verbaut, dass ich nicht den Pi mit der Netwerkanbindung außerhalb des Hauses Klingelkasten) verbauen muss. :slight_smile: :slight_smile: :slight_smile:

anwofis meint ja, du könntest dein Nextion über die serielle Leitung direkt am Pi anschließen.
Das würde bedeuten, du musst die Nextion-Steuerung auf dem Pi programmieren.
Dabei kann der Pi ja da bleiben, wo er jetzt ist.

Edit:
Ja, genau. :wink:

HotSystems:
Das freut mich, dass es bei dir jetzt funktioniert.
Danke für die Rückmeldung.

Nur was genau meinst du mit den eckigen Klammern ?

Die geschwungenen Klammern { } meinte ich :slight_smile: