ESP8266 ESP-01 und ESP-01S WLAN-Modul flashen

ESP8266 ESP-01 und ESP-01S WLAN-Modul flashen

Kategorien: Arduino

ESP8266-01

Wollen wir die ESP8266-Firmware aktualisieren (oder, da das SoC von diversen Drittherstellern verwendet wird, mit einer offiziellen Espressif-Firmware), müssen wir das Modul neu flashen.

Wie das geht, zeige ich Euch in diesem Beitrag.

 

Was benötigen wir dafür?

Einen Arduino UNO/Nano, etc. oder einen FTDI-Programmer,
ein ESP-01-Modul, oder ein ESP-01S-Modul
eine externe 3,3V-Stromversorgung,
Breadboard,
Widerstände (3x 10KOhm, 1x 1KOhm),
Taster,
Kabel

Die Flash-Software, so wie die (aktuellste) Firmware.

 

Wie erkenne ich, ob das Modul ein ESP-01 oder ein ESP-01S ist?

Am Einfachsten erkennt man es an den LEDs unterhalb der Antenne. Ist ein helles SMD-LED-Bauteil vorhanden, das quer auf die Platine gelötet ist, handelt es sich um die neuere S-Version (rechtes Bild).

Sind vier kleinere SMD-Bauteile längs auf der Platine verlötet, ist es die etwas ältere Version ohne das “S” (linkes Bild).

Weiteres Erkennungsmerkmal ist, dass auf der Platine der S-Version mehrere SMD-Komponenten um die beiden ICs verbaut sind, also insgesamt mehr Bauteile auf gleicher Fläche vorhanden sind.

Hier hat zwar die S-Version auch die Schriftzüge “S-Series” und “ESP-01S”, aber darauf sollte man sich nicht verlassen. Ich habe auch schon S-Module ohne besondere Beschriftung gesehen.

ESP01vsESP01S

Auf die technischen Unterschiede gehe ich jetzt nicht näher ein. Ihr könnt aber in unserem Shop in den Spezifikationen nachschauen, wo die Unterschiede liegen. (ESP-01 vs. ESP-01S)

 

Flash Download Tools herunterladen

Zuerst sollten wir uns die “Flash Download Tools”-Software von Espressif herunterladen. Diese ist hier zu finden unter “Tools” -> “Flash Download Tools (ESP8266 & ESP32)”
(Das Programm ist für Windows PC. So weit ich gesehen habe, existiert unter github auch eine Variante für Linux-Rechner, da das Tool sowieso Phyton benutzt und somit Plattformunabhängig ist.
Da ich die Linux-Version aber nicht testen konnte, bezieht sich das Tutorial auf das Windows-Tool.)

Installieren muss man es nicht, da man das Tool direkt im Verzeichnis starten kann.

 

Firmware herunterladen

Es gibt zwei Arten von Software Development Kits (SDK) für ESP8266: Nicht-OS-SDK und RTOS-SDK.
Das Nicht-OS-SDK basiert, wie der Name schon sagt, auf keinem Betriebssystem.
Mit diesem SDK kann man IOT-Demo- und AT-Befehle kompilieren.
Das RTOS-SDK basiert dagegen auf FreeRTOS.

Ich verwende das Nicht-OS-SDK (technisch gesehen, die Firmware-Dateien, die auf dem Nicht-OS-SDK basieren).
Die ESP8266-Firmwaredateien liegen in Form von Binärdateien vor (.bin-Dateien).

Da ich nur den AT-Befehlssatz des ESP8266 verwenden werde, werde ich nur die mit den AT-Befehlen verknüpften Bin-Dateien herunterladen.
Diese sind ebenfalls hier auf der Espressif-Seite unter dem Reiter “AT” zu finden und dort können die letzten aktuellen AT Commands Firmware für ESP8266 heruntergeladen werden.

Jetzt haben wir alles zusammen und können loslegen.

Sehr wichtig: Nutzt Ihr einen Arduino als Programmer, so installiert als erstes den Sketch “BareMinimum”, oder schreibt den folgenden Code auf Euren Arduino.

Falls Ihr das nicht macht, kann es sein, dass das anschließende Flashen des ESP-Moduls nicht funktioniert und der Vorgang mit kuriosen Fehlermeldungen abgebrochen wird.

Wir nutzen den Arduino ja sozusagen als Durchgangsmedium, um mit dem ESP-Modul kommunizieren können. Hier würde ein anderer installierter Sketch möglicherweise die Kommunikation verhindern oder stören.

Jetzt bauen wir die folgende Schaltung auf, um das ESP-Modul ansteuern zu können:

 

Beschaltung für ein ESP-01-Modul:

Verwendet folgende Schaltung für ein ESP-01-Modul.

 

Beschaltung für ein ESP-01S-Modul:

Das ESP-01S-Modul besitzt bereits integrierte Pull-Down-Widerstände.
Wenn Ihr versucht, die obere Beschaltung zu verwenden, wird das flashen des Moduls scheitern.
Im Großen und Ganzen bleibt die Schaltung aber gleich. Lediglich der Widerstand am Pin GPIO 0 und am CHPD/EN-PIN werden entfernt. GPIO 0 wird mit GND verbunden, CHPD/EN mit VCC.

ESP8266-01S flashen_Steckplatine

 

Kurze Anmerkung zur Schaltung generell:
Mit dem Button können wir einen Reset auslösen.
Die externe Stromversorgung sorgt dafür, dass das Modul nur mit 3.3V betrieben wird. Der 3.3V-Ausgang des Arduinos reicht in den meisten Fällen nicht aus, da er nicht genügend Strom zur Verfügung stellt. Das ESP-Modul ist – gerade beim booten – nämlich sehr hungrig.
RX (ESP-Modul) muss mit RX (Arduino) verbunden sein und
TX (ESP-Modul) muss mit TX (Arduino) verbunden sein, da wir ja das ESP-Modul programmieren müssen (zur Erinnerung: Der Arduino trägt die Signale nur an das Modul weiter und kommuniziert nicht mit ihm.)

 

Flashen der Firmware

Um die Firmware jetzt auf unseren ESP8266 flashen zu können, muss man sich in das Verzeichnis begeben, in dem sich das entpackte Programm befindet.
Startet die Anwendungsdatei ESPFlashDownloadTool_vx.y.z.

Es öffnet sich ein Fenster, in dem wir den ersten Programmpunkt “ESP8266 Download Tool” anklicken und starten.

zum Vergrößern Bild anklicken

Es öffnet sich ein weiteres Fenster, in dem man die Firmware-Dateien auswählen muss, die installiert werden sollen.

zum Vergrößern Bild anklicken

Es müssen vier Dateien an vier verschiedene Speicheradressen hochgeladen werden.

File Address in Flash Memory
boot_v1.7.bin 0x00000
user1.1024.new.2.bin 0x01000
esp_init_data_default.bin 0xFC000
blank.bin 0xFE000

HINWEIS: Diese Liste bezieht sich auf die Flash-Speicherzuordnung für Firmware über Funk (FOTA) für ESP8266-Module mit 1 MB Flash. (Neuere Module haben alle 1MB Flash)
Informationen zu anderen Flash-Größen sind in der ESP8266-Kurzanleitung zu finden.

Im ESP8266 Download Tool auf der Registerkarte SPI Download können die eben genannten Dateien mit der Option “Download Path Config” ausgewählt werden, indem man auf die Schaltfläche […] klickt. Die entsprechenden Adressen tragen wir dann manuell dahinter ein.

Danach stellen wir nach Auswahl der vier Dateien und dem Ausfüllen der Adressen die folgenden Felder wie im Screenshot angegeben, ein.
Wenn später die Einstellungen passen und damit man nicht jedesmal diese Daten neu eingeben muss, kann man einen Haken bei “LOCK SETTINGS” setzen.
Damit sind die Felder vor dem Überschreiben geschützt.

Jetzt müssen wir noch den richtigen COM-Port auswählen, so wie die korrekte Baudrate.
Kleiner Tipp: UNBEDINGT darauf achten, das “115200” (115.200 Baud) eingestellt ist, denn beim ersten Start übersah ich, dass “1152000” (1.152.000 Baud) vorausgewählt war. Ich bin schier verzweifelt und das wegen einer Null die zu viel ist und die nicht direkt auffiel.

Bevor wir jetzt mit dem flashen des ESP-Moduls beginnen können, drücken wir den Button auf dem Breadboard, um das Modul zum Neustart zu zwingen.
Dadurch das GPIO0 nun auf LOW gezogen ist, startet das Modul im Programmiermodus und ist nun bereit, die neue Firmware zu empfangen.

Jetzt klicken wir in der Flash-Tool-Software auf “START”.

Das Flashen der Firmware in ESP8266 sollte beginnen. Links im Terminalfenster erscheint ein “Uploading Stub”. Sollte das nicht der Fall sein, nochmal den Reset-Knopf drücken.
Im rechten Fenster wird unter “DETECTED INFO” detaillierte Informationen zu dem ESP-Modul angezeigt, und neben dem grünen “Download”-Panel erscheinen zwei MAC-Adressen, die eine AP- und eine STA-Adresse enthalten.

Ganz unten läuft ein blauer Balken von links nach rechts.

Sobald aus dem grünen “Download”-Panel ein “Finish”-Panel wird, ist der Flashvorgang erfolgreich abgeschlossen.

Falls nicht, erscheint eine entsprechende Fehlermeldung links im Terminalfenster.
Sollte das passieren, solltet Ihr als Erstes überprüfen, ob COM-Port und Baudrate korrekt sind.

zum Vergrößern Bild anklicken

Zum Abschluss prüfen wir, ob die Firmware korrekt installiert wurde. Hierzu öffnen wir einen Seriellen Monitor (beispielsweise in unserer Arduino-IDE unter “Werkzeuge”->”Serieller Monitor”.

 

zum Vergrößern Bild anklicken

Im unteren Bereich des Fensters muss “Sowohl NL als auch CR” ausgewählt sein und die Baudrate muss “115200” betragen.

Ganz wichtig ist es, dass wir jetzt das Kabel von GPIO0 vom Breadboard abziehen und noch einmal den Reset-Knopf drücken.
Somit erreichen wir, dass das ESP-Modul nicht mehr im Programmiermodus, sondern im regulären Modus startet.

Nach ein paar wirren Zeichen sollte ein “ready” in einer neuen Zeile erscheinen.

Jetzt geben wir in der oberen Eingabezeile “AT+GMR” ein. Bitte beachten, dass alle AT-Befehle vollständig in Großbuchstaben geschrieben werden, sonst werden sie nicht als solche erkannt.

Mit diesem Befehl können wir die aktuell installierte Firmware-Version auf dem Modul überprüfen.
In diesem Fall ist es die
AT version:1.5.0.0(Oct 24 2017 12:03:18) und die
SDK version:2.1.0(ace2d95)

 

zum Vergrößern Bild anklicken

 

Nachtrag vom 26.10.2019: Wir bieten jetzt einen günstigen ESP-Programmer in unserem Shop an, der es einem wesentlich erleichtert, ESP-01er-Module zu flashen.
Wir haben den ESP-Programmer ausprobiert und ihn auf Herz und Nieren untersucht. Das Ergebnis könnt Ihr hier nachlesen: “Modul mit dem ESP-Programmer programmieren


6 Comments

Didi

23. Januar 2022 at 11:27 am

Hallo,
gut aufgebaute Seite, verständlich und auch für Neulinge gut nachvollziehbar.
Mitlerweile gibt es aber neuere Versionen. Ich habe jetzt die 8266-IDF-AT_V2.2.1.0 und flash_download_tool_3.9.2
Jetzt hab ich ein Problem mit den benötigten Dateien. Welche werden jetzt benötigt?
Danke Grüße
Didi

julian

24. August 2021 at 8:30 am

Bei mir war nach ewigem Suchen beim ESP-01 der Widerstand R14 das Problem.
Nach dem Entfernen funktionierte alles wie es soll.

Simon Stadler

17. Januar 2021 at 6:55 pm

Nach Start erscheint im Terminal Fenster:
test offset : 1032192 0xfc000
case ok
test offset : 1040384 0xfe000
case ok
test offset : 0 0x0
case ok
test offset : 4096 0x1000
case ok
Traceback (most recent call last):
File “download_panel_info.py”, line 448, in OnButton_StartButton
File “download_panel_info.py”, line 421, in start_func
File “download_panel_info.py”, line 703, in flash_config
UnicodeDecodeError: ‘gb2312’ codec can’t decode bytes in position 35-36: illegal multibyte sequence
Hat jemand Erfahrung mit dieser Fehlermeldung?
Dankeschön
Simon

    Ronin

    19. Januar 2021 at 1:34 pm

    Hallo Simon,

    nur eine Vermutung, denn das Problem konkret hatte ich noch nicht. Er hat aber weniger was mit dem flashen zu tun und mehr mit einem möglichen Programmfehler.
    Google mal nach “UnicodeDecodeError: ‘gb2312’ codec can’t decode bytes”.. da gibts parallele Probleme unter Python. So wie es aussieht, sind in Zeile 35-36 Zeichen, die UTF8 nicht erkennt. Überprüfe mal Deinen Quellcode.

    Viele Grüße, Michael

Daniel Henne

18. November 2020 at 1:23 pm

Hallo, super Beitrag für den schnellen Einstieg. Leider hat sich ein kleiner Fehler eingeschlichen. Die Basisadresse für die user1.1024.new.2.bin ist nicht 0x10000 sondern 0x01000. Kleiner Zahlendreher, der auf deinem Screenshot allerdings korrekt dargestellt ist. Kannst Du das bitte ändern?

Liebe Grüße

Daniel Henne

    Ronin

    20. November 2020 at 12:15 pm

    Hallo Daniel,

    super. Vielen Dank für den Hinweis. Habe ich korrigiert.

    Viele Grüße,
    Michael

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.