Capteur co2 pas cher DIY / ESP32 + MH-Z19B

Hello,

Je cherchais un capteur de CO2 « pour voir » en intérieur un peu les valeurs chez moi… Le prix de ces capteurs ma vite coupé l’envie. En grattant un peu je suis tombé sur le MH-Z19B que l’on trouve à 20e chez Ali. (recherchez MH-Z19B version with Pin). Également un esp32 (ça marche aussi sous ESP8266 mais c’est un esp32 que j’avais sous la main). Idem les esp32 se trouve a moins de 5e chez Ali (ou pas plus du double sur amazon). Donc pour 1 on peut rester plus local ! :slight_smile:
Par contre les tutos trouvés sur le net étaient pour des envois de data vers domoticz. Ce qui nous fait une belle jambe. En me basant sur d’autre tuto fait pour envoyer des datas a jeedom j’ai un peu mixé le tout (avec 0 connaissance en C++ donc ça doit etre optimisable).

Pour rappel il suffit de faire une virtuel sous jeedom avec une info numérique en commande, celle si sera uptade en json via l’api Jeedom.

Je dois citer la source vu que j’ai pompé ce code en partie : https://projetsdiy.fr/projet-micropython-publier-taux-co2-capteur-mhz19-domoticz-2/ je ne voudrait pas leur voler la chose !

Voici le branchement fait me concernant :
La broche RX du MH-Z19 sur la 17 de l’esp32, la broche TX du MH-Z19 sur la 16 de l’esp32, la broche Vin du MH-Z19 sur la broche 5V de l’esp21 et enfin la broche GND du MH-Z19 sur une GND de l’esp32.

Par très académique ça mais donne :

image

image

image

image

Pour le code, le voici :

co2-esp32-jeedom.txt (3,4 Ko)

Il faut quelque lib pour l’esp32 je vous laisse voir les divers doc a ce sujet (lib pour le wifi et la lib softwareserial) notamment ainsi que le skd qui va bien (cf : https://projetsdiy.fr/installer-esp-idf-esp32-ide-arduino-macos-windows-raspberry/ ).

Pour le reste en monitor série de l’esp ça raconte un peu les ppm et l’envoi a jeedom :

17:56:27.005 -> Send data to Jeedom
17:56:27.005 -> Requesting CO2 concentration… PPM = 911
17:56:27.005 -> connecting to 192.168.1.xx
17:56:27.005 -> Requesting URL: /core/api/jeeApi.php?apikey=Vxxxxxxxxx&type=virtual&id=2857/core/api/jeeApi.php?apikey=Vxxxxxxxxx&type=virtual&id=2857&value=911
17:56:27.053 ->
17:56:27.101 -> closing connection
17:58:27.006 -> Send data to Jeedom
17:58:27.006 -> Requesting CO2 concentration… PPM = 876
17:58:27.006 -> connecting to 192.168.1.xx
17:58:27.006 -> Requesting URL: /core/api/jeeApi.php?apikey=Vxxxxxxxxx&type=virtual&id=2857/core/api/jeeApi.php?apikey=Vxxxxxxxxx&type=virtual&id=2857&value=876

évidement en prod on peut espacer plus l’envoi de donner.
La fenêtre étant ouverte et moi respirant dans la pièce les valeurs bougent pas mal mais a -/+ 50ppm je pense que ça donne une bonne idée de la chose. pour pas bien cher.
A voir sur la durée si les mesures de ce capteur sont fiable mais pour le moment j’avoue que c’est un peu étranges les valeurs mais peut être qu’il faut du temps pour se mettre en place je ne sais pas…
En intérieur ça semblait fiable, mais depuis 18h10 (mis en extérieur) ça semble bizarre… (ça devrait être à 400ppm)

image

Bref, wait & see. En espérant que ça serve à quelqu’un ou pas !

A+

Bonsoir,

Sympa, cela me fait aussi penser à le même type de DIY fait par @olive sous Tasmota

1 J'aime

Super projet. Je voulais faire quelque chose comme ça avec une sonde scd30 et easy esp mais je n’ai jamais réussi.

Après une nuit de fonctionnement dans le salon, volet fermé fenêtre ouverte ça semble cohérent, il faut quelque minute pour que le capteur se stabilise et il ne faut pas bouché ses cellules infra rouge.

Ce matin ouverture des fenêtre un peu avant 8h : je ne sais pas si la mesure est exacte, tout ouvert ça reste dans les 530 ppm (je pensais que ça devait être 400ppm mais bon, en tout cas ça ne fait pas trop de yoyo et ça détecte bien les ouverture de fenêtre et donc renouvellement d’air. A noter, depuis 10h il faut chaud c’est refermé, ça remonte…

image

J’ai lu d’en d’autre tuto que la formule de calcul est basée sur un capteur qui monte jusqu’à 2000ppm et qu’il faut adapter la formule à 5000ppm pour les versions à 5000ppm (le cas pour le Z19B), mais je n’ai pas trouvé 2000 dans les calculs (après ça semble de hexa donc bon… Bref, au moins l’idée est là, je n’ai qu’à me dire que le niveau bien est à 500 ppm et non 400 et voila ! (si des pro en maths en c++ sont dans le coin n’hésitez pas :slight_smile: ).

A+

Les valeurs sont assez fiable au final (quand le capteur est bien orienté), j’ai bien ~400 ppm après 10-15 mns d’ouverture de fenêtres.
J’ai ajouté un petit ecran OLED 128x64 compatible Adafruit_SSD1306 (5-7€ sur amazon) dessus, ça permet d’avoir la lecture directement sur la chose quand il n’est pas a coté de l’écran du Jeedom (ou juste pour le fun :p)

Ca donne ça :

image
(oui je sais les connecteurs de l’écran sont soudé à l’envers ! ;( )

Le branchement est simple :
VCC sur 3.3v
GND sur GND
SCL sur GPIO 22
SDA sur GPIO 21

(tuto sur ce type d’écran pour plus de détails : https://randomnerdtutorials.com/esp32-ssd1306-oled-display-arduino-ide/)

Pour le code envoyé a l’esp ça donne ça :

co2-esp32-jeedom avec ecran.txt (4,7 Ko)

As usual, pas du tout optimisé mes compétences en c++ étant toujours au niveau 0.5…

Voila voila.

Bonne journée.

Bonsoir
Pour la qualité de l’air intérieur, tu peux rajouter sur tes ESP, un PMS5003 (20-30€):
image
Chez moi, on voit bien quand on fait de la cuisine, ou quand on fait un feu de cheminée avec la ventilation trop forte
Ca te donne les PM1, PM2.5 et PM10

1 J'aime

Intéressent, je vais regarder ça !
Merci