Mit einem Taster (s. Abb. 1) kann man bspw. ein Licht anschalten. Der Taster detektiert den Tastendruck und gibt an den angeschlossenen Pin 0 V (pull-down) oder 3,3 V (pull-up).
from machine import Pin
import time
button = Pin(17, mode=Pin.IN, pull=Pin.PULL_UP)
led = Pin(27, Pin.OUT)
while True:
if button.value() == 1:
led.on()
else:
led.off()
Man beachte, dass der Wert des Tasters entweder 0 oder 1. So kann ganz einfach der Zustand des Tasters ermittelt werden und mit Hilfer einer Entscheidung bspw. die LED ein- oder ausgeschaltet werden.
Mit dem Potentiometer (auch Poti) an unserem Board (s. Abb. 1) lässt sich mit Hilfe des Analog-Digitalwandlers (auch ADC) eine Spannung zwischen 0 und 3,3 V erfassen und in einen digitalen Wert zwischn 0 und 4095 umwandeln.
from machine import Pin, ADC
import time
poti = ADC(2)
while True:
value = poti.read() # 0–4095
print(f"Poti: {value}")
time.sleep(0.2)
Die Klasse ADC ist bereits in dem Modul machine enthalten. Wir erstellen ein neues Objekt dieser Klasse: poti = ADC(2).
Beim Aufruf von value = poti.read()wird die anliegende Spannung in einen Wert von 0 - 4095 gewandelt.
Mit print(f"Poti: {value}") geben wir den aktuellen gewandelten Wert aus.
value = poti.read_u16().
Umgebungslichtsensoren (english: ambient light) dienen der Tagerkennung oder können ermitteln, ob das Licht in Räumen ausgeschaltet ist. Der Sensor wandelt Lichtenergie in ein elektrisches Signal
Ein Lärmpegelsensor (auch Schallpegelsensor) wird eingesetzt, um die Lautstärke bzw. den Schalldruckpegel in der Umgebung zu messen. Der Sensor wandelt Schallwellen (akustische Energie) in ein elektrisches Signal um
Beide Sensoren (s. Abb. 2) liefern einen analogen Wert zwischen 0 und 3,3 V. Da die Signale an ADC-Pins des Mikrocontrollers anliegen, können sie in einen 12-Bit-Wert umgewandelt werden. Insgesamt hat der Mikrocontroller 16 analoge Eingänge.
Die Klasse ADC ist Teil des machine-Moduls.
Es werden zwei ADC-Objekte erzeugt.
Der Zugriff auf den aktuellen Beleuchtungswert und Lärmpegelwert erfolgt über die Funktion ambientLight.read() und soundLevel.read().
Mit print(...) werden die Werte ausgegeben und die Messung wird alle 200 ms wiederholt.
from machine import Pin, ADC
import time
ambientLight = ADC(34)
soundLevel = ADC(35)
while True:
v1 = ambientLight.read() # 0–4095
v2 = soundLevel.read() # 0–4095
print(f"Helligkeit: {v1:4d}")
print(f"Laermpegel: {v2:4d}")
time.sleep(0.2)
Zur Vermeidung von Schimmel sollte die Luftfeuchtigkeit in Innenräumen unter 60 % bleiben. Hierzu werden Luftfeuchtigkeitssensoren eingesetzt.
Die DHT-Sensoren (Digital Humidity & Temperature) sind kostengünstige digitale Sensoren mit einem kapazitiven Feuchtigkeitssensor und einem NTC-Temperatursensor zur Messung der Umgebungsluft. Der Sensor in Abb. 3 verfügt über eine I2C-Schnittstelle.
Micropython bietet eine DHT-Bibliothek, welche importiert wird. Einmal eingebunden kann ein Objekt der entsprechenden DHT-Klasse erzeugt werden.
Mit dem Aufruf dht.measurements wird die Messung durchgeführt und die Messwerte in einem Dictonary zurückgegeben. Zum extrahieren der beiden Messwerte greifen wir über den Schlüssel auf den jeweiligen Messwert zu. In diesem Fall wird die Messung und Ausgabe jede Sekunde zyklisch wiederholt.
from machine import Pin, I2C
import dht20, time
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
dht = dht20.DHT20(0x38,i2c)
while True:
temperature = dht.measurements["t"]
humidity = dht.measurements["rh"]
print(f"T: {temperature:.2f} °C")
print(f"H: {humidity:.2f} %")
time.sleep(1)
Mit einem Luftdrucksensor lässt sich ein Tief- oder Hochdruckgebiet vorhersagen, aber ggf. auch die Höhe bestimmen. Der BMP180-Sensor in Abb. 4 misst sowohl die Temperatur als auch den Druck. Die Auflösung ist dabei so gut, dass damit auch die Höhe berechnet werden kann.
Der Beschleunigunssensor in Abb. 4 misst eine Änderung der Bewegung in x-, y- und z-Richtung. So kann man erkennen ob ein Gerät gedreht wird oder fällt. Auf dieser Basis funktioniert die Sturz- und Unfallerkennung, Bild- und Flugstabilisierung als auch die Schwingungserkennung. Die Kommunikation beider Sensoren läuft über die integrierte I2C-Schnittstelle.
Um die Klasse BMP180 verwenden zu können muss die Bibliothek bmp180.py auf dem ESP-Controller kopiert werden.
Beim Erzeugen des BMP-Objekts wird zur Berechnung der Höhe der aktuelle Luftdruck in hPa übergeben.
Auf die Sensorwerte Luftdruck, Temperatur und Höhe kann dann über die drei Objektattribute bmp.pressure, bmp.temperature und bmp.altitude zugegriffen werden.
from machine import Pin, I2C
import bmp280, time
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
bmp = bmp280.BMP280(i2c, 0x77, 101700) #Tagesluftdruck
while True:
print(f"Temp: {bmp.temperature:.2f} °C")
print(f"Druck: {bmp.pressure:.1f} hPa")
print(f"Druck: {bmp.altitude:.1f} m")
time.sleep(1)
Um die Klasse LIS3DHTR verwenden zu können muss die Bibliothek lis3dhtr.py auf dem ESP-Controller kopiert werden.
Beim Erzeugen des lis-Objekts kann die I2C-Adresse optional angegeben werden.
Auf die drei Sensorwerte x,y und z kann dann über die Funktion lis.read() zugegriffen werden. Diese Funktion gibt alle drei Werte zurück.
Das Auslesen wird alle halbe Sekunde zyklisch wiederholt.
from machine import Pin, I2C
import lis3dhtr, time
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
lis=lis3dhtr.LIS3DHTR(i2c,0x19)
while True:
x, y, z = lis.read()
print(f"x: {x:.2f}")
print(f"y: {y:.2f}")
print(f"z: {z:.2f}")
time.sleep(0.5)
Taster
Light and Sound Umgebungslicht und Lärmpegel mit dem ADC
Mit dieser Vorgehensweise lassen sich weitere Sensoren einfach integrieren.
Luftfeuchte und Temperaturmessung
Luftdruck, Temperatur und Höhe
messwerte={
"pressure": bmp.pressure,
"temperatureBMP": bmp.temperature,
...
}
from machine import Pin, I2C |
importieren der Klassen Pin und I2Caus dem Modul machine |
i2c = I2C(0, scl=Pin(22), sda=Pin(21)) |
I2C-Objekt am Pin 21 und 22 erzeugen |
print(f"H: {humidity:.2f} %") |
Formatierte Ausgabe eines Sensorwertes |
x, y, z = lis.read() |
Funktionsaufruf mit drei Rückgabewerten |
messwerte={"wert1": 20.1, "wert2": 36.2} |
Aufbau eines Dictionaries |