Feinstaubsensor SPS30 und Tasmota

Hat eine direktere Messung der Aerosolkonzentration zur Abschätzung der Ansteckungsgefahr mit Corona-Viren in Innenräumen Vorteile gegenüber der indirekten Messung über die CO2-Konzentration?

Möglicherweise schon: Wenn in einem schlecht belüfteten Raum #1 die Anwesenden gute und dichte FFP2-Masken tragen, dann wird vermutlich die CO2-Konzentration genauso schnell ansteigen wie in einem ähnlichen Raum #2, wo aber niemand eine Maske trägt. Die Ansteckungsgefahr wird aber im Raum #1 deutlich geringer sein bzw. deutlich langsamer steigen als im zweiten Raum, weil im Raum #1 die Konzentration an virushaltigen Aerosolen wegen der Filterwirkung der Masken vermutlich sehr viel geringer ist oder zumindest langsamer ansteigt als in Raum #2.

Ein Feinstaubsensor, der Konzentration und Größe der Partikel in der Luft über die Lichtstreuung misst, kann natürlich nicht unterscheiden, ob die gemessenen Staub- und Aerosol-Partikel aus den Lungen der Anwesenden ausgeatmet wurden und deshalb potentiell virusbelastet sind oder ob sie zum Beispiel von brennenden Kerzen, Zigaretten oder vom Kochen und Braten stammen. Das darf man nicht vergessen.

Ein ganz interessanter Feinstaubsensor scheint der SPS30 von Sensirion zu sein, der laut Datenblatt Partikelkonzentrationen im Bereich von 0 bis zu 3000 Partikel pro Kubikzentimeter messen kann und deren Größe in 5 verschiedene Bereiche einsortieren kann:

PM0.5 – Partikel kleiner als 0.5 µm
PM1.0 – Partikel kleiner als 1.0 µm
PM2.5 – Partikel kleiner als 2.5 µm
PM4 – Partikel kleiner als 4 µm
PM10 – Partikel kleiner als 10 µm

Mechanischer Aufbau

Die Firma Glyn hatte auf der embedded world 2019 sog. „Dustyn-Starterkits“ verlost, wovon ich ebenfalls ein Exemplar ergattern konnte, das aber nach einem kurzen Test seither herumlag und schon beinahe mal entsorgt worden wäre.

Um das Ding an meine Home-Automation mit Node-RED anzuschließen und damit einer sinnvollen Anwendung zuzuführen, konnte ich das Ding aber leider nicht so brauchen, wie es damals von Glyn gebaut wurde.

Ich habe also das Original-Dustyn-Board aus dem Gehäuse geschmissen und den SPS30-Sensor runtergelötet. Leider war der Sensor an das Dustyn-Board über seine UART-Schnittstelle angeschlossen und auf dem Stecker fehlte der Kontakt für Pin4 (Interface Select). Diesen Pin muss man mit GND verbinden, wenn man das I²C-Interface benutzen will, wie es für Tasmota notwendig ist. Der Interface-Stecker am SPS30 ist ein ZHS-5 von JST und sowas hatte ich natürlich nicht zuhause. Aber der Stecker am CO2-Sensor MH-Z19C schaut sehr ähnlich aus und so konnte ich einen der von mir nicht benutzten Kontakte an diesem Sensorstecker entfernen und in den Stecker am SPS30 einsetzen. Mein WROOM02_EV-Board, das etwas kleinere Maße als das Original-Dustyn-Board hat, befestigte ich leicht verdreht über vier Pertinax-Lochplättchen, die ich vorher aus einem alten Siemens-Kammrelais ausgebaut hatte:

Auf dem Foto sieht man rechts das Original-Dustyn-Board. Auf mein WROOM02-EV habe ich einen kleinen Li-Ionen-Akku geklebt, der für eine ausfallsichere Versorgung des ESP8266 sorgt. Der SPS30 ist mit doppelseitigem Klebeband auf der Unterseite der Platine befestigt:

Von vorne gesehen sieht das ganze Ding so aus:

Die Ansaug- und Ausblasöffnungen des Sensors sind schön frei, so wie es die Mechanical Design and Assembly Guidelines von Sensirion beschreiben.

Tasmotizing

Für die wunderbare Tasmota-Firmware hatte tatsächlich schon jemand einen SPS30-Treiber geschrieben, der allerdings in keiner der precompiled builds enthalten ist.

Man muss also die Tasmota-Firmware selber übersetzen. Auf einem Windows-Rechner geht das so:

  1. git bash installieren (falls nicht schon vorhanden)
  2. tasmota-repository clonen:
    git clone https://github.com/arendst/Tasmota.git
  3. visual studio code (VSCode) installieren und platformIO installieren (falls nicht schon vorhanden)
  4. zum späteren Programmieren des WROOM02_EV einen USB-RS232-Konverter einstecken, der 3.3V-Ausgänge hat und über den Gerätemanager die Schnittstelle rausfinden (z.B. COM3)
  5. in der Datei platform.ini
    in der Sektion [build_envs] die Zeile mit „tasmota“ entkommentieren
    und
    in der Sektion [common] die Zeilen mit „monitor port“ und „upload port“ sowie „monitor speed“ und „upload speed“ suchen und auf COM3 und 115200 setzen
  6. in der Datei user_config_override.h die Zeile
    #define USE_SPS30
    einfügen
  7. in der Fußzeile von VSCode den Rechtspfeil drücken („PlatformIO: Upload“), dann beginnt der Kompilationsvorgang. Wenn dann am Schluss die Verbindung zum ESP8266 gesucht wird, auf dem WROOM02_EV den Boot-Button drücken und der ESP8266 wird geflasht

Jetzt kann man den USB-RS232-Konverter wieder entfernen. Der ESP8266-Feinstaubsensor arbeitet jetzt als Access-Point („tasmota_xxxxxx“), in den man sich am besten mit dem Smartphone oder Tablet einloggt. Man ruft seine Website auf und trägt wie üblich SSId und Passwort des hauseigenen WLANs ein und der ESP8266 bootet neu und wählt sich ins Haus-WLAN ein.

Die IP-Adresse des Feinstaubsensors, die er vom Router per DHCP bekommen hat, findet man über die Website des Routers oder über ein Tool wie Fing raus.

Jetzt ruft man die IP-Adresse des Feinstaubsensors im Browser auf und kommt wieder auf die Webseite des Sensor-Moduls.

Über Configure->Configure Other kann man jetzt in der Zeile „Device Name“ dem Modul einen Namen geben, z.B. „Feinstaubsensor SPS30“

Man wählt die Seite Configuration->Configure Module und trägt dort als Modultyp „Generic“ ein und bei GPIO4 -> I²C SDA sowie bei GPIO5 -> I²C SCL.

An diese beiden Ports des ESP8266 müssen nämlich die I²C-Leitungen des SPS30 angeschlossen sein:

Wenn man jetzt auf Save drückt, dann sollte der Browser nach dem Neustart des ESP8266 eine Seite wie diese anzeigen:

Der SPS30 wurde also gefunden! Es kann sein, dass zunächst ein paar Nullen erscheinen anstatt echter Messwerte, weil der Sensor eine Weile zum Hochfahren braucht (siehe Datenblatt)

Für die Anbindung an die Home-Automation sollte man jetzt noch MQTT konfigurieren, dann steht der Integration in einen Node-RED-Flow nichts mehr im Weg!

Ergänzung vom 27.3.21:

Oben in meinem Handy-Screenshot sieht man, dass bei den Module Parameters der Module Type „Generic (0)“ ausgewählt ist. Man sollte aber besser den Module Type „Generic (18)“ benutzen, weil „Generic (0)“ eigentlich nur dafür vorgesehen ist, anzuzeigen, dass kein Template aktiv ist; siehe hier: https://tasmota.github.io/docs/Modules/

2 Replies to “Feinstaubsensor SPS30 und Tasmota”

  1. I’m running tasmota-sensors.bin 9.4.0.4 and I can’t get it to work. I am able to read a second sensor on the I2C bus so I’m sure the bus works (and I think the I2C bus to the SPS30 is also wired up appropriately). Any suggestions?

    1. Hi Michael,

      sorry for answering so late; I somehow overlooked your post.
      In order to use the SPS30, you have to compile the Tasmota project by yourself; the SPS30 does not work with the precompiled builds, as I remember.
      There is a file with the name „user_config_override.h“ in the Github repository; there you should the line „#define USE_SPS30“ before starting the compilation.

      Regards
      DM1CR

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.