Tutorial Nextion #3 - Button abfrage ohne Nextion.h Library

10 Kommentare
Tutorial Nextion #3 - Button abfrage ohne Nextion.h Library

In diesen Beitrag möchte ich noch einmal auf das Thema Button abfrage ohne Nextion Library eingehen. In meinem Beitrag Nextion#1 habe ich das Thema schon einmal beschrieben. Diese sorgte jedoch das ein oder andere mal bei Usern zu Verwirrung.

Daher habe ich eine noch einfacherer Version erstellt. Die kann nur wirklich jeder benutzen, nachbauen und umbauen.

Die Software zum erstellen der Nextionoberfläche findet Ihr hier. https://nextion.tech/nextion-editor/ Auf der Nextion Seite findet Ihr noch weitere nützliche Infos über das Display.

Button Abfrage (alte Version)

Hier wurde die Abfrag des Nextion Displays über die Option "Send Component ID" realisier. Dieser wurde dann über die Serielle Schnittstelle abgefragt.


Hier wurde eine Hex Zahl ausgeben die dann im Sketch über eine IF Abfrage, abgefragt wurde.


Button Abfrage (neue Version)

In der Neuen Version wird in dem Button ein "print" Befehl eingesetzt. Über den Text der dort eingetragen wird lässt sich dann im Arduino die Abfrage realisieren. Der Vorteil ist hier, dass der Text frei gefällt werden kann. Das im Sketch übersichtilicher und einfacher zu verarbeiten.


Der Text der über den "print" Befehl ausgegeben wird, ist ein ASCII Hex. Hier in der Tabelle könnt Ihr die Werte ansehen. Wird aber auch in dem Bild dargestellt.


Der Programmcode

!!! Wichtig

Mit der Zeile daten_display=""; wird der String daten_display geleert, das ist Wichtig damit eine weitere Abfrage möglich ist.

Hier könnt Ihr den Sketch und die Daten für das Display runterladen.

Download Daten (113kb .zip)

#include <softwareserial.h>
SoftwareSerial nextion(6, 5); // RX, TX
String daten_display = "";

void setup() {
  Serial.begin(9600);
  nextion.begin(9600);
}

void loop() {
// Hier wird geguckt ob Daten an der Seriellen Schnittstelle vorliegen.
  if (nextion.available() > 0)
  {
    daten_display += char (nextion.read());
  }

// Abfrage zu den jeweiligen Button.
  if (daten_display == "Button 1"){
    Serial.println("Button 1");
    daten_display="";
  }
  if (daten_display == "Button 2"){
    Serial.println("Button 2");
    daten_display="";
  }
  if (daten_display == "Button 3"){
    Serial.println("Button 3");
    daten_display="";
  }
  if (daten_display == "Button 4"){
    Serial.println("Button 4");
    daten_display="";
  }
}




Folgende Bauteile wurden verwendet:

1x Nextion 3.5″ Discovery Touch Display 480×320 HMI – NX4832F035 - https://ap-url.de/nextion35d
1x Nextion 3.5″ Enhanced Touch Display 480×320 HMI – NX4832K035 - https://ap-url.de/nextion35e
1x FTDI Adapter FT232RL USB zu TTL - https://ap-url.de/ftdi
1x UNO R3 ATmega328P Board mit USB Kabel Arduino Uno R3 kompatibel - https://ap-url.de/arduinouno
Arduino Nextion Display

10 Kommentare

Hallo, Danke für die tolle Seite, bei mir funktioniert das Programm, leider bekomme ich meistens nur eine Antwort von dem Display zurück. Nach dem Reset geht dann wieder nur eine Anfrage. Weisst du voran das liegen könnte? habe auch einen Arduino Uno im Einsatz.

Samuel

Hallo Markus,

schick mir doch mal was du hast und was du vorhast, dann kann ich mal drüber gucken.
Gruß
Tobias

arduino projekte

Hallo!
Vielen Dank für die tollen Anleitungen. Ich habe aber folgendes Problem und finde auch nach vielen Stunden (eigentlich Tagen) der Fehlersuche und der Recherche im Netz keine Lösung.
Ihr Codebeispiel funktioniert super, solange man keine Daten an das Nextion Display sendet.
Sobald ich Ihren Code um einen nextion.print Befehl erweitere, funktioniert das Einlesen der Touchbuttons nicht mehr.
Können Sie mir vielleicht einen Tipp geben, wo der Fehler liegen könnte?
Das gleiche Problem tritt auch auf, wenn ich ohne Software Serial arbeite.
Ich lasse meine Werte zum Anzeigen nun schon nur noch an das Display senden, wenn diese sich wirklich verändert haben. Selbst wenn aktuell kein Wert zum Display geschrieben wird, werden die Button nicht eingelesen.

Wäre sehr dankbar für eine brauchbaren Tipp.

Gruß
Markus

Markus

Hallo Uwew,

leider ist es so das nicht alle Pins am D1 mini Pro sich eignen für das Softserial. Der Grund ist das die Pin teile eine Doppelfunktion haben. GPIO5 wird zum Beispiel auch für den IR Rx verwendet. Nimm mal D3 und D4 also SoftwareSerial nextion(2, 0); // RX, TX.
So benutze ich es auch.

Gruß
Tobias

arduino projekte


Hallo,
zunächst einmal vielen Dank für diese Infoseite, die Infos bezüglich der Nextion sind wirklich sehr dürftig im Netz.
Aber warum ich schreibe ist: ich habe den Nextion an einem D1 mini pro.
Aber ich bekomme keine Verbindung zum Display. Angeschlossen ist der RX vom Display an D1 (GPIO5) und der TX an D2 (GPIO4)
Den Sketch habe ich wie folgt geändert

SoftwareSerial nextion(4, 5); // RX, TX
Bin am verzweifeln, es will einfach nicht klappen. Bestimmt hab ich wieder so einen kleinen Blöden Fehler gemacht :-(

Uwew

Hinterlassen Sie einen Kommentar

Bitte beachten Sie, dass Kommentare vor der Veröffentlichung genehmigt werden müssen.