Skip to content

Firmware einspielen

Schwefelhexafluorid edited this page Sep 11, 2022 · 49 revisions

Seiten

Dokumentation

Protokolle

for more, see Protokolle

Clone this wiki locally

Language: EN

vorherige Seite nächste Seite
Bezugsquellen Einzelteile Zusammenbau der Komponenten (Schaltung)

USB2serial Treiber installieren

Das Betriebssystem des Rechners, welches zum Übertragen ("flashen") des Sensors-Programms ("Firmware") auf den NodeMCU verwendet wird, benötigt einen Treiber / ein Modul um mit dem NodeMCU kommunizieren zu können. Der Rechner kommuniziert mit dem USB2Serial Chip, welcher auf der NodeMCU verbaut ist. Je nach Version des NodeMCU muss ein entsprechender Treiber installiert sein. Bei Linux Betriebssystemen ist in der Regel bereits ein passender Treiber vorhanden.

Identifizieren der Version des NodeMCU

Wenn man die Version der vorliegenden NodeMCU nicht kennt, kann man sie umdrehen und nachschauen, ob da CP2102 oder CH340G steht. Der Schriftzug ist alternativ auch (mit einer Lupe) auf einem der Chips auf dem NodeMCU zu finden.

Für CP2102 (NodeMCU v2)

CP210x-USB-to-UART-Bridge-Treiber

Für CH340G (NodeMCU v3)

CH340G-Bridge-Treiber

Nach der Installation der Treiber Rechner neu starten.

Bemerkung für MacOS 10.9 oder neuer: Wenn ein nicht-signierter Treiber installiert wird, muss dies in MacOS explizit erlaubt werden. Eine gute Beschreibung gibt es bei tzapu.com

Firmware einspielen

Achtung: Für das Flashen (Aufspielen des Sensor-Programms) der NodeMCU ein USB-Kabel mit nicht mehr als 1m Länge benutzen.

Es werden im Folgenden drei Varianten beschrieben, mit denen sich dir Firmware auf den NodeMCU übertragen lassen. Aktuell wird die Variante 1 empfohlen, weil mit dieser Methode Tests und Auslieferungen durchgeführt werden.

Port identifizieren

Die Kommunikation zwischen Rechner und NodeMCU erfolgt über einen Anschluss ("Port"), welcher vom Betriebssystem unter einem bestimmten Namen angesprochen wird. Den Namen des Ports muss man wissen um die Software übertragen zu können.

Den passenden Port erfährt man zum Beispiel, indem man die NodeMCU am gewünschten Port anschließt und danach die Arduino IDE startet. Unter WerkzeugePort sind die verfügbaren Port zu sehen, meist ist recht einfach der Port mit der NodeMCU erkennbar. Einen Port auswählen und dann WerkzeugeBoardinformationen holen ausführen. Ist der richtige Port gewählt, erscheinen Codes in der Statusleiste der IDE bei VID und PID. Die IDE danach wieder schließen, da sonst dieser Port blockiert ist.

  • MAC: Beim CP2102 wäre das auf der /dev/cu.SLAB_USBTOUART, für den CH340G ist es der Port /dev/cu.wchusbserialXXXXXXXX.
  • Windows: Windows COM3. Wenn dies nicht der richtige ist, dann einfach den nächsten in der Liste auswählen.
  • Linux: /dev/ttyUSB0

Benutzerrechte auf USB-Port unter Linux

Die folgende Fehlermeldung kann bedeuten, dass der Arduino IDE bzw. dem ESP-Tool die Berechtigung für den Zugriff auf den USB-Port fehlt:

An error occurred while uploading the sketch
error: cannot access /dev/ttyUSB0
    
error: espcomm_open failed
error: espcomm_upload_mem failed

Für den Fall, dass die Zugriffsrechte fehlen, kann es helfen den Benutzer zur entsprechenden Benutzergruppe hinzuzufügen. Je nach Distribution den folgenden Befehl ausführen und anschließend den den Benutzer erneut anmelden.

  • Debian, Ubuntu, Linux Mint, CentOS, OpenSuse und RedHat: sudo usermod -a -G dialout $USER
  • Manjaro, Arch und Gentoo: sudo usermod -a -G uucp $USER

Variante 1 "PlatformIO und VSCode"

PlatformIO bietet eine einfache Möglichkeit alle Abhängigkeiten in der korrekten Version herunterzuladen. In dem folgenden Beispiel werden die Schritte für die freie IDE Visual Studio Code beschrieben. PlattformIO bietet auch Erweiterungen für andere IDEs an und kann auch per CLI ausgeführt werden. Das Vorgehen sollte dabei immer ähnlich sein.

  1. Visual Studio Code installieren.
  2. PlatformIO Core installieren.
  3. Die PlatformIO VSCode Erweiterung installieren.
  4. Das Sensor Software Repository clonen.
  5. In VSCode unter FileOpen Folder... den Ordner airrohr-firmware von dem geklonten Repository öffnen.
  6. In den PlatformIO Einstellungen unter Device den Port des NodeMCU auswählen.
  7. Auf der linken Seite die PlatformIO Erweiterung auswählen, den PROJECT TASKS Tab öffnen und bei der gewünschten Environment (je nach Sprache) Upload auswählen. Anschließend sollte die Firmware kompiliert werden und auf den NodeMCU geschrieben werden.

Variante 2 "Arduino IDE"

In dieser Anleitung werden die Schritte gezeigt, um mit der Arduino IDE die Firmware selber zu kompilieren zu übertragen.

  1. Arduino IDE downloaden und installieren.
  2. Erweiterung für ESP8266 gemäß Anleitung zur Installation mit Boards Manager installieren.
  3. Arduino IDE beenden.
  4. Arduino IDE starten (die IDE soll nach der Installation der Erweiterungen neu gestartet werden).
  5. Alle [in der Contributing.md aufgelisteten Bibliotheken](Contributing.md installieren. Dabei auf die angegebenen Versionen achten.
  6. In der IDE unter WerkzeugeBoard: ... auswählen:
    • NodeMCU 0.9 (ESP-12 Module) für NodeMCU v1
    • NodeMCU 1.0 (ESP-12E Module) für NodeMCU v2 und v3
  7. Spätestens jetzt NodeMCU per USB-Kabel anschließen und den Port auswählen: WerkzeugePort.
  8. Quelltext in ein Verzeichnis auf dem Rechner kopieren. Den Quelltext bekommt man am einfachsten, in dem man das Repository klont oder das Repository als Archiv herunterlädt und entpackt. Alternativ können alle Dateien aus dem Quelltext-Verzeichnis einzeln in ein lokales Verzeichnis kopiert werden. Tipp: um den Code von einzelnen Dateien über das GitHub Webinterface besser zu kopieren jeweils auf RAW Button klicken
  9. Als nächstes das sogenannte Sketch (INO) Datei in der Arduino IDE öffnen.
  10. Die Datei ext_def.h an die eigenen Anforderungen anpassen (WLAN-Einstellungen, Sensoren, wohin mit den Daten, ...)
  11. NodeMCU flashen: Im Menü SketchHochladen klicken.

    Bildschirmaufnahme der Arduino-IDE beim Flashen der Firmware

Variante 3 "Kommandozeile"

In dieser Variante wird die Firmware per Kommandozeile hochgeladen. Die Arduino IDE muss trotzdem installiert sein.

  1. Arduino IDE downloaden und installieren.
  2. Erweiterung für ESP8266 gemäß Anleitung zur Installation mit Boards Manager installieren.
  3. Arduino IDE beenden.
  4. Download der fertig übersetzten Firmware
  5. Unter Windows die Kommandozeile, unter Linux/MacOS ein Terminal öffnen
  6. Bitte im folgenden Schritt beachten: Je nach Version der Arduino-IDE kann sich die Version des ESPTools unterscheiden. In unserem Beispiel war Version 0.4.12 aktuell. Gegebenenfalls muss dann im Pfad die Versionsnummer angepasst werden:
    • Windows: "%USERPROFILE%\AppData\Local\Arduino15\packages\esp8266\tools\esptool\0.4.13\esptool.exe" -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp COM11 -cf "_Pfad_zur_heruntergeladenen_Firmwaredatei_" (der Port hinter -cp muss gegebenenfalls angepasst werden, die Anführungszeichen sollten mit eingegeben werden)
    • Linux/MacOS: $PFAD_ZU_ESPTOOL -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp $USBPORT -cf $BINARY Wobei:
      • $PFAD_ZU_ESPTOOL der Pfad zum ESP Tool ist (z.B. ~/Library/Arduino15/packages/esp8266/tools/esptool/0.4.13/esptool oder ~/.arduino15/packages/esp8266/tools/esptool/0.4.13/esptool)
      • $USBPORT der Pfad zum USB-Port ist (z.B. /dev/cu.wchusbserial1410 oder /dev/ttyUSB0)
      • $BINARY der Pfad zum Kompilat ist (z.B. latest.bin oder sensors-software/airrohr-firmware/airrohr-firmware.ino.nodemcu.bin)
      • Eventuell muss man dies als root ausführen. Dann muss im Pfad ~ durch das Home-Verzeichnis (z.B. /home/MaxMustermann) ersetzt werden.
      • Der zusammengesetzte Aufruf kann dann so aussehen:
        • ~/Library/Arduino15/packages/esp8266/tools/esptool/0.4.13/esptool -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp /dev/cu.wchusbserial1410 -cf latest.bin
          oder
        • ~/.arduino15/packages/esp8266/tools/esptool/0.4.12/esptool -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp /dev/ttyUSB0 -cf airrohr-firmware.ino.nodemcu.bin

Beschreibung der Parameter:

-vv           zeigt Informationen während des Flashens (vereinfacht die Fehlersuche)  
-cd nodemcu   welche Reset-Methode soll genutzt werden
-cb 57600     Baudrate, mit der geflash wird
-ca 0x00000   Startadresse, ab der geflash wird
-cp <pfad>    Pfad zum Port, an dem die NodeMCU angeschlossen ist
-cf <pfad>    Pfad zur heruntergeladenen Firmwaredatei

Für Linux (MacOs ungetestet, evtl. mit Pfadanpassung) gibt es hier ein Skript, das auch die Konfiguration löschen kann (s.u.).

Löschen der Konfiguration

Variante 2

Über die Arduino IDE lässt sich die gespeicherte Konfiguration mit dem Plugin ESP8266 Sketch data upload löschen. Das Plugin nach Anleitung installieren. Beim Ausführen des Plugins kommt eine Meldung, dass das Daten-Verzeichnis leer ist, und ob man ein leeres SPIFFS Image hochladen möchte. Diese Meldung mit "Ja" beantworten. Der Upload der 3 MB kann dann etwas dauern. Wenn der Upload fertig ist, kann die NodeMCU neu gestartet werden.

Variante 3

Das Vorgehen entspricht Variante 3 des Firmware Einspielens. Als "Firmware"-Datei diese Datei herunterladen. Der Aufruf des esptool muss dann geändert werden bei -ca 0x00000 auf -ca 0x100000 und der Pfad zur "Firmware"-Datei auf den eben erfolgten Download. Implementiert in einem Skript hier zu finden.

Überprüfen der Sensor-Aktivität

In der Arduino IDE WerkzeugeSerieller Monitor aktivieren, damit man über USB Schnittstelle die aktuellen Daten lokal anschauen kann. Hierzu im Monitor die Baudrate auf 9600 stellen.

Nun kann überprüfen, ob es an einer Stelle zu Fehlern führt, z.B. NodeMCU kann sich nicht ins W-LAN einloggen, kann die Daten nicht hochladen, …