HomeBlogMagic

ESP8266 - SDK und Beispiele.

Ich habe mir vor kurzem ein ESP8266 Modul gegönnt und wollte diesen Anfangs einfach mit meinem STM32F4 Discovery verbinden um WLAN zu bekommen.
Das wird auch weiterhin noch ein Ziel bleiben.

Nachdem ich ein paar weitere Infos über den ESP8266 eingholt habe, war klar, dass sich das Modul auch hervorragend für den Standalone-Betrieb eignet. Dazu muss man die Firmware natürlich anpassen und selbst kompilieren.

Meine Versuche und Ergebnisse werde ich hier dokumentieren, einfach um das später auch nochmal nachvollziehen zu können.

Bauen des SDKs

Da ich für meine anderen Entwicklungen auch schon immer LinuxMint einsetze, werde ich das auch hier tun.

Als SDK habe ich mich für dieses hier entschieden: https://github.com/pfalcon/esp-open-sdk
Es bringt als Abhängigkeiten alles mit was man braucht und ein Tutorial für Ubuntu ist im Readme enthalten.

Zusammenfassung des builds

Die Readme auf github erklärt ausführlich wie das SDK zu bauen ist. Für mich selbst habe ich das in diesen ausführbarem Skript zusammengefasst:

sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial sed git unzip bash help2man wget bzip2
sudo apt-get install libtool-bin
git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
cd esp-open-sdk
make STANDALONE=y

# Create package
tar -czf esp-open-sdk.tar.gz examples/ esp-open-lwip/ esptool/ lx106-hal/ xtensa-lx106-elf/
cd ..

Das kompilieren hat in meiner VM etwa 22 Minuten gedauert. Am Ende lass ich ein tar Archiv mit allen notwendigen Tools erstellen. Das kann man später benutzen ohne jedesmal die komplette Toolchain bauen zu müssen.

Das SDK im CcOS

Ziel ist es mein Framework, wie schon auf anderen Mikrocontrollern und Betriebssystem, auch auf dem ESP8266 zum laufen zu bekommen.

Die CMakeLists im CcOS sind so aufgebaut dass die Toolchains und Tools automatisch geladen werden, ohne selbst noch was herunterladen zu müssen.
Das SDK was mit dem obigen Befehl gebaut wurde, habe ich in meinem Framework bereits erfolgreich eingebunden.

Das Framework baut bei jedem Commit in Github das blinky Beispiel aus dem Framework mit Travis einmal mit um zu schauen ob CcOS noch kompatibel zum SDK ist.

Im Tools-Ordner befindet sich ein Test-ESP8266.sh, damit wird nur der ESP8266 getestet und dient gleichzeitig als Blaupause für den korrekten cmake aufruf.

Arbeiten mit esptool.py

Das tool zum flashen der Firmware ist in python geschrieben. Zunächst habe ich dafür noch ein paar Pakete in meinem LinuxMint gebraucht:

sudo apt-get install python-serial

das esptool im SDK ist etwas veraltet. Deswegen ist es sinnvoll sich das aktuelleste zu laden:

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

Um mit dem Tool auf die Hardware zuzugreifen muss GPIO0 auf GND gelegt werden und der Chip resettet werden.

Die Paramters für esptool beginnen immer mit der tty/com Adresse und der Baudrate. Mit meinem Gerät ist der Aufruf immer so aufgebaut:

sudo python esptool.py --port /dev/ttyUSB0 --baud 115200 [command]

Wenn die Kommunikation funktioniert, dann kann man mit chip_id und flash_id ein paar Infos abrufen.

Zuallererst ein Backup machen

Dazu frägt man beim Gerät erst einmal die Flash Size ab mit:

sudo python esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id

In meinem Fall ist die Size 4MB, also speichere ich mir die Firmware wie folgt im Homeverzeichnis ab:

sudo python esptool.py --port /dev/ttyUSB0 --baud 115200 read_flash 0x00000 0x400000 ~/Backup_ESP8266.bin

Gleich im Anschluss kann man die Firmware zum Test wieder einspielen:

sudo python esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x00000 ~/Backup_ESP8266.bin

Flashen des KernelProjects

Im Framework wird das blinky Beispielprogramm vom SDK mit gebaut. Auch elf2image wird automatisch ausgeführt.
Um das Projekt zu flashen, hier mal ein Beispielaufruf:

sudo python ../../../../Cache/Toolchains/esp-open-sdk/esptool/esptool/esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x00000 ESP8266_KernelProject-0x00000.bin
sudo python ../../../../Cache/Toolchains/esp-open-sdk/esptool/esptool/esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x10000 ESP8266_KernelProject-0x10000.bin