oliverlorenz.com

[feed]  [twitter]  [mastodon]  [xing]  [linkedin]  [github]  [matrix] 

ESP8266 Firmware unter Ubuntu aufspielen

6. February 2017

In Vorbereitung auf meinen Workshop im März auf der Spartakiade beschäftige ich mich gerade verstärkt mit dem ESP8266. Das habe ich auch schon zuvor getan, doch habe ich zuvor noch nie die Situation gehabt, die Firmware neu aufspielen zu müssen.

Welche Firmware?

Viele Fragezeichen taten sich auf. Als erstes stellt sich die Frage welche Firmware man nutzen möchte. Die Überschrift verrät es eigentlich schon. Aber neben der Standard-Firmware existiert auch noch nodemcu welches den ESP in die Lage versetzt, LUA-Skripte auszuführen.

In meinem Fall habe ich mich aber dagegen entschieden, da ich es schlicht nicht brauche. Auch ihr solltet euch diese Frage stellen, denn die Ressourcen rund um die Standard-Arduino-Firmware sind um einiges Umfangreicher.

Die Tool-Chain

Wir streben folgendes an: Aufspielen der Firmware auf eine Wio Node und dessen letztendliche Programmierung mit der Arduino IDE. Dazu brauchen wir folgende Tools:

  • Einen ESP8266 (In unserem Fall Eine Wio Node)
  • Einen FTDI
  • Die Firmware Binaries
  • ESPTool
  • Das ganze machen wir auf Ubuntu

ESP8266 Firmware

Die Firmware ist nur wenige Kilobyte groß und auf GitHub verfügbar. Diese einfach per git herunterladen und irgendwo ablegen.

git clone https://github.com/espressif/ESP8266_AT.git

Merkt euch den Ort. Brauchen wir gleich wieder.

ESPTool Installation

Dieses Tool ist mittlerweile defacto-Standard und Handwerkszeug für den informierten IoT-Developer. Es versetzt uns in die Lage, per USB (oder eigentlich jede serielle Schnittstelle) über einen FTDI mit dem ESP zu kommunizieren.

Das ESPTool ist ein Python-Programm. Die meisten Linux-Distributionen bringen Python schon mit. Prüfen könnt ihr das, indem ihr folgendes in eure Terminal eintippt:

python --version

Solange irgendeine Versionsnummer angezeigt wird, ist in der Regel alles gut, und ihr müsst Python nicht extra installieren.

Die Installation des ESPTools selbst ist super easy:

sudo pip install esptool

und fertig! Wenn alles gut ist sollte mit folgender Eingabe ...

esptool.py

... folgendes angezeigt werden:

usage: esptool [-h] [--port PORT] [--baud BAUD]

{load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash,verify_flash,erase_flash,version}

Und schon habt ihr alles zusammen was ihr braucht um die Firmware auf den ESP zu spielen.

Arduino IDE Installation

Auch diese Installation ist super easy. Die Arduino-Webseite hilft euch da viel kompetenter weiter als ich das hier könnte.

Just Do it! Los geht es!

Ok, keine Ausreden mehr. Als erstes navigieren wir im Terminal in das Verzeichnis wo ihr die Firmware abgelegt habt. Mit einem ...

ls -la

... sollte folgendes zu sehen sein:

drwxrwxr-x 5 user user 4096 Feb 3 10:17 .
drwxrwxrwt 19 root root 45056 Feb 3 10:17 ..
drwxrwxr-x 5 user user 4096 Feb 3 10:17 at drwxrwxr-x 4 user user 4096 Feb 3 10:17 bin drwxrwxr-x 8 user user 4096 Feb 3 10:17 .git

Navigiert von da aus in das Verzeichnis "bin" mit:

cd bin

Dort befinden sich die Images die wir brauchen. Nun werfen wir mal einen Blick in die Dokumentation der ESP-Firmware (klick!). In der Readme kann man sehen, welche Speicherstellen die einzelnen Images haben müssen um zu funktionieren. Jaja, nichts mit Klickbunti. Hier sind wir wirklich Low-Level unterwegs ;) Interpretiert man die Doku richtig und übersetzt das ganze auf das ESPTool, kommt folgender Befehl bei raus:

sudo esptool.py --port /dev/ttyACM0 write_flash 0x00000 boot_v1.1.bin
0x01000 v0.20/user1.bin 0x7C000 esp_init_data_default.bin 0x7E000 blank.bin

Bei euch muss es übrigens nicht unbedingt /dev/ttyACM0 sein. Das kann von System zu System unterschiedlich sein. Wenn ihr euch nicht sicher seid, steckt den FTDI an den USB und startet die Arduino IDE. Im Menü Werkzeuge > Debug Port wird nun in der Regel nur ein serieller Port (in meinem Fall /dev/ttyACM0) angezeigt. Das ist der richtige Wert.

Führt diesen aus und wartet bis der Befehl erfolgreich beendet wurde.

Die üblichen Problemchen

Das erste mal sah die Ausgabe bei mir so aus:

error: espcomm_open failed
error: espcomm_upload_mem failed

Das lag daran, dass ich den ESP nicht in den richtigen Modus versetzt habe. Das ist aber ganz einfach wenn ihr folgendes tut. Hinweis: Lest die Liste einmal komplett durch bevor ihr loslegt:

  • Den Chip vom Strom trennen
  • An den Seiten findet ihr zwei Knöpfe. An einem steht klein "FUNC" an dem anderen "RST". Haltet den "FUNC"-Knopf gedrückt
  • Den Chip wieder an den Strom bringen (Knopf weiter halten)
  • Eine blaue LED blinkt ein kurzes mal auf, geht aber sofort wieder aus
  • Nun den Knopf loslassen

Nun kann der ESP bespielt werden. Manchmal kann es passieren, dass man das mehrere male machen muss.

Arduino IDE

So! Wir sind vorbereitet und es kann losgehen. Die Arduino IDE bringt einige Beispiele mit, die ihr einfach im Menü wählen könnt und ausprobieren könnt. Mit dem Hochladen-Knopf überträgt ihr den Code. Sollten in der Konsole Fehlermeldungen auftauchen, kann es wieder helfen den ESP mit dem Kniff aus "Die üblichen Problemchen" zu resetten.

Fazit

Wie man sieht ist die Arbeit mit dem ESP8266 echt kein Hexenwerk. In einfachen Schritten kommt man zum Ziel ohne wirklich alle Zusammenhänge bis ins Detail begreifen zu müssen. Ein großer Vorteil der Arduino-Platform.

Mich würde Interessieren welches Projekt euch hierher geführt hat. Was wollt ihr umsetzen? Erzählt mir davon!