eCO2 Telegram-bot
op
Zeer nauwkeurige en dure meetapparatuur is niet altijd nodig om de luchtkwaliteit binnenshuis te bepalen. Een ruwe indicatie en bewaking van grenswaarden kunnen ook zeer nuttig zijn als je gewoon wil weten wanneer het nodig is om een intensief gebruikte ruimte te luchten. Zo’n apparaat wordt nog nuttiger wanneer het eenvoudige lokale display wordt uitgebreid met een alarmmelding naar een Telegram-account op een smartphone. Sterk geïntegreerde sensortechnologie, een moderne microcontroller en een beetje BASIC-programmering maken het mogelijk om met deze eCO2-monitor en zijn verschillende weergavemodi op vier manieren aandacht te vestigen op een slechte luchtkwaliteit:
- lokale NeoPixel LED(s) als luchtkwaliteits-verkeerslicht;
- webinterface voor lokale apparaten met een webbrowser;
- handmatig opvragen via Telegram Messenger;
- Telegram-waarschuwing verzonden naar een specifieke Telegram-gebruiker.
Wil je ook een artikel in Elektor Mag of op onze website publiceren? We moedigen zowel ervaren schrijvers als beginners aan een kijkje te nemen op onze inzendingspagina!
De Hardware
De eenvoudige schakeling in Figure 1 is gebaseerd op een eCO2-sensor CCS811 en een ESP32 SoC-module. De luchtkwaliteit wordt weergegeven door een of meer NeoPixel LED’s. Een enkele drukknop is verbonden met een ingang. De sensor en de SoC communiceren via een tweedraads I2C-bus. Het NeoPixel-display gebruikt slechts een datalijn op GPIO27, of nu een enkele LED-dot of een matrix wordt geactiveerd.
Hoewel bijna elke ESP32-module met vrije I2C-pinnen geschikt is voor deze klus, raad ik een “ATOM matrix” of “ATOM lite” van M5Stack aan. Deze handige apparaatjes combineren namelijk een ESP32-PICO-D4 met een antenne, een NeoPixel-matrix of een enkele NeoPixel-dot, een drukknop en nog wat meer in een kleine en stijlvolle stevige behuizing. Veel meer hardware dan de sensor en de ESP32-module heb je dan niet meer nodig om het geheel op een stukje gaatjesprint op te bouwen. Daarvoor prik je de CCS811 en de ATOM in de juiste busstrips en headers en maak je de weinige noodzakelijke verbindingen met stukjes draad, zoals getoond in Figure 2. De onderkant van de print is geïsoleerd met plakband.
De schakeling wordt via de ESP32-module gevoed uit een USB-voeding (5 V bij maximaal 500 mA), naar keuze via de USB-C connector, de HY2.0 Grove-connector of de onderste busstrips.
De CCS811 eCO2-Sensor
De CCS811-sensor kan het CO2-gehalte niet rechtstreeks meten! Hij berekent het equivalente CO2-gehalte (eCO2) door de tVOC-waarde (Total Volatile Organic Compound) te bepalen, waarbij de belangrijkste bron van deze vluchtige organische stoffen de door mensen uitgeademde lucht is.
Deze goedkope metal oxide semiconductor (MOS) sensor zoekt zelf naar een (relatieve) basiswaarde (baseline) voor ‘goede lucht’ door de beste luchtconditie over een langere periode te bepalen en vervolgens aan te nemen dat de sensor zich op dat moment in frisse, onvervuilde lucht met 400 ppm CO2 bevond. De sensor slaat deze waarde niet zelf op.
Bovendien kan de gevoeligheid van de sensor in de loop der tijd en onder verschillende omgevingsomstandigheden zoals temperatuur en vochtigheid, veranderen. Voor betrouwbare eCO2-metingen moet de sensor dus:
- aan een burn-in periode van meer dan 48 uur zijn onderworpen;
- een minimale aanloopperiode van ongeveer 20 minuten krijgen na elke koude start.
De datasheet bevat meer gedetailleerde informatie over de gassensor.
De Software
Het programma is ontwikkeld met ANNEX32, een BASIC-interpreter voor ESP32 ESP32. Na het programmeren van de interpreter in de flash-RAM van de ESP32-module met behulp van een installatieprogramma en een seriële USB-interface, draait de interpreter samen met zijn ontwikkelomgeving volledig in de ESP32. Alleen een Chrome- of Firefox-browser is nodig om het BASIC-script te laden, te bewerken, te testen en (automatisch) uit te voeren. De minimaal vereiste Annex32-versie is V1.435, omdat deze ondersteuning biedt voor de CCS811 en Telegram messenger. De online helpfunctie voor Annex32 biedt een zeer goede inleiding op deze BASIC-interpreter. De belangrijkste taken van de BASIC-code zijn:
- De CCS811 wordt geïnitialiseerd; eenmaal per seconde worst de eCO2-waarde opgevraagd.
- De eCO2-status van de omgevingslucht wordt geclassificeerd als groen, geel of rood).
- De ingebouwde NeoPixel-matrix of de enkele NeoPixel-LED geeft deze categorie lokaal aan door zijn kleur.
- Een webinterface toont de eCO2-waarde en de classificatie in een browser via het (W)LAN.
- De klassificatie en de eCO2-waarde kunnen handmatig worden opgevraagd via Telegram messenger, want het programma werkt met een Telegram-bot en haalt inkomende gebruikersopdrachten op van de Telegram-server.
- Een Telegram-waarschuwing wordt automatisch naar het laatste Telegram-chat_id verstuurd wanneer de luchtkwaliteit rood is (Figure 3).
- De basiswaarde van de luchtkwaliteit kan handmatig worden opgeslagen door op de voorste knop van de ATOM-module te drukken (of via een inkomend Telegram-commando).
De Telegram-bot routine vraagt regelmatig bij de Telegram-servers eventuele inkomende commando’s op. Hij reageert op deze commando’s zoals te zien in Figure 4:
- /e levert de eCO2-waarde en de klassificatie (groen/geel/rood).
- /s slaat de basiswaarde op in /baseline.txt.
- /r herstelt de basiswaarde uit /baseline.txt.
- /i retourneert de lokale IP-instellingen van de module.
- [elk ander karakter] doet hetzelfde als /e.
Je eigen Telegram-token
Om de Telegram-functies in het BASIC programma te gebruiken, moet je eerst je eigen Telegram-bot aanmaken door de instructies van BotFather te volgen onder BotFather in je Telegram-app. Dan krijg je je persoonlijke Telegram-token en een botnaam. Belangrijk: je moet deze twee gegevens in het BASIC-programma invoegen om de overeenkomstige variabelen in te stellen.
Het gebruik van Annex32-BASIC, waarvan je de huidige versie altijd kunt ophalen in het Annex RDS Forum, heeft in ieder geval het voordeel dat het zelfs voor onervaren programmeurs gemakkelijk te lezen is en bovendien aan je eigen behoeften kan worden aangepast. Voor een beter begrip van de functies is de code rijkelijk voorzien van commentaar. Dit script wordt vervolgens ingevoerd in de web-editor van Annex32 en opgeslagen in de ESP32-module als autorun-bestand (/default.bas).
Vertaling: Willem den Hollander.
Opmerking van de redactie: Dit artikel verschijnt in Elektor mei/juni 2023.
Vragen of opmerkingen?
Hebt u technische vragen of opmerkingen naar aanleiding van dit artikel? Stuur een e-mail naar de auteur of naar de redactie van Elektor via editor@elektor.com.
Discussie (0 opmerking(en))