Problem Mit Relaisschaltung und Code

Bzgl. Stromverbrauch mache ich mir derzeit weniger Sorgen.

Da das Display in meinem Test immer extra versorgt wird.

Wenn ich alles über eine 5Volt Netzteil versorge, dass bis zu 2,5A liefern kann ist das Verhalten auch nicht anders.

Relais hängt derzeit noch keinen dran, nur Leds

Ich vermute mein nichtfunktionieren am Code. Der hat sich nach meinem Eingangspost auch nicht verändert.

Mein ESP ist ein ESP32 Dev Kit C V4 mit 38 Pins vom AZ - Store

Alles ist zuviel :wink:

Da du ein ESP nutzt ist das das Problem. Du musst den Strom für den ESP auf 3.3 Volt runterregeln.

Zeig doch mal den Aufbau von der Schaltung.

Ich kann mich irren aber ich halte das NICHT für ein Software-Fehler.

Genau DESHALB.

Selbst wenn es zu einer Störung durch Software kommt, solltest du eine Zeile CODE die man darunter schreibt, und an das Display sendet, so nach den Motto "Hallo ich bin da und an dieser Code-Position" sauber angezeigt werden. Notfalls halt mit einen Clear-Display-Befehl.

Das ist übrigens eine Technik die ich sehr oft anwende, in den ich mir Infos auf den Display anzeigen lasse, anstelle im Serial-Monitor.

Dein Display stirbt i.d.R. nicht an eine Code-Fehler so das es ein Reset braucht. Da spielt m.M.n. die Hardware eine Rolle.

Wenn es oben ein "hallo ich bin da" anzeigt und nach den Schalten nicht mehr, dann ist das schalten schuld. Weshalb meine Programme auch immer das Display mit "System gestartet" als Text init. . Dann weiß ich das das Display funktioniert.

Gruß

Pucki

Dann kann es auch nicht funktionieren.
Ich hatte doch geschrieben, SoftwareSerial brauchst du nicht. Du musst die Pins entsprechend richtig definieren.
Und ich hatte dich um einen Link zum ESP32 gebeten.
Warum geht das nicht ?
Und wozu jetzt einen anderen Controller ?
Ich setze ein Nextion ohne Probleme am ESP32 ein und das funktioniert.

Also nochmal, zeige den aktuellen Sketch und zeige ein Schaltbild wie du den ESP32 mit allen weiteren Teilen verdrahtet hast. Auch die richtigen Pins dabei sind wichtig.

Das ist wiedermal ganz großer Quatsch. Den Strom auf Spannung runter regeln ??
Und es muss auch nicht 3,3 Volt sein, 5 Volt funktionieren genau so.

Zum Aufbau der Schaltung gibts nicht viel zu sagen.
Der ESP steckt einem Steckbaord, wo ich ich Jumperkabel in einer Steckleiste daneben oder auch mit Schraubklemmen befestigen kann.
Das 5Zoll Display hat die 5 Jumperkabel
+5V, GND, RX und TX

Display hat einen eigene Stromversorgung. GND ist aber mit dem ESP verbunden.

In der TX- Display und RX-ESP hängt ein Spannungsteiler
Rx - TX ist direkt verbunden

Die Leds an den Ausgängen hängen mit einen 100 Ohm Widerstand zu GND auf einem Steckbrett.
Die andere Seite ist mit Jumperkabeln mit den ESP Ausgängen verbunden.

Die Stromversorgung des ESP geschieht über das USB Kabel vom Rechner.

Ich baue jetzt mal den ESP aus und versuche es mal mit dem Uno. Der verträgt 5V.

Ich zähle aber nur 4 Kabel.
Und warum beantwortest du immer deine Fragen. So kann man der Diskussionen hier nicht richtig folgen.

Da halte ich die 100 Ohm für sehr niedrig. In dem Fall kann der max. Strom für einen Pin schnell zu hoch werden.

Mal eine grundsätzliche Frage:
Hat denn dein Display in dieser Schaltung mit dem ESP32 schon mal etwas angezeigt ?
Wenn nicht, dann nutze doch erst mal ein einfaches Beispiel für die Anzeige.

Das macht aus meiner Sicht keinen Sinn, da du hier wieder mit SoftwareSerial arbeiten musst und da ist dann wieder alles anders. Du schiebst dein Problem nur hin und her ohne ein echtes Ergebnis zu erzielen.

Und um dir evtl. etwas unter die Arme zu greifen, hier die Anweisung, wie du das Nextion am ESP32 ansteuern kannst.

#include <HardwareSerial.h>
HardwareSerial nxtSerial2(2);
nxtSerial2.begin(9600, SERIAL_8N1, 16, 17);

Das ist die angesprochene Hardware-Schnittstelle, die bei mir seit Jahren funktioniert.

Einziges was mich immer wundert, das alle hier im Forum was nutzen ein Nextion, arbeiten dazu mit einem ESP, Arduino usw. der hat doch auch 8 GPIO, oder wurden die abgeschafft?
Wenn man schon mit der Nextion Software hantiert um was auf den Display zaubern kann man doch direkt die Pins ansteuern, oder geht das nicht. So mein Gedanke, habe kein Nextion.

Nicht alle Nextion haben zusätzliche GPIO. Auch fehlt dem das WLan. :wink:
Und weiters auch noch.

Mit dem WLAN das Stimmt, war der Meinung, wo möglich falsch damals gelesen, das alle haben die GPIOS.
Habe mir anderen HMI Display bestellt, mit ESP32 als SOC mall schauen was wird :wink:

Nein, das stimmt leider nicht.
Es gibt die "einfachen" Basic ohne GPIO
und die "Enhanced" mit GPIO und noch andere Gimmicks.
Sowie einen Preisunterschied.

OK dann war ich immer bei den "Besseren" == Enhanced :wink:

Jo...

Und dann softwareSerial - Der hat nur einen HardwareSerial und den braucht es zum debuggen.
Dann komm mal mit aktuellem Code und einer aktuellen Beschreibung. Hier sind soviele Nebenschauplätze aufgemacht, da hab ich die Übersicht verloren :slight_smile:

Danke für die rasche Antwort.

Das Display hat immer etwas angezeigt. Hat auch auf Tippen reagiert, nur erfolgte kein interaktion.

Am ESP32 komme ich irgendwie nicht weiter.
Habe den Code, denn du dankenswerterweise gepostet hast, so eingesetzt.
Bei HardwareSerial kann ich nicht einmal kompilieren, weil nur Fehler kommen.
Es beginnt mit: error: no matching function for call to 'HardwareSerial::HardwareSerial(int)'

Ich lasse es jetzt einmal liegen und mache später weiter, weil ich jetzt weg muss.

Die Library sollte allerdings im System vorhanden sein.
Hier kannst du die nachladen.

Hast du die einzelnen Zeilen evtl. nicht richtig angeordnet ?

Nachdem auch das nachladen nichts gebraucht und ich unbedingt, ein kleiner Erfolgserlebnis wollte, habe ich den Sketch für den Uno angepasst.
Hier aber mit Softserial auf den Pins 6,5.

Was soll ich sagen, ein kleiner Erfolg stellte sich ein.
Alle Buttons funktionieren bis auf den hier.

#include <SoftwareSerial.h>
SoftwareSerial nextion(6, 5); // RX, TX

String daten_display = "";
int btn_state = 0;
// Ausgänge für Relais festlegen
unsigned int REL_Boxg=13;
unsigned int REL_AKS=12;
unsigned int REL_WEI=11;
unsigned int REL_Bah=10;
unsigned int REL_AD=9;
unsigned int REL_Saf=8;

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 == "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="";
  }

........


Das ist der wo ich beim Klick auf den Button Weichen, 2 Relais (jetzt Leds) schalten sollen.
Die Leds schalten ein, dann jedoch hängt der Uno. Nur Reset hilft, dass die Buttons wieder schalten.

Wenn ich diese Zeile auskommentiere, läuft alles weiter

nextion.print("tb1.txt=\"AUS\"");     //AKS wird auch abgeschaltet

Eigentlich wollte ich ja mehr, dass auch der Button AKS den gedrückt Status annimmt.
Nur hier fehlt mir der Plan.

Jedenfalls, bin ich froh, dass jetzt mal was funktioniert. :grinning:

Und wenn du jetzt den Versuch startest und den Sketch mit richtiger Pindefinition auf den ESP32 packst, sollte es auch erst mal mit SoftwareSerial (nicht an der Hardware-Schnittstelle) funktionieren. Und danach könntest du auf die HardwareSerial umsteigen.
Immer mit der Sicherheit auch wieder zurück zu gehen.

Den Versuch starte ich jedenfalls

Dein obiger Sketch ist allerdings schwer zu durchschauen, da der nicht vollständig ist.
Was kommt danach ?

Aus dem Core macht öfters Probleme, es wurde eine SoftwareSerial für ESP entwickelt

Man muss nur die vorhandene verschieben damit die IDE die neue nutzt.