Bereits im letzten Jahr hatte ich mir 2 ESP8266 Module in China bestellt. Zusammen mit NodeMCU ergab sich dabei auch schon bisschen PWM und Internet. So richtig überzeugend war das ganze jedoch nicht wirklich. NodeMCU ist auf Lua basierend, Lua ist naja. Seit geraumer Zeit ist vom Hersteller selber (Espressif) ein C Software SDK für die ESP8266 Dinger verfügbar. Mit diesem kann man die meisten Dinge für den ESP8266 Prozesser ziemlich gut abstrahiert in C nutzen. Ebenso gibt es einen GDB Debugger, über welchen man super bequem via UART (USB) debuggen kann. Alles in allem ergibt sich so ein super „package“.
Der einzige Nachteil für mich war bisher das fehlen einer sauber funktionierenden und umfangreichen Entwicklungsumgebung für das Ding. Ich habe auch nach längerer Suche im Netz keine zufriedenstellende Anleitung/Lösung gefunden. Daher habe ich mich rangesetzt und das Espressif SDK mit dem GDB Debugger in Eclipse integriert. Zusammen ergibt das eine erstaunlich gut funktionierende Kombination. Nachfolgend eine Anleitung wie ich unter Linux (Lubuntu) vorgegangen bin. Ich gehe dabei von einer frischen Lubuntu 15.10 32Bit Installation aus:
sudo apt-get install make unrar autoconf automake libtool gcc g++ gperf \
flex bison texinfo gawk ncurses-dev libexpat-dev python python-serial sed \
git unzip bash python-serial libtool-bin openjdk-7-jdk
Vollständie Rechte für den Ordner /opt geben:
sudo chmod 777 /opt
Unter /opt einen Ordner „espressif“ erstellen:
sudo mkdir espressif
In den Ordner wechseln:
cd espressif
Git Directory vom Compiler klonen:
git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
In den Ordner wechseln:
cd esp-open-sdk/
Compiler kompilieren:
make STANDALONE=y
Nach erfolgreichem kompilieren Eclipse (IDE for C/C++ Developers) herunterladen und ebenfalls in den /opt/espressif Ordner entpacken.
Nun laden wir das Espressif NONOS SDK und entpacken dieses ebenfalls unter /opt/espressif. Dieses lässt sich nicht auf Github finden, sondern muss direkt vom Espressif Forum geladen werden: http://bbs.espressif.com/viewtopic.php?f=46&t=1702
Nun das Beispielprogramm von NONOS unter examples/IoT_Demo/* nach app/ kopieren.
Nun noch das esptool herunterladen. Dieses wird benötigt um den ESP8266 mit den Binarys zu bespielen. Dieses in den Ordner vom NONOS SDK klonen:
git clone https://github.com/themadinventor/esptool.git && mv esptool/* /opt/espressif/esp_iot_sdk_v1.5.2/tools/ && rm -rf esptool/
Wir können die Applikation nun in Eclipse importieren. Dafür unter „File->New->Makefile Project with Existing Code“ den Dialog öffnen. Unter „Project Name“ einen Namen vergeben, unter „Existing Code Location“ den Pfad zum NONOS SDK angeben. Toolchain auf „<none>“.
Nun müssen einige Build Einstellungen in Eclipse angepasst werden. Dafür den Dialog unter „Project->Properties“ öffnen. Unter „C/C++ Build“ den haken bei „Use default build command“ entfernen und das make um “ COMPILE=gcc“ ergänzen.
Leider ist die Umgebungsvariable „$PATH“ in Eclipse ziemlich kaputt. Daher erzeugen wir unter „C/C++ Build->Environment“ eine dedizierte „PATH“ Variable. Diese muss folgenden Inhalt aufweisten: „/opt/espressif/esp-open-sdk/xtensa-lx106-elf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games“
Prinzipiell ist der Part um das Projekt zu kompilieren nun abgeschlossen. Das Projekt sollte zu diesem Zeitpunkt problemlos via „Project->Build all“ baubar sein.
Nun setzen wir einen Builder auf, damit Eclipse nach erfolgreichem builden automatisch den Upload zum ESP startet. Wir erstellen uns den Builder „ESP_UPLOAD“:
Unter Location den Pfad zum esptool.py angeben, unter working dir das Directory vom esptool.py:
Aktivieren das es bei auto build + manual build ausgeführt wird:
Nun sollten die Binarys automatisch bei erfolgreichem Build auf den ESP gespitzt werden.
Jetzt können wir uns dem letzen Part zuwenden, dem Debugger. Diesen klonen wir zuerst in den „app/“ Ordner vom NONOS SDK:
git clone https://github.com/espressif/esp-gdbstub.git && mv esp-gdbstub gdbstub
Nun kopieren wir das Makefile von „app/user/Makefile“ nach „app/esp-gdbstub/“. Dieses öffnen wir nun mit einem Editor wie z.B. nano. Der Parameter „GEN_LIBS“ muss auf folgendes angepasst werden: „GEN_LIBS = libgdbstub.a“
Nun muss das Makefile von „app/Makefile“ angepasst werden. Genauer gesagt „SUBDIRS“ und „TARGET_LDFLAGS“:
SUBDIRS= \
gdbstub \
user \
driver
TARGET_LDFLAGS = \
-ggdb \
-nostdlib \
-Wl,-EL \
--longcalls \
--text-section-literals
COMPONENTS_eagle.app.v6 = \
user/libuser.a \
driver/libdriver.a \
gdbstub/libgdbstub.a
Jetzt kann der Debugger von Eclipse konfiguiert werden. Dafür unter Run->Debug Configurations den Konfigurationsdialog öffnen. Mit einem Doppelklick auf „C/C++ Remote Application“ eine neue Remote Application erstellen. Unter „C/C++ Application“ die .out Datei des Kompilers angeben. Siehe Bild:
Im Debugger als Stopfunktion „user_init“ angeben, unter „GDB debugger“ den Pfad zum xtensa GDB Debugger angeben:
Unten unter „Select others…“ auf „Manual Remote Debugger Launcher“ umstellen:
Schlussendlich noch den korrekten Serial Port unter „Connection“ angeben. Danach mit „Apply“ speichern und den Dialog verlassen.
In der Datei gdbstub-cfg.h muss der Parameter „GDBSTUB_FREERTOS“ noch auf 0 gestellt werden da wir das NONOS und nicht RTOS haben.
Nun muss nurnoch im „user_main.c“ das Include für den gdbstub + uart_div_modify für die Baudrate + gdbstub_init(); ergänzt werden. Nun kann testweise der Debugvorgang gestartet werden. Eclipse sollte nun bei erfolgreicher Konfiguration die Solution builden + uploaden + Debugger starten. Bei gesetztem Breakpoint sollte dieser an dem Punkt halten. Allenfalls müssen noch Funktionen auskommentiert werden, damit genügend Ram im ESP frei ist:
Beschreibung zum SDK: