Aus Raspberry Pi Geek 06/2022

Einstieg in die MCU-Programmierung mit Micropython (Seite 2)

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).

Abbildung 5: Die Micropython-Kommandozeile in der IDE (unten).

Abbildung 5: Die Micropython-Kommandozeile in der IDE (unten).

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

machine

Zugriff auf die komplette Controllerhardware inkusive ADC, PWM und UART.

esp

Espressif-spezifische Module (ESP8266 und ESP32).

esp32

Da der ESP32 erheblich mehr Funktionen mitbringt als der ESP8266, gibt es hier noch mehr Module.

network

Alles, was die Wi-Fi-Schnittstelle benötigt.

time

Python-Standardbibliothek für alle Zeitfunktionen.

onewire

Unterstützung des Onewire-Protokolls, das viele Sensoren verwenden.

ds18x20

Module, um den DS18x20-Temperatursensor auszulesen.

neopixel

Ansteuern von RGB-LEDs.

ssd1306

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/.

Abbildung 6: SSD1306-Display-Treiber über Thonny einbinden.

Abbildung 6: SSD1306-Display-Treiber über Thonny einbinden.

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben