Ein Klick auf Installieren startet den Vorgang. Falls Sie hier einen Timeout bekommen, starten Sie den Prozess neu und halten den Boot-Button auf dem NodeMCU32-Board gedrückt. Nach fehlerfreier Installation der Firmware sehen Sie in der IDE die Eingabeaufforderung von Micropython auf dem ESP32 (Abbildung 5).
Hello World
In der Mikrocontrollergemeinde fungiert das gute alte Blink-Programm (Listing 2) als “Hello-World”-Pendant. Geben Sie es in das Editorfenster vom Thonny ein und klicken Sie danach auf das Run-Icon. Alternativ drücken Sie zum Starten von Programmen [F5].
Das Programm gibt auf der Konsole den Zustand der LED aus. Die Zeit, die vom Anklicken des Icons bis zum Starten des Programms vergeht, lässt sich kaum wahrnehmen. Falls Sie bereits mit der Arduino IDE ein Programm kompiliert und auf den Controller geladen haben, wissen Sie, wie lange das Starten eines Programms in der MCU dauern kann.
Listing 2
Blink
import time
from machine import Pin
led=Pin(2,Pin.OUT)
print("Programm gestartet")
while True:
led.on()
print("an")
time.sleep_ms(500)
led.off()
print("aus")
time.sleep_ms(500)
Module
Um mit Mikropython bequem auf die Hardware zuzugreifen, gibt es bereits eine große Anzahl vorgefertigter Module. Die Tabelle “Zusätzliche Module” gibt eine Übersicht und beschreibt kurz den jeweiligen Funktionsumfang. Die detaillierte Beschreibung aller Standardmodule findet sich im Dokumentationsbereich der Micropython-Homepage [7].
|
Modul |
Beschreibung |
|---|---|
|
|
Zugriff auf die komplette Controllerhardware inkusive ADC, PWM und UART. |
|
|
Espressif-spezifische Module (ESP8266 und ESP32). |
|
|
Da der ESP32 erheblich mehr Funktionen mitbringt als der ESP8266, gibt es hier noch mehr Module. |
|
|
Alles, was die Wi-Fi-Schnittstelle benötigt. |
|
|
Python-Standardbibliothek für alle Zeitfunktionen. |
|
|
Unterstützung des Onewire-Protokolls, das viele Sensoren verwenden. |
|
|
Module, um den DS18x20-Temperatursensor auszulesen. |
|
|
Ansteuern von RGB-LEDs. |
|
|
Modul für Displays mit SSD1306-Chipsatz. Es unterstützt die I2C- und SPI-Schnittstellen. |
Neben den standardmäßig in Micropython vorhanden Modulen lassen sich weitere manuell aus einem Github-Repository [8] nachinstallieren. Um solche Module über Thonny zu installieren, erzeugen Sie eine leere Datei und kopieren den Quellcode aus Github hinein (Abbildung 6). Danach speichern Sie die Datei auf dem Controller via Datei | Save as | MicroPython device. Als Namen für die Datei wählen Sie den aus Github. ^
Das Modul lässt sich nun wie gewohnt in die Programme einbinden. Das Modul ssd1306 benötigen wir im nächsten Abschnitt, um das Display in unseren Testprogramm anzusteuern. Sie finden es auf Github im Ordner drivers/display/.
Testprogramm
Das Testprogramm aus Listing 3 lotet ein wenig die Möglichkeiten von Micropython aus, weswegen der Code einige speziellere Programmiertechniken enthält. Nach dem obligatorischen Import aller nötigen Bibliotheken (Zeile 1 und 2) folgt die Konfiguration der einzelnen GPIOs des Controllers (Zeile 4 bis 7). Das Programm erzeugt in einer Schleife die Objekte, die später für den Zugriff auf die LEDs zum Einsatz kommen, und legt sie in einer Liste ab.
Die Objekte für alle Eingänge definiert das Skript auf traditionelle Weise einzeln, weil hier unterschiedliche Pin-Konfigurationen zum Einsatz kommen (Zeile 9 bis 12). Hier sehen Sie die eingangs erwähnten Software-Pullup/Pulldown-Widerstände. Die zwei folgenden Variablen last_ms und button müssen Sie global definieren, weil unterschiedliche Programmteile sie verwenden. Die folgenden Zeilen erzeugen die Objekte für den Zugriff auf das Display und den Temperatursensor (Zeile 17 bis 22).
Die Methode runningLight() ab Zeile 24 enthält den Code für das Lauflicht. Sie starten sie mit dem Kommando _thread.start_new_thread(runningLight, ()) als parallel zum Hauptprogramm laufenden Thread – eine der coolen Funktionen, die Micropython frei Haus liefert (Zeile 33). Das nächste interessante Feature besteht in der Möglichkeit, Hardware-Interrupts zu verwenden. Dabei startet ein Codeabschnitt, sobald ein GPIO-Pin einen bestimmten Zustand erreicht. In unserem Beispiel enthält die Methode interruptHandlerButton() ab Zeile 35 den fraglichen Code. Sie erhält als Übergabeparameter den Pin, der den Interrupt ausgelöst hat. Die Methode setzt in Abhängigkeit vom Pin den Text der Variablen button, den die Hauptschleife für die Anzeige verwendet.







