ESP Mikrocontroller 8266 mit sechs verschiedenen Sensoren Sensor

ESP | Sensordaten auslesen mit MicroPython



Ideen: W. Kimmig, J. Schnaiter, Gewerblich-Technische Schule Offenburg, 2022

Luftdruck und Temperatur zur Wettervorhersage BMP180

Luftdruck- und Temperatursensor BMP180
Abb. 1 Luftdruck- und Temperatursensor BMP180

Mit einem Luftdrucksensor lässt sich ein Tief- oder Hochdruckgebiet vorhersagen, aber ggf. auch die Höhe bestimmen. Der Bosch-BMP180-Sensor misst sowohl die Temperatur als auch den Druck. Die Auflösung ist dabei so gut, dass damit auch die Höhe berechnet werden kann.

Die Kommunikation läuft über die integrierte I2C-Schnittstelle.

  • Add-ons for your ESP
  • BMP180 Luftdruck- und Temperatursensor
  • Python-Bibliothek:

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 bmp180 import BMP180
from machine import I2C, Pin 
import time

i2c = I2C(scl=Pin(5), sda=Pin(4))
bmp = BMP180(i2c, 102100.0) #aktueller Luftdruck in Pascal

while True:        
  #Werte auslesen und anzeigen
  print("p: {} hPa".format(bmp.pressure / 100.0))
  print("T: {} °C".format(bmp.temperature))
  print("h: {} m\n".format(bmp.altitude))
     
  #Wartezeit
  time.sleep(5)

Luftfeuchtigkeit und Temperatur für die Luftqualität in Räumen DHT22

Luftfeuchtigkeit- und Temperatursensor DHT22
Abb. 2 Luftfeuchtigkeit- und Temperatursensor DHT22

Zur Vermeidung von Schimmel sollte die Luftfeuchtigkeit in Innenräumen unter 60 % bleiben. Hierzu werden Luftfeuchtigkeits­sensoren eingesetzt.

Die DHT-Sensoren (Digital Humidity & Temperature) sind kostengünstige digitale Sensoren mit einem kapazitiven Feuchtigkeitssensor und einem NTC-Temperatursensor zur Messung der Umgebungsluft. Sie haben einen Analog-Digital-Wandler und einer 1-Draht-Schnittstelle integriert. Neuere Sensoren verfügen auch über eine I2C-Schnittstelle.

Die Sensoren DHT11 (blau) und DHT22 (weiß) arbeiten beide über die gleiche 1-Draht-Schnittstelle. Der DHT22 verfügt über eine Auflösung von 1 Dezimalstelle, der DHT11 über eine Ganzzahlt für Feuchtigkeits- und Temperaturmesswerte.

  • Add-ons for your ESP
  • DHT22 Temperatur- / Luftfeuchtesensor

Micropython bietet eine DHT-Bibliothek, welche direkt importiert wird. Einmal eingebunden kann ein Objekt der entsprechenden DHT-Klasse erzeugt werden.

Man beachte, dass die 1-Draht-Schnittstelle über den identischen Pin wie die LED funktioniert. Aus diesem Grund lässt sich diese im weiteren Verlauf nicht als Anzeige verwenden.

Bevor nun die Messwerte ausgelesen werden können muss eine Messung durchgeführt werden. In diesem Fall wird die Messung und Ausgabe alle 5 s zyklisch wiederholt.


import dht
import machine
import time

sensor = dht.DHT22(machine.Pin(2))
    
while True:
  sensor.measure()
  print("T: {} °C".format(sensor.temperature()))
  print("H: {} %\n".format(sensor.humidity()))
    
  time.sleep(5)

Umgebungslicht als Dämmerungsschalter BH1750

Umgebungslichtsensor BH1750
Abb. 3 Umgebungslichtsensor BH1750.

Umgebungslichtsensoren (english: ambient light) dienen der Tagerkennung oder können ermitteln, ob das Licht in Räumen ausgeschaltet ist.

Der Beleuchtungssensor BH1750 liefert einen Wert von 1 - 65535 lx für die Beleuchtungsstärke und ist mit einer I2C-Schnittstelle ausgestattet.

Um die Klasse BH1750 verwenden zu können muss die Bibliothek bh1750.py auf dem ESP-Controller kopiert werden.

Nach dem das I2C-Objekt erzeugt wurde, kann das BH1750-Objekt erstellt. werden.

Der Zugriff auf den aktuellen Beleuchtungswert erfolgt über die Funktion ambientLight.luminance(BH1750.ONCE_HIRES_1). Das Attribut BH1750.ONCE_HIRES_1 gibt einen von fünf verschiedenen Modi an, welche in der Pythonbibliothek hinterlegt sind.


from bh1750 import BH1750
import machine
import time

i2c = I2C(scl=Pin(5), sda=Pin(4))
ambientLight = BH1750(i2c)

while True:
    print(ambientLight.luminance(BH1750.ONCE_HIRES_1))
    time.sleep(2)

Infrarot als Bewegungsmelder PIR

Infrarotsensor PIR
Abb. 4 Infrarotsensor PIR als Bewegungsmelder.

Infrarotsensoren (englisch: infrared) werden als Bewegungsmelder eingesetzt. Da sie Wärmestrahlung detektieren funktionieren sie auch in dunklen Räumen.

Der passiver Infrarotsensor PIR ist ein digitaler Sensor. D.h. bei erkannter Bewegung gibt er am am Pin 0 den digitalen Wert 1, ansonsten den Wert 0 aus.

  • Add-ons for your ESP
  • PIR passiver Infrarotsensor

Es wird keine zusätzliche Pythonbibliothek benötigt. Nur der Pin 0 wird als digitaler Eingang deklariert.

Alle paar Sekunden wird nun der Bewegungsmelder ausgewertet. Man beachte, dass für eine lückenlose Bewegungserkennung sehr kurze Zeitabstände notwendig sind.


from machine import Pin
import time

pir = Pin(0, Pin.IN)

while True:
    if pir.value():
        print("Motion detected!", pir.value())
    else:
        print("No Motion detected!", pir.value())
        
    time.sleep(2)

CO2 für die Luftqualität SGP30

CO<sub>2</sub>-Sensor SGP30 für die Luftqualität in Räumen
Abb. 5 CO2-Sensor SGP30 für die Luftqualität in Räumen.

Mit Hilfe eines CO2-Sensors lässt sich die Luftqualität von Innenräumen bestimmen. Der SGP30 misst zwei Luftqualitätswerte: TVOC und eCO2 und wird über die I2C-Schnittstelle eingebunden.

Der TVOC-Wert (total volatile organic compounds) erkennt Stoffe wie Kohlenwasserstoffe, Alkohole, Aldehyde oder organische Säuren. Viele Lösungsmittel, Flüssigbrennstoffe oder weitere synthetische Substanzen beinhalten VOCs. Er hat einen Wert zwichen 0-60000 ppb.

Der eCO2 (equivalent CO2) misst die CO2-Konzentration in der Luft. Der Wert liegt in einem Bereich 400-60000 ppm. Während an der frischen Luft der Wert bei etwa 400 ppm liegt, kann er bei geschlossenem Fenster in einem Schlafzimmer auf über 2000 ppm ansteigen.

Die Firma Adafruit hat eine Bibliothek für den SGP30 geschrieben Um die Klasse Adafruit_SGP30 verwenden zu können muss die Bibliothek sgp30.py auf dem ESP-Controller kopiert werden.

Nach dem Erzeugen des I2C-Objekts, kann das SGP30-Objekt erstellt. werden. Für die Initialisierung wird die Funktion sgp30.iaq_init() aufgerufen und eine Wartezeit von 15 s eingehalten.

Die beiden Messwerte werden in einer Variable gespeichert und anschließend ausgegeben. Man beachte entsprechende Vorgaben aus dem Datenblatt des Sensors.


import sgp30
from machine import I2C, Pin
import time

i2c = I2C(scl=Pin(5), sda=Pin(4))
sgp30 = sgp30.Adafruit_SGP30(i2c)

# Initialize SGP-30 internal drift compensation algorithm.
sgp30.iaq_init()
# Wait 15 seconds for the SGP30 to properly initialize
print("Waiting 15 seconds for SGP30 initialization.")
time.sleep(15)

while True:
  co2eq, tvoc = sgp30.iaq_measure()
  print("co2eq: ", co2eq, "ppm")
  print("tvoc: ", tvoc, "ppb")

  time.sleep(5)

Arbeitsauftrag 1 reading sensor data

Luftdruck und Temperatur BMP180

  1. Erstelle den Ordner 03-PressureTemperature-BMP180
  2. Erstelle die Datei pressureTemperature.py und gib den passenden Code ein.
  3. Binde die korrekte BMP library ein.
  4. Übertrage die Bibliothek auf den ESP und starte das Programm. Teste und verifiziere die Ausgabe.
  5. Aktualisiere den Luftdruck, so dass die korrekte Höhe berechnet wird.
  6. Ergänze das Programm so, dass die Temperatur auch in Kelvin und Grad Fahrenheit angezeigt wird.
  7. Der BMP180 wird über den I2C-Bus angesteuert. Finde die korrekte Adresse heraus.

DHT22 Luftfeuchte und Temperaturmessung

  1. Erstelle den Ordner 04-HumidityTemperature-DHT22.
  2. Binde die korrekte DHT sensor library von Adafruit ein.
  3. Erstelle die Datei humidityTemperature.py und gib den passenden Code ein.
  4. Teste das Programm und verifiziere die Ausgabe.

Mit dieser Vorgehensweise lassen sich weitere Sensoren einfach integrieren.


Arbeitsauftrag 2 Sieben Sensorwerte all in one

WEMOS Triple Base mit D1 mini, BMP180, DHT22, BH1750, PIR, SGP30
Abb. 6 Fünf Sensoren auf dem WEMOS-Tripple-Base
  • ESP
  • ESP8266 WEMOS D1 mini auf Triple Base
  • Sensoren: ESP Environment Shields
  • BMP180 barometric pressure and temperature
  • DHT22 humdidity and temperature
  • BH1750 ambient light
  • PIR infrared light
  • SGP30 CO2

All in one Luftfeuchte und Temperaturmessung

  1. Erstelle den Ordner 0x-AllSensors
  2. Erstelle die Datei allSensors.py und gib den passenden Code ein.
  3. Binde alle notwendigen Libraries ein.
  4. Übertrage die Bibliotheken auf den ESP und starte das Programm. Teste und verifiziere die Ausgabe.

Wichtige Funktionen zum Ansteuern von Sensoren



from bh1750 import BH1750 importieren der Klasse BH1750 aus der Datei bh1750.py
i2c = I2C(scl=Pin(5), sda=Pin(4)) I2C-Objekt am Pin 4 und 5 erzeugen
print("T: {} °C".format(sensor. temperature())) Formatierte Ausgabe von Sensorwerten
co2eq, tvoc­= sgp30.iaq_measure() Funktionsaufruf mit zwei Rückgabewerten
messwerte={"wert1": 20.1, "wert2": 36.2} Aufbau eines Dictionaries