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

#990
generalovernight
Teilnehmer

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