Aktoren empfangen elektrische Signale und wandeln diese in eine physikalische Aktion um. In diesem Abschnitt lernst du, wie man eine LED, einen Summer und ein OLED-Display ansteuert.
Die rote LED am Kit soll blinken (s. Abb. 1). Sie ist am Pin 27 angeschlossen.
In der Thonny IDE wird mit der Programmiersprache Python programmiert. Die Programme sind in zwei Bereiche aufgeteilt.
Der erste Bereich ist der Setup-Bereich. Hier werden Bibliotheken importiert, stehen Initialisierungen und einmalige Aufrufe.
Der zweite Bereich ist die Schleife while True:. Hier stehen Aufrufe, welche ständig wiederholt werden. Dieser zyklische Wiederholungsvorgang ist auch typisch für eine Speicherprogrammierbare Steuerung die in großen Industrieanalgen eingesetzt wird.
from machine import Pin #Bibliothek zur Ansteuerung der Pins
import time #Bibliothek für Zeitfunktionen
led = Pin(27, mode=Pin.OUT) #Der Pin 27 ist digitaler Ausgang
while True:
led.on() #LED einschalten
time.sleep(0.5) #0,5 s warten
led.off() #LED ausschalten
time.sleep(0.5) #0,5 s warten
Nach dem Import der beiden Bibliotheken wird ein Objekt angelegt: led = Pin(27, Pin.OUT). Dabei wird der der ausgewählte Pin 27 als digitaler Ausgang festgelegt.
Mit dem Funktionsaufruf led.on() schaltet man die LED ein, mit led.off() schaltet man sie aus.
Mit dem Funktionsaufruf time.sleep(0.5) erzeugt man eine Zeitverzögerung. Der Wert 0.5 steht hierbei für 0,5 s. So kann man die Blinkfrequenz verändern.
Im ersten Schritt wird die Thonny IDE installiert und die notwendigen Konfigurationen vorgenommen.
Im zweiten Schritt wird das Programm geschrieben, verifiziert und auf den ESP-Mikrocontroller ausgeführt.
print("Hello World") lassen sich Textausgaben anzeigen. Lass Kommentare zu Deinem Programm ausgeben, bzw. den aktuellen Status Deiner LED (An/Aus)Das OLED-Display in Abb. 3 ist ein einfarbiges OLED-128×64-Punktmatrix-Displaymodul mit der Grove 4-Pin-I2C-Schnittstelle. Über den I2C-Bus ist es unter der Adresse 0x3C erreichbar.
Mit Hilfe der Bibliothek ssd1306.py können wir das Display ansteuern.
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from time import sleep
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
while True:
oled.fill(0) #clear display
oled.text('Licht: ein', 0, 0) #Position links Zeile 1
oled.show()
sleep(1)
Nach dem die Datei ssd1306.py auf den Controller geladen wurde importieren wir die Klassen Pin, I2C, sleepSSD1306_I2C.Es wird das Objekt i2c und oled angelegt. Die I2C-Adresse 0x3C wird nicht mit übergeben, da sie bereits in der Bibliothek hinterlegt ist.
Mit dem Funktionsaufruf oled.fill(0) löscht man den Displayinhalt, mit oled.text('Licht: ein', 0, 0) gibt man einen Text an Position x = 0, y = 0, d.h. links oben aus.
Mit dem Funktionsaufruf sleep(1) erzeugt man eine Zeitverzögerung. Das bedeutet, das der Inhalt zyklisch jede Sekunde überschrieben wird.
x = 4 ausgeben, geht dies über die formatierte Ausgabe: oled.text(f"Wert: {x}", 0, 0).
Das OLED-Display ist am I2C-Bus mit der Adresse 0x3C angeschlossen. Diese Adresse ist bereits in der Bibliothek hinterlegt.
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from time import sleep
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
while True:
oled.fill(0) #clear display
oled.text('Licht: ein', 0, 0) #Position links Zeile 1
oled.text('...', 0, 10) #Position links Zeile 2
oled.show()
sleep(1)
Du arbeitest als Junior-Entwickler/Entwicklerin in einem Projektteam für Smart-Home-Produkte. Deine Aufgabe ist es, ein kleines Warnsystem zur Temperaturüberwachung für einen Raum zu entwickeln. Das System soll:
Bevor der Sensor integriert wird, soll zunächst eine Testversion erstellt werden, die durch die Verwendung einer Variablen temperatur simuliert wird.
Hardwareaufbau
Die LED ist wie in Abb. 5 gezeigt an Pin 27, der Summer an Pin 16 angeschlossen. Das Display wird über den I2C über die Adresse 0x3C angesprochen.
Folgender Beispiel-Code ist bereits vorhanden:
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from time import sleep
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
temperatur = 23
while True:
oled.fill(0)
oled.text("Temperatur: ", 0, 0)
oled.show()
sleep(1)
3.1 Du möchtest die LED und den Buzzer in das Programm einbinden. Das OLED-Display wurde bereits eingebunden.
3.1.1 Wähle den Quelltext aus, der die LED als digitalen Ausgang definiert.
Wähle eine Antwort.
led = Pin(27, mode=Pin.OUT)led = Pin(mode=Pin.OUT,27)led = Pin(16, mode=Pin.OUT)led = Pin(27, mode=Pin.IN)3.1.2 Dein Kollege schlägt folgende fehlerhafte Codezeile zum Einbinden des Buzzers vor:
buzzer = Pin(6, mode=Pin.OUT).
Wähle einen Fehler aus.
3.1.3 Wähle die korrekte Begründung wieso nach oled.text(...) immer oled.show() aufgerufen wird. Wähle eine Antwort.
3.1.4 Nachdem der Buzzer integriert wurde, programmierst du:
buzzer.on()
Wähle die Auswirkung des Befehls aus den vier Vorschlägen aus. Wähle eine Antwort.
3.2 Bevor du mit der eigentlichen Lösung des Problems beginnst, möchtest Du nochmal das Thema Entscheidungen trainieren. Dein Kollege zeigt Dir hierzu zwei Codeschnippsel.
if temperatur >= 23:
print(f"T: {temperatur:.2f}")3.2.2 Quelltext
if i == 23:
print(f"T: {temperatur+0.01:5.2f}")
Gib die Ausgabe an. Wähle eine Antwort.
3.3 Entwickle ein Programm zur Steuerung
Die Lösung sollte folgendermaßen aussehen:
while True:
oled.fill(0)
oled.text(f"Temperatur: {temperatur:.2f}", 0, 0)
oled.show()
if temperatur >= 23:
led.on()
buzzer.toggle()
else:
led.off()
sleep(0.0025)
import ... |
Einbinden von Bibliotheken |
led = Pin(2, Pin.OUT) |
Objekterzeugung: Pin 2 ist ein digitaler Ausgang |
while True: |
zyklische Programmwiederholung |
led.on() |
LED wird mit Spannung versorgt |
time.sleep(2) |
Zeitverzögerung von 2 s erzeugen |