Hallo,
Ich erstelle gerade einen Code auf einem ESP 32 mit angeschlossenem Nextion Display.
Das Display hängt an den seriellen Ports (RX=16, TX=17). Die Buttons sind als DualState Buttons definiert.
Habe folgende Probleme:
Die Ausgänge zu den Relais (hier hängen derzeit Leds) funktioniert nur eine auf GPIO 13. Die anderen reagieren nicht.
Das Problem mit dem Code ist mir auch schleierhaft. Wenn ich den Button mit Name "Weichen" drücke, steht zwar am Display noch aus. Hier Button soll ja gleich zwei Buttons (Ausgänge) bedienen. Danach funktioniert aber gar nichts mehr am Display.
Erst nach einem Reset funktioniert es wieder.
Hier mein Code:
```cpp
// esp32 mit Nextion Display
#include <SoftwareSerial.h>
SoftwareSerial nextion(16, 17); // RX, TX
String daten_display = "";
int btn_state = 0;
// Ausgänge für Relais festlegen
unsigned int REL_Boxg=37;
unsigned int REL_AKS=36;
unsigned int REL_WEI=33;
unsigned int REL_Bah=31;
unsigned int REL_AD=30;
unsigned int REL_Saf=13;
void setup() {
nextion.begin(9600);
pinMode(REL_Boxg,OUTPUT);
pinMode(REL_AKS,OUTPUT);
pinMode(REL_WEI,OUTPUT);
pinMode(REL_Bah,OUTPUT);
pinMode(REL_AD,OUTPUT);
pinMode(REL_Saf,OUTPUT);
}
void loop() {
//Schauen ob Daten an der Seriellen Schnittstelle ankommen.
if (nextion.available() > 0)
{
daten_display += char (nextion.read());
}
// Abfrage zu den jeweiligen Buttons.
if (daten_display == "Boxengasse" && (!btn_state)) {
btn_state = 1;
digitalWrite(REL_Boxg, HIGH);
nextion.print("tb0.txt=\"AUS\"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
else if (daten_display == "Boxengasse" && (btn_state))
{
btn_state = 0;
digitalWrite(REL_Boxg, LOW);
nextion.print("tb0.txt=\" \"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
if (daten_display == "AKS" && (!btn_state)) {
btn_state = 1;
digitalWrite(REL_AKS, HIGH);
nextion.print("tb1.txt=\"AUS\"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
else if (daten_display == "AKS" && (btn_state))
{
btn_state = 0;
digitalWrite(REL_AKS, LOW);
nextion.print("tb1.txt=\" \"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
if (daten_display == "Weichen" && (!btn_state))
{
btn_state = 1;
digitalWrite(REL_WEI, HIGH);
digitalWrite(REL_AKS, HIGH); //AKS wird auch abgeschaltet
nextion.print("tb2.txt=\"AUS\"");
nextion.print("tb1.txt=\"AUS\""); //AKS wird auch abgeschaltet
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
else if (daten_display == "Weichen" && (btn_state))
{
btn_state = 0;
digitalWrite(REL_WEI, LOW); // Weichen ein
digitalWrite(REL_AKS, LOW); // Relais AKS
nextion.print("tb2.txt=\" \""); // Weichen ein
nextion.print("tb1.txt=\" \""); // AKS ein
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
if (daten_display == "Bahnstrom" && (!btn_state))
{
btn_state = 1;
digitalWrite(REL_Bah, HIGH);
nextion.print("tb3.txt=\"AUS\"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
else if (daten_display == "Bahnstrom" && (btn_state))
{
btn_state = 0;
digitalWrite(REL_Bah, LOW);
nextion.print("tb3.txt=\" \"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
if (daten_display == "Analog/Digital" && (!btn_state))
{
btn_state = 1;
digitalWrite(REL_AD, HIGH);
nextion.print("tb4.txt=\"Analog\"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
else if (daten_display == "Analog/Digital" && (btn_state))
{
btn_state = 0;
digitalWrite(REL_AD, LOW);
nextion.print("tb4.txt=\" \"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
if (daten_display == "Safetycar" && (!btn_state))
{
btn_state = 1;
digitalWrite(REL_Saf, HIGH);
nextion.print("tb5.txt=\"AUS\"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
else if (daten_display == "Safetycar" && (btn_state))
{
btn_state = 0;
digitalWrite(REL_Saf, LOW);
nextion.print("tb5.txt=\" \"");
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
daten_display="";
}
}
Bezeichne mich zwar als Anfänger, aber einige Codes habe ich schon erfolgreich umgesetzt.
Bisher auf einem ESP8266 mit Werte erfassen und per MQTT übertragen.
Das jetzt mit Display und Relais schalten ist neu für mich.
Bitte um Hilfe.
Gruß Georg