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

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)

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…

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 :


(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 : ESP32 OLED Display with Arduino IDE | Random Nerd Tutorials)

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.

Edit : Je lui ai fait une maison si ça intéresse : Case for esp32 co2 mesure box and display by sebounet93 - Thingiverse

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

2 « J'aime »

Intéressent, je vais regarder ça !
Merci

Hello,

Tu as des valeurs supérieurs à 5 des fois avec le pms5003 ?
Ça monte bien quand je met une fumée devant (à 800) mais sinon c’est toujours le calme plat (0, 1 voir 2-3…) alors qu’en extérieur on devrait être a 32/13 pour les pm2.5 / pm10 aujourd’hui par exemple.

De plus le capteur semble se suicidé apres 5-6h de fonctionnement, faut le reset. Je ne sais pas si je l’utilise comme il faut, j’ai juste l’+vcc, le gnd et les tx/rx, je n’a pas raccorder les set et reset j’ai pas trouver de docs indiquant trop a quoi servent les set/reset.

A+

Hi
Voici des valeurs (sachant quelles sont lissées)


et voici ma config espeasy

et la connexion

Pour le set tu l’utilises avec une rule pour augmenter le temps de vie du PMS (dans l’exemple sur le GPIO 16)

on System#Boot do
  gpio,16,0
  timerSet,1,20
endon
On Rules#Timer=1 do
  LongPulse,16,1,5
  timerSet,1,20
endon

Hello,

Ok merci je vais regarder ça.
Mais je n’utilise pas espeasy du coup ses rules ne me parle pas plus que ça.

A+

Le PMS test en permanence la qualité de l’air. La rule met un timer de pause avec le SET

Bonjour, tu arrives a mettre un capteur CO2 et un PMS5003 sur une wemos ?

Bonjour
Je suis pas encore passé au capteur de CO2 :sob:
Programme d’hiver :cold_face:
Mais je ne vois pas d’obstacle. Un problème de GPIO ?
Cordialement

Bonjour à tous,

désolé pour le bon vieux déterrage de topic des familles mais je pense qu’il est inutile d’ouvrir un sujet supplémentaire.

Donc, pour ceux qui utilisent le capteur MH-Z19, chez moi, la led qui est dans le boîtier clignote en permanence.
Il est accouplé à un esp8266 avec espeasy et je me demandais si ce fonctionnement est normal?

Merci de votre retour

1 « J'aime »

Hello,

La led sur le MH-Z19 ou sur ton esp8266 ?
Si c’est une lumière rouge sur le capteur de CO2 c’est normal elle clignote fréquemment pour faire les mesures de co2 (je suppose que c’est de l’infra rouge ou un truc dans le genre). Après je ne sais pas trop la fréquence mais plusieurs fois par minutes ne me choc pas et elle est très atténuée ça ne doit pas être dérangeant.
Si c’est une led sur l’esp8266 je ne sait pas dire, je n’ai que des esp32.

A+

1 « J'aime »

Oui oui, c’est bien de la led du capteur dont je parlais… En fait ce qui me surprend c’est qu’elle clignote en permanence chez moi et pas que lorsque le capteur prend des mesures (ttes les 5 min) chez moi.
Après, c’est peut être normal… merci de ta réponse

@fido.boulettes une piste ?

En gros, appliquer la même règle que pour le SDS011… En effet, ça pourrait être une piste…
Après, la différence entre les deux appareil est que sur le MH-Z19 c’est une diode donc pas de problème méca alors que le SDS a un ventilo pour aspirer les poussières.

D’accord, merci pour tes précisions :wink:
Je me disais qu’en “forçant” des pauses, cela éviterait à ta led d’être sollicitée en permanence…

Nan nan mais c’est pas con… je vais tester à l’occase… J’ai un autre MH qui tourne depuis près d’un an sans soucis donc ça devrait pas être « destructif »