Bevor die Komponenten des Feinstaubsensors zusammengebaut und verkabelt werden, muss die Software aufgespielt werden. Dazu sind ein paar Vorarbeiten nötig – unter anderem die Installation der Arduino IDE (integrated development environment) auf einem PC. Von diesem wird die Feinstaub-Software dann mit Hilfe der Arduino IDE per USB auf den NodeMCU geflasht (also ins Flash-Memory übertragen). Verwenden kann man dazu einen Windows-PC – ich zeige aber wie es geht anhand eines Linux-Rechners. Das kann auch eine Virtuelle Maschine sein, sie muss lediglich über den USB-Anschluss verfügen können.
Was ist Arduino?
Das Arduino-Projekt widmet sich der Mikrocontroller Entwicklung. Es besteht zum einen aus Hardware, das sind die Arduino-Boards mit Namen wie Uno, Nano, Mega, Duemillanove und so weiter. Diese Boards enthalten jeweils einen Mikrocontroller aus dem Hause AVR und jede Menge Peripherie, wie digitale und analoge Ein- und Ausgänge und einen USB-Anschluss zur Stromversorgung und als serielle Schnittstelle zur Verbindung mit einem PC. Software ist der zweite Teil des Projekts und das ist vor allem besagte Arduino IDE. Die wird auf einem PC installiert und erlaubt das Schreiben, Kompilieren und Flashen von Sketches (so heißen Mikrocontroller-Programme in der Arduino-Welt) für die Arduino-Boards. Besonders hilfreich ist dabei eine umfangreiche Sammlung von Softwarebibliotheken für verschiedene Mikrocontroller, Peripherieeinheiten, Zusatzhardware oder Programmfunktionen.
Und was hat das Feinstaubprojekt mit Arduino zu tun?
Eigentlich nichts, denn wir verwenden überhaupt kein Arduino-Board. Allerdings lässt sich die Arduino IDE so erweitern, dass sie auch unsere NodeMCU mit dem ESP8266 Mikrocontroller unterstützt. Und so haben sich die Macher des Stuttgarter Feinstaub-Projekts wohl dazu entschlossen, die Arduino IDE als Basis für den Softwareteil des Feinstaubsensors zu verwenden.
Lange Rede – kurzer Sinn: Wir brauchen die Arduino IDE auf einem PC um von dort aus die Feinstaub-Software auf den Mikrocontroller flashen zu können.
Arduino IDE installieren
Wer als PC einen Windows-Rechner verwenden möchte, den verweise ich an die Originalanleitung des Stuttgarter Projekts. Wer einen Linux-PC verwendet, sollte die Originalanleitung auch gelesen haben, bekommt es aber nachfolgend ausführlich erklärt. Dabei nutze ich ein frisch installiertes Ubuntu 16.04 LTS in Form einer VMware virtuellen Maschine. Ein anderes Linux – auch ohne Virtualisierung – tut es natürlich auch.
Über die Paketquellen von Ubuntu ließe sich auch eine Arduino IDE installieren, aber in einer sehr alten Version, so dass das keine reelle Option darstellt.
Download
Die Downloadseite lautet: https://www.arduino.cc/en/Main/Software, dort wählen wir die 64-Bit-Linux-Version aus und laden sie herunter. Im Sommer 2017 ist das die Version 1.8.3. Als Ergebnis liegt dann im Downloads-Verzeichnis eine Datei mit dem Namen arduino-1.8.3-linux64.tar.xz
. Die klicken wir mit der rechten Maustaste an und wählen Mit Archivverwaltung öffnen. Das Programm muss dorthin extrahiert werden, wo es später laufen soll. Also eher nicht unter Downloads sondern besser direkt in den Persönlichen Ordner. In der Archivverwaltung klicken wir auf Entpacken, dann links auf Persönlicher Ordner, Entpacken und Beenden. Im Persönlichen Ordner gibt es nun ein neues Verzeichnis: arduino-1.8.3
.
Installations-Skript laufen lassen
Jetzt brauchen wir ein Terminal-Fenster, dort wechseln wir in das neue Verzeichnis und starten dann das Installations-Skript:
helmut@neina:~$ cd arduino-1.8.3
helmut@neina:~/arduino-1.8.3$ ./install.sh
Adding desktop shortcut, menu item and file associations for Arduino IDE… done!
Nun sollte ein neues Icon auf dem Desktop liegen mit dem Namen Arduino IDE, mit dem wir die Entwicklungsumgebung starten können.
Boardverwalter in Arduino IDE installieren
Damit die Arduino IDE nicht nur mit den klassischen Arduino-Boards umgehen kann, sondern auch mit unserem NodeMCU-Board, lässt sich ein zusätzlicher Boardverwalter installieren. Innerhalb der Arduino IDE machen wir das per Klick auf Datei – Voreinstellungen und tragen dann bei Zusätzliche Boardverwalter-URLs folgenden Link ein:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Nach OK gehen wir nach Werkzeuge – Board … – Boardverwalter und suchen nach esp8266 (ganz unten), klicken auf den Eintrag esp8266 by ESP8266 Community, wählen den neusten Softwarestand und klicken Installieren. Das dauert einen Moment. Danach muss die Arduino IDE neu gestartet werden.
Jetzt können wir unser NodeMCU-Board auswählen, dazu unter Werkzeuge – Board… – NodeMCU 1.0 (für NodeMCU v2 und v3) anklicken.
Nun müssen wir noch den richtigen Anschlussport auswählen. Das geht nur, wenn das Board auch angeschlossen ist. Wir stecken also jetzt das NodeMCU-Board mit einem (nicht zu langem) USB-Kabel an den PC an. Wer VMware verwendet sorgt dafür, dass der USB-Port an die richtige virtuelle Maschine connected wird. Dann klicken wir in der Arduino IDE auf Werkzeuge – Port. Typischerweise sollte die richtige Port.Bezeichnung /dev/ttyUSB0 lauten. Wer unsicher ist, der steckt das USB-Kabel noch einmal ab. Der Port, der jetzt aus der Auswahl verschwunden ist, wäre der richtige gewesen.
Verbindung zum Mikrocontroller testen
Nun haben wir den Mikrocontroller per USB mit dem PC verbunden und können testen, ob die Kommunikation zwischen den beiden klappt. Zu diesem Zweck hat die Arduino IDE einen seriellen Monitor, den wir mit Werkzeuge – Serieller Monitor aufrufen können. dort stellen wir die Übertragungsgeschwindigkeit auf 115200 Baud und für das Zeilenende Sowohl NL als auch CR ein.
Dann können wir am NodeMCU-Board die Reset-Taste (RST) drücken um einen Neustart auszulösen. Nach einer Reihe kryptischer Zeichen sollte etwas lesbares erscheinen, wie hier im Beispiel:
Farylink Technology Co., Ltd. v1.0.0.1
ready
Sollte das nicht funktionieren und ein Fehler beim Öffnen des seriellen Ports ‚/dev/ttyUSB0‘ ausgegeben werden, könnte es sich um ein Rechteproblem handeln. Das können wir überprüfen mit:
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Jul 8 17:11 /dev/ttyUSB0
Der Rootuser und die Gruppe dialout
haben Zugriff auf den Port, andere User, so wie der, mit dem wir angemeldet sind, aber nicht. Das Problem lösen wir am einfachsten damit, dass wir unseren eigenen User in die Gruppe dialout
mit aufnehmen.
sudo usermod -a -G dialout user-name
user-name
muss natürlich durch den eigenen Usernamen ersetzt werden. Danach in Linux neu anmelden!
Die werksseitig vorinstallierte ESP8266 Firmware reagiert auf AT-Befehle, das können wir im seriellen Monitor leicht ausprobieren:
AT
OK
AT+GMR
AT version:1.3.0.0(Jul 14 2016 18:54:01)
SDK version:2.0.0(5a875ba)
Farylink Technology Co., Ltd. v1.0.0.1
Apr 13 2017 22:40:23
OK
Die ESP8266 Firmware antwortet also auf unsere Eingaben. Falls das nicht funktioniert, muss es nicht zwangsläufig bedeuten, dass der Mikrocontroller defekt ist. Es kann auch sein, dass überhaupt keine Software geflasht ist, oder eine, die keine AT-Befehle versteht. Deshalb sollten wir unbedingt probieren, eine eigene Software (einen Sketch im Arduino Jargon) zu flashen.
Flaschen eines eigenen Sketches (Blinkende interne LED)
In der Arduino IDE lässt sich das prima machen. Wir löschen den Inhalt im Editierfenster oder legen mit Datei – Neu ein weiteres an. Da kommt folgendes Programm hinein:
/*
NodeMCU v3 Blinkende LED
Die interne blaue LED liegt bei Version 3 des NodeMCU-Boards (LoLin) auf GPIO2
*/
#define LED 2
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, LOW);
delay(1000);
digitalWrite(LED, HIGH);
delay(1000);
}
Die Funktion des Sketches ist leicht zu verstehen. Die interne LED liegt auf GPIO Pin 2, dieser Port wird als Ausgang definiert und dann passiert in einer Endlosschleife nichts anderes als LED aus – eine Sekunde warten – LED an – eine Sekunde warten und so weiter.
Mit dem Häkchensympol (Überprüfen) ganz links in der Symbolleiste kompilieren wir nun unser Programm und erhalten folgende oder ähnliche Ausgabe:
Archiving built core (caching) in: /tmp/arduino_cache_697455/core/core_esp8266_esp8266_nodemcuv2_CpuFrequency_80,UploadSpeed_115200,FlashSize_4M3M_012ea8a310a8a8eb2b525b90e8223795.a
Der Sketch verwendet 222129 Bytes (21%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
Globale Variablen verwenden 31496 Bytes (38%) des dynamischen Speichers, 50424 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
Wenn kein Fehler ausgegeben wird, können wir das Programm nun auf unseren Mikrocontroller hochladen (Sympol Pfeil nach rechts). So sieht die Ausgabe dabei aus:
Uploading 226272 bytes from /tmp/arduino_build_970633/sketch_blink.ino.bin to flash at 0x00000000
................................................................................ [ 36% ]
................................................................................ [ 72% ]
............................................................. [ 100% ]
Achtung beim Hochladen des Programms blinkt die blaue LED schnell – das ist noch nicht unser Programm. Erst wenn die Übertragung bei 100% ist startet das Programm und die LED blinkt nun langsam im Sekundentakt.
Durch das Flashen eines eigenen Sketches haben wir allerdings die ursprüngliche Firmware überschrieben, die AT-Kommandos funktionieren nun nicht mehr. Das ist aber kein Problem, wir wollen ja letztendlich die Feinstaubsoftware flashen und die würde die AT-Firmware auch löschen.
Zusammenfassung
Wir haben nun die Arduino IDE auf einem Linuxrechner installiert und dazu den Boardmanager für unser NodeMCU-Board. Weiter haben wir die Arduino IDE für unser Projekt konfiguriert, die NodeMCU per USB angesteckt und ausprobiert, ob die Verbindung funktioniert. Außerdem haben wir gesehen, wie man einen eigenen Sketch schreibt, kompiliert und auf den Mikrocontroller flasht. Damit sind wir bereit, als nächstes die Feinstaub-Software aufzuspielen. Dazu gibt es zwei Methoden, die ich beide im nächsten Blogartikel vorstellen werde.
Weitere Artikel in dieser Kategorie:
- Feinstaubsensor – Teil 1: Jetzt messen wir selber!
- Feinstaubsensor – Teil 2: Einkaufsliste
- Feinstaubsensor – Teil 4: Feinstaub-Software flashen
- Feinstaubsensor – Teil 5: Konfigurationsdaten löschen
- Feinstaubsensor – Teil 6: Stromversorgung
- Feinstaubsensor – Teil 7: Zusammenbau
- Feinstaubsensor – Teil 8: Verkabelung und Aufstellung
- Feinstaubsensor – Teil 9: Konfiguration
- Feinstaubsensor – Teil 10: Veröffentlichen der Sensordaten
- Feinstaubsensor – Teil 11: Datenabruf
- Feinstaubsensor – Teil 12: Sensordaten selbst speichern
- Feinstaubsensor – Teil 13: Silvester – Feinstaubfest der Superlative
Also bei mir wird kein AP erstellt. Das Flashen ist allerdings erfolgreich. Hänge ich das Gerät an die Arduinosoftware und mache dne Monitor auf kommt nach dem Reset nur Kauderwelsch, egal welche Baudrate ich einstelle.
Testprogramme lassen sich problemlos flashen und geben auch anständig Feedback.
Ich verstehs nicht.
Was meinst Du denn mit AP? Wenn Du flashen kannst, dann sollte doch alles gut sein.
Access Point. Ich sehe kein Netzwerk.
Also Flashen der Feinstaubfirmware erfolgreich, aber NodeMCU startet keinen WLAN-Accesspoint. Und Du hattest vorher noch kein WLAN konfiguriert?
Versuch mal die Konfigurationsdaten zu löschen und dann die Feinstaubfirmware neu zu flashen. Wenn das nicht hilft ist möglicherweise die WLAN-Komponente hinüber.