In diesem Artikel erkläre ich euch, wie ihr ein ESP8266 mit PlatformIO programmieren könnt. Erfahrt, wie ihr schnell und einfach ein ESP8266 Board in Betrieb nehmt und es effizient überwacht. Bevor ihr beginnt, stellt sicher, dass ihr unter Ubuntu die Pakete python3 und python3-venv installiert habt.
sudo apt install python3 python3-venv
Auswahl an ESP8266 Boards für die PlatformIO Programmierung
- 3x ESP8266 NodeMCU ESP-12E (verlötet)
- 3 x D1 Mini NodeMcu mit ESP8266-12F (Stiftleisten unverlötet)
- 1x NodeMCU Amica Modul V2 ESP8266 ESP-12F (verlötet)
- NodeMCU ESP8266 mit 0.96“ OLED Display
Installation und Konfiguration von Visual Studio Code und PlatformIO
Ausgehend davon, dass ihr bereits VS Code installiert habt rate ich euch zum Anlegen eines neuen Profils. Ich habe mir angewöhnt für unterschiedliche Programmiersprachen eigene Profile in VS Code zu nutzen. Dies reduziert die Anzahl der Extensions und steigert dadurch die Übersichtlichkeit und Performance der Entwicklungsumgebung.
Zum Erstellen eines neuen Profiles navigiert zu File -> Preferences -> Profiles -> Create profile…
Möchtet ihr Extensions von anderen Profilen kopieren könnt ihr auch ein Profil als Kopiervorlage nehmen. Ich wähle jedoch „None“ aus und klicke auf „Create„.
Als nächstes werden wir das PlatformIO Extension installieren. Sucht im Marketplace nach PlatformIO und installiert die Erweiterung.
Nach der Installation sollte in der Leiste ganz unten ein neues Icon in Form eines Hauses verfügbar sein. Dieses Icon ruft den Startbildschirm der PlatformIO Erweiterung auf.
Ist euer Board per USB verbunden solltet ihr dieses unter Devices bereits sehen. Bei mir war dies zu Beginn leider nicht der Fall und ich musste das Paket „brltty“ deinstallieren (siehe Fehlerbehandlung).
Erstellen und konfigurieren eines PlatformIO Projektes für das ESP8266 Board
Im Startbildschirm der Erweiterung können wir ein neues Projekt über „New Project“ anlegen. Es gibt mehrere ESP8266 Boards zur Auswahl. Ich fuhr immer am besten mit dem „WeMos D1 mini Pro (Wemos)“ und hatte nie Probleme.
Nach Abschluss der Erstellung sollte die Umgebung etwa so aussehen:
Die Baudrate für das Monitoring setze ich in der platformio.ini manuell auf 115200 (Standard 9600). Ich fixiere die Baudrate diese um später in der Applikation auf den gleichen Wert setzen zu können.
ESP8266 mit PlatformIO programmieren und flashen (hochladen)
Bevor mit der eigentlichen Programmierung des ESP8266 mit PlatformIO begonnen wird, schlage ich vor, ein Beispielprogramm auf den ESP8266 zu flashen, um zu testen, dass alles funktioniert. Der angeführte Beispiel Code lässt die integrierte LED auf dem Board blinken. Öffnet die main.cpp im src Ordner wie folgt.
#include <Arduino.h>
void setup() {
//Zum Testen der Verbindung setzen wir die integrierte LED als OUTPUT
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
//LED aus
digitalWrite(LED_BUILTIN, LOW);
//500ms warten
delay(500);
//LED an
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
}
Wählt in der Vertikalen Navigation links PlatformIO aus und startet den Task Upload. Das Projekt wird kompiliert und auf das Board hochgeladen.
Monitoring der seriellen Ausgabe auf dem ESP8266
Unser Beispiel Code bringt die LED zum Blinken. Der Code beinhaltet noch keine Ausgabe. Damit wir etwas im Monitoring sehen können, wird der Code wie folgt erweitert:
#include <Arduino.h>
void setup() {
//Zum Testen der Verbindung setzen wir die integrierte LED als OUTPUT
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
//LED aus
Serial.println("LED aus");
digitalWrite(LED_BUILTIN, LOW);
//1000ms warten
delay(1000);
//LED an
Serial.println("LED an");
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
}
Zum Bauen und Hochladen des Projektes nutzen wir statt „Upload“ die Schaltfläche „Upload and Monitor„. Das Projekt wird compiliert und hochgeladen. Anschließend öffnet sich im Terminal die Verbindung zum Board und zeigt die Ausgaben an.
Fehlerbehandlung
Während des Projekte hatte ich drei Probleme mit der Verbindung per USB zum ESP8266 Board.
Verbindung konnte überhaupt nicht hergestellt werden
Ich konnte zunächst überhaupt keine Verbindung zum Board herstellen. Mein Rechner reagierte nicht auf das Einstecken des USB Kabels. Grund dafür war tatsächlich das USB Kabel. Nach Austauschen des Kabels funktionierte es. Seltsamerweise funktioniert das „defekte“ USB Kabel bei anderen Devices.
Broken Pipe
Im /var/log/syslog bekam ich eine „broken pipe“ Fehlermeldung. Konkret:
brltty: USB control transfer error 32: Datenübergabe unterbrochen (broken pipe)
Nach kurzer Recherche wurde empfohlen das brltty Paket zu deinstallieren.
sudo apt remove brltty
Nachdem Deinstallieren ist ein Neustart nötig!
UserSideException: [Errno 13] could not open port /dev/ttyUSB0
Dieses Problem tritt aus Berechtigungsgründen auf. Euer Benutzer hat nicht die Berechtigung um auf den USB Port zuzugreifen. Ob ich hier die korrekte Lösung habe weiß ich nicht. Als Workaround funktioniert folgendes:
sudo chown $(whoami) /dev/ttyUSB0
Dieser Befehlt sorgt dafür, dass euer aktueller Benutzer Beseitzer der USB Schnittstelle werdet.