ESP32 start bei Power ON

Hallo,

ich habe mir eine Schaltung gebaut (Sensordaten lesen und per MQTT verschicken) und würde die jetzt gern ohne PC betreiben.
Ich habe alles entwickelt, läuft auch ganz gut. Jetzt besteht nur noch das Problem, dass ich wenn ich den Strom anschalte, der ESP32 nicht richtig startet. Erst wenn ich einmal auf den Reset-Button drücke, läuft alles wie gewollt. Ist aber etwas nervig, immer nach einem Stromausfall an das Gerät ran zu müssen und den Reset-Button zu drücken.
Beim entwickeln am PC ist das nicht aufgefallen, erst jetzt ohne PC. Gibt es da irgendwo noch eine Option, die ich umstellen muss?

Viele Grüße
Tobias

Definiere "nicht richtig startet".
Sorge dafür, dass Meldungen ausgegeben werden, dann sagt dir dein ESP, wo es klemmt.

Du kannst nicht von uns/mir erwarten, dass wir Fehler oder Ursachen in deinem geheimen Code/Schaltung finden.

"nicht richtig startet" kann ich leider nicht 100%-ig definieren, da es nur auftritt, wenn ich nicht per USB-Kabel angeschlossen bin. Ich kann mir also leider nichts über Seriell ausgeben lassen (außer mit zusätzlicher Hardware, aber ich wollte es erstmal ohne probieren).

Normalerweise sollte sich der ESP32 im WLAN einloggen, dann bei einem MQTT-Broker und dann Sensordaten auslesen und senden. Parallel wird ein Webserver gestartet, über den man konfigurieren kann. Läuft grundsätzlich auch alles, nur nicht direkt nach "Strom an" sondern erst nach Reset. [EDIT: direkt nach Strom an loggt er sich gar nicht im WLAN ein.]

Ich denke nicht, dass es am Code liegt, sondern wahrscheinlich eher an einer Build-Option oder so. Möglicherweise auch die Schaltung, aber die kann ich erst heute Abend posten, genau so wie den Code.

Hat schon mal jemand den ESP32 ohne USB-Anschluss betrieben? Funktioniert das bei euch direkt oder müsst ihr erstmal auf reseten?

Tobinator:
Ich denke nicht, dass es am Code liegt, …

Ich denke schon dass man es mit Code zum laufen bringen kann!

void Connect() {      // Funktionsaufruf "Connect();" muss im Setup eingebunden werden
  const char* ssid = "Netzwerkname";  // << kann bis zu 32 Zeichen haben
  const char* password = "PasswortvomNetzwerk";  // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (millis() > 10000) {
      Serial.println("\nVerbindung zum AP fehlgeschlagen");
      ESP.restart();
    }
  }
  Serial.println("\nVerbunden mit: " + WiFi.SSID());
  Serial.println("Esp32 IP: " + WiFi.localIP().toString());
}

Probiere es mit dem restart und berichte uns bitte.
Ich hatte noch nie einen Esp32 ohne Handynetzteil in Betrieb.

Gruß Fips

Super :slight_smile:
Vielen Dank.
Ich probiere es aus, wenn ich wieder zu Hause bin.

Hallo,

ich denke Du must rausbekommen ob das Ding sich beim starten aufhängt oder ob das einloggen nicht klappt.
bau doch einfach mal eine LED mit dran und lass die mit millis blinken im loop . Nur um zu sehen ob das Ding soweit kommt.

Heinz.

@Fips hoffe ich hab mal richtig gedacht aber das sollte auch beim ESP 32 klappen oder ?? :slight_smile:

Rentner:
bau doch einfach mal eine LED mit dran

Gute Idee Heinz.

void Connect() {      // Funktionsaufruf "Connect();" muss im Setup nach eingebunden werden
  const char* ssid = "Netzwerkname";  // << kann bis zu 32 Zeichen haben
  const char* password = "PasswortvomNetzwerk";  // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen
  pinMode(LED_BUILTIN, OUTPUT);     // OnBoardLed ESP32 Dev Module
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(LED_BUILTIN, 1);
    delay(250);
    digitalWrite(LED_BUILTIN, 0);
    delay(250);
    Serial.print(".");
    if (millis() > 10000) {
      Serial.println("\nVerbindung zum AP fehlgeschlagen");
      ESP.restart();
    }
  }
  Serial.println("\nVerbunden mit: " + WiFi.SSID());
  Serial.println("Esp32 IP: " + WiFi.localIP().toString());
}

Wenn dein Esp32 eine Onboard LED hat?

Gruß Fips

@Derfips: nur der Vollständigkeit halber: ich habe gerade gesehen, dass du in deinem Codebeispiel serielle Ausgaben hast. Die sehe ich ja nicht… Aber ich probiere es trotzdem mal.

@Rentner: Danke für den Tip. Aber nach dem, was ich bis jetzt gesehen habe, hängt er sich wahrscheinlich beim starten auf. Nachdem ich auf Reset drücke, geht ja alles. Aber ich probiere es nachher mal aus.

Tobinator:
@Derfips: nur der Vollständigkeit halber: ich habe gerade gesehen, dass du in deinem Codebeispiel serielle Ausgaben hast. Die sehe ich ja nicht… Aber ich probiere es trotzdem mal.

Das ist klar. Deshalb lass ich bei mir ja auch die Board Led blinken.

Gruß Fips

So, bin doch schon früher zu Hause als gedacht:

Ich habe jetzt folgendes ausprobiert:

void setup()
{
	pinMode(16, OUTPUT);
	digitalWrite(16, LOW);
	delay(1000);
	digitalWrite(16, HIGH);
	delay(1000);
	digitalWrite(16, LOW);
	delay(1000);

} 

void loop()
{ 
 
}

An Pin 16 hängt bei mir ein Relais. Ich kann ganz normal programmieren und nach Abschluss höre ich das Relais auch klicken.
Dann ziehe ich das USB-Kabel ab und schließe meinen normalen Strom an (3,3V, nicht über USB, sondern über den 3,3V-Pin). Direkt nach Strom ein passiert nichts, erst, wenn ich auf Reset drücke, höre ich das Relais klicken.

Fein!

Damit ist jetzt also (vorläufig) geklärt, dass du ein Problem mit deiner Schaltung hast.

Tobinator:
So, bin doch schon früher zu Hause als gedacht:

Ich habe jetzt folgendes ausprobiert:

void setup()

{
pinMode(16, OUTPUT);
digitalWrite(16, LOW);
delay(1000);
digitalWrite(16, HIGH);
delay(1000);
digitalWrite(16, LOW);
delay(1000);

}

void loop()
{

}




An Pin 16 hängt bei mir ein Relais. Ich kann ganz normal programmieren und nach Abschluss höre ich das Relais auch klicken.
Dann ziehe ich das USB-Kabel ab und schließe meinen normalen Strom an (3,3V, nicht über USB, sondern über den 3,3V-Pin). Direkt nach Strom ein passiert nichts, erst, wenn ich auf Reset drücke, höre ich das Relais klicken.

Pin 16 ist meines Wissens keine gute Wahl.

Gruß Fips

Danke für eure Hilfe, aber ich glaube, ich habe das Problem gefunden:

Es wird empfohlen, einen Kondensator zu entfernen… Ich probiere es mal aus und melde mich nochmal :slight_smile:

Diesen besagten Kondensator scheine ich gar nicht zu haben... Und an anderen Stellen findet man auch andere Ursachen... Ich glaube, da brauche ich doch etwas mehr Zeit, um den Fehler zu finden...

Wie versorgt du deinen ESP32 denn mit Strom? Über den USB Port, über die Pins oder hast du ein Board mit Akkuanschluss?
Ich betreibe mehrere ESP32 problemlos sowohl per Akku (Lolin32 mit extra Akkuanschluss) oder über externes Netzteil und 5V Pin oder mit Handyladekabel über den USB Port.
Wenn also deine Stromversorgung in Ordnung ist und der Problem auch ohne externe Hardware auftritt, würde ich auf einen Hardwaredefekt tippen.

Hallo

ist schon seltsam, wenn er einmal Reset drückt klappt es ja , ich denke ehr da hängt ein pin in der Luft und verhindert das Booten , aber warum nicht wenn er über USB einspeist. Man müsste sich das Schaltbild mal genauer ansehen , Aber wir wissen nicht genau was für ein Board es ist.

Heinz

Eventuell eine instabile Stromversorgung mit Spannungsspitze/-einbruch und Brownout beim Einschalten? Manche Boards sind da recht empfindlich.

Stimmt, Der T0 müsste uns mal verraten was er da benutzt als Stromversorgung .

Heinz

Hallo,

hab leider E-Mail-Benachrichtungen ausgeschaltet und hatte mich eigentlich mit dieser Board-"Eigenschaft" abgefunden und deswegen gestern nicht mehr reingeschaut... sry...

Mein Board ist das hier: AZ-Delivery

Stromversorgung läuft über dieses Schaltnetzteil:
IRM-10-12

und nachgeschaltet wird über ein LM2575-3.3 die Spannung auf 3,3V gewandelt. Damit gehe ich an einen 3,3V-Pin des Boards. Stützkondensatoren habe ich auch.

Ich versuche demnächst mal mit einem Oszilloskop zu messen, wie der Strom beim Einschalten aussieht.

Ja, ich denke Du solltest mal die Spannung messen.
Da ich das identische ESP32 Board hier rum liegen hatte habe ich gerade mal versucht Dein Problem nachzuvollziehen. Dazu habe ich Deinen Code für das Relais verwendet, den Du gepostet hast.
Da ich das von Dir verwendete Schaltnetzteil und den Spannungsregler nicht habe, habe ich das Board stattdessen über den 3.3V Pin eines anderen ESP32 Boards mit Spannung versorgt, das über den USB Port angeschlossen war.
Mit diesem Aufbau konnte ich Dein Problem nicht nachstellen. Das Relais hat immer problemlos geschaltet, so bald es Strom bekommen hat, ein Reset war nicht erforderlich.

EDIT: Noch eine Ergänzung: Bei dem AZ Delivery Board hatte ich auch schon Probleme mit Brownout, bei Code und Hardware, mit der andere Boards problemlos liefen. Du kannst mal testweise den Brownout Detektor deaktivieren und schauen ob das hilft. Das wäre ein starker Hinweis auf Probleme mit der Stromversorgung. Sollte aber keine Dauerlösung sein, da es zu anderen Problemen führen kann.
Zum Abschalten des Brownout Detektors:
#include "soc/rtc_cntl_reg.h"
und in setup()
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);