Antwort auf: Kann nichts mehr hochladen und das Board reagiert nicht mehr
› Foren › Adventskalender › Kann nichts mehr hochladen und das Board reagiert nicht mehr › Antwort auf: Kann nichts mehr hochladen und das Board reagiert nicht mehr
Wenn die AEG-Methode auch nicht mehr funktioniert (alles Ausschalten, Einschalten, Geht), dann hatte ich mit folgender Vorgehensweise Erfolg:
1. Einen Factory Reset über die SerialConsole mit AT+RESUME
2. mit einem kleinen Sketch die Baud-Rate wieder richtig (für den nanoESP) eingestellt.
Dazu brauchst du nur ein paar Code-Zeilen aus Fabians Initialisierungsprogramm,die ich in einem anderen Kommentar bereits beschrieben habe. Wenn du das ganze in eine ansonsten leere setup Routine packst, ist die erste Zeile überflüssig. Die setup-Routine sieht dann so aus:
void setup() {
Serial.begin(19200);
// Das ESP-Modul ist nach dem Factory-Reset auf 115200 Baud eingestellt,
// also tun wir ihm den Gefallen und stellen das auch so ein ;-)
esp8266.begin(115200);
// ... danach sagen wir ihm aber, stell jetzt auf 19200 Baud um (und 8 bit,
// 1 Stopbit, keine Parity und keinen Hardwarehandshake ein)
Serial.println(esp8266.println("AT+UART_DEF=19200,8,1,0,0"));
// und hier verabschieden wir uns vom ESP-Modul
esp8266.end();
// Damit wir auch sehen, dass alles funktioniert hat, verbinden wir uns erneut
// mit dem ESP, diesmal mit der "richtigen" Baud-Rate ...
esp8266.begin(19200);
esp8266.setTimeout(6000);
// ... führen einen Reset durch ...
esp8266.println("AT+RST");
if (!esp8266.findUntil("ready", "Error")) {
Serial.println("Error sending reset command");
}
// ... und lassen die LED D3 leuchten
digitalWrite(LED_BUILTIN, HIGH);
}
Nachtrag:
etwas komfortabler wird das ganze noch mit folgender loop-Routine. Sie lässt die D3 LED blinken und erlaubt die Eingabe von AT-Kommandos in der SerialConsole.
void loop() {
// Als "static" deklariert bleibt der Wert erhalten, auch wenn die
// Funktion verlassen wir. Sie hat daher beim nächsten Aufruf denselben
// Wert wie am Ende dieser Routine. Außerdem wird die Initialisierung (der
// Code rechts vom "=") nur beim ersten Aufruf der Funktion ausgeführt.
// Eine globale Variable ist so überflüssig.
static unsigned int i = 0;
// Für die D3 LED ist standardmäßig das Makro LED_BUILTIN definiert
// Das % ist der Modulo Operator in C. "i++ % 2" leifert daher immer
// abwechselnd 1 und 0; HIGH und LOW sind standarmäßig definierte Makros
// für die entsprechenden Zustände der Ausgänge.
// Der Code "x ? a : b" gibt a zurück, wenn x wahr ist (ungleich 0) und sonst b
digitalWrite(LED_BUILTIN, i++ % 2 ? HIGH : LOW);
if (esp8266.available()) {
Serial.write(esp8266.read());
} else if (Serial.available()) {
esp8266.write(Serial.read());
} else {
delay(300);
}
}
HTH
- Diese Antwort wurde geändert vor 8 Jahren, 8 Monaten von generalovernight.