Durch unvorsichtige Batteriewechsel an den in unserer Schule verwendeten CO2-Messern kam ich an drei EE895 CO2-Sensoren, welche ich nur ungern ungenutzt rumliegen lassen würde.
Im Unterschied zu den bekannten SCD30 von Sensirion liefert der EE895 zu den beiden Werten CO2-Konzentration und Temperatur noch den Luftdruck. Die relative Luftfeuchtigkeit liefert er dagegen nicht.
Ebenso wie die SCD30, werden die E+E Sensoren mittels I2C angesprochen, es gibt auch gute Dokumentation zur Nutzung des Sensors, unter anderem mit Beispielen für Arduino UNO und Raspberry Pi.
Daraus habe ich folgenden MicroPython Code für einen Raspberry Pi Pico (oder Pico W) erstellt:
from machine import Pin, I2C
from utime import sleep
# I2C-Pins to be used
sdaPin = 18
sclPin = 19
# Delay between measurements in seconds
delay = 5
i2c = I2C(1, sda=Pin(sdaPin), scl=Pin(sclPin))
sleep(0.1)
while True:
print('Lese Daten...')
i2c.writeto(94, b'\x00')
sleep(0.1)
data = i2c.readfrom(94, 16)
print(f'{len(data)} Bytes gelesen')
co2 = int.from_bytes(data[0:2],"big")
temp = int.from_bytes(data[2:4],"big") / 100
pressure = int.from_bytes(data[6:8],"big") / 10
# Print measurements to console
print(f'CO2-Konzentration: {co2}')
print(f'Temperatur: {temp}')
print(f'Luftdruck: {pressure}')
# write data to file
with open('airdata.csv', 'a') as f:
f.write(f'{co2}, {temp}, {pressure}\n')
sleep(delay)
Code-Sprache: PHP (php)