Un SCD40 ou SCD41 connecté à un ESP32 avec ESPHome permet de surveiller le CO2, la température et l'humidité de n'importe quelle pièce et d'envoyer des alertes dans Home Assistant en moins d'une heure. Le capteur se câble en I2C sur quatre fils, ESPHome génère automatiquement les entités, et Home Assistant reçoit les données sans cloud ni abonnement. Pour ceux qui ne souhaitent pas souder, l'Apollo AIR-1 intègre un SCD40 dans un boîtier clé en main disponible sur Domadoo.
Pourquoi surveiller le CO2 intérieur ?
Le CO2 s'accumule rapidement dans les pièces fermées : bureau de télétravail, chambre avec fenêtre close, salle de réunion. Au-delà de 1000 ppm, la concentration dégrade la vigilance et la qualité du sommeil. À 2000 ppm, maux de tête et fatigue apparaissent. La surveillance en temps réel permet d'automatiser la ventilation avant d'atteindre ces seuils — sans intervention manuelle.
Quel est le seuil de CO2 dangereux en intérieur ?
L'air extérieur contient environ 420 ppm de CO2 en 2026. Les recommandations de l'ANSES fixent le seuil d'alerte à 1000 ppm en intérieur. Au-delà de 1500 ppm, la qualité de l'air est jugée mauvaise et nécessite une action corrective immédiate. Au-delà de 5000 ppm, les risques pour la santé deviennent sérieux et l'exposition prolongée est à éviter.
| Niveau CO2 | Qualité de l'air | Action recommandée |
|---|---|---|
| < 800 ppm | Excellent | Aucune |
| 800 – 1000 ppm | Correct | Surveillance passive |
| 1000 – 1500 ppm | Dégradé | Aérer la pièce |
| 1500 – 2000 ppm | Mauvais | Ventilation obligatoire |
| > 2000 ppm | Très mauvais | Action immédiate |
SCD40 ou SCD41 : lequel choisir ?
Le SCD40 et le SCD41 sont deux capteurs Sensirion NDIR photoacoustiques qui mesurent le CO2, la température et l'humidité via I2C. La différence principale est la plage de mesure : 400-2000 ppm pour le SCD40 contre 400-5000 ppm pour le SCD41. Les deux sont nativement supportés par la plateforme scd4x d'ESPHome avec le même YAML.
Quelle est la différence entre SCD40 et SCD41 ?
Le SCD40 mesure de 400 à 2000 ppm avec une précision de ±(50 ppm + 5 % de la valeur). Le SCD41 étend la plage à 5000 ppm et ajoute le mode single_shot pour les installations sur batterie — une mesure toutes les 5 minutes avec réveil du microcontrôleur. Les deux capteurs utilisent le même protocole I2C, la même tension d'alimentation (3,3 V) et le même code ESPHome.
Pour quel usage choisir le SCD41 ?
Le SCD41 est préférable pour les installations sur batterie (mode low power via single_shot) ou dans des espaces où le CO2 peut dépasser 2000 ppm (garage, cave, serre). Pour un bureau ou une chambre alimenté en continu, le SCD40 suffit largement et coûte généralement 3 à 5 euros de moins sur les mêmes revendeurs.
| Critère | SCD40 | SCD41 |
|---|---|---|
| Plage CO2 | 400 – 2000 ppm | 400 – 5000 ppm |
| Précision | ±(50 ppm + 5 %) | ±(40 ppm + 5 %) |
| Mode single_shot | Non | Oui |
| Installation batterie | Non recommandé | Oui |
| Prix indicatif breakout | ~15 € | ~18 € |
Matériel nécessaire et câblage I2C
Le montage de base requiert un ESP32 ou ESP8266, une carte breakout SCD40 ou SCD41 et quatre fils Dupont. Le SCD4x fonctionne en 3,3 V natif — pas de régulateur de tension nécessaire avec un ESP32. Le bus I2C permet de brancher d'autres capteurs sur les mêmes broches SDA/SCL si besoin (BME280, SHT40, etc.).
Câblage sur un ESP32
Les broches I2C par défaut sur ESP32 sont GPIO21 (SDA) et GPIO22 (SCL). Sur un D1 Mini (ESP8266), ce sont D2 (SDA) et D1 (SCL). Le câblage est identique pour le SCD40 et le SCD41.
| Broche SCD4x | Broche ESP32 | Broche D1 Mini |
|---|---|---|
| VCC | 3,3 V | 3,3 V |
| GND | GND | GND |
| SDA | GPIO21 | D2 |
| SCL | GPIO22 | D1 |
Le SCD4x est disponible en carte breakout sur plusieurs revendeurs. Les versions Seeed Studio et DFRobot intègrent des résistances de pull-up I2C et une protection contre les inversions de polarité, ce qui simplifie le montage pour les débutants.
Option sans soudure : l'Apollo AIR-1
Pour ceux qui préfèrent une solution prête à l'emploi, l'Apollo AIR-1 intègre un SCD40 dans un boîtier compact (61 × 61 × 30 mm) alimenté en USB-C. Il tourne nativement sur ESPHome (firmware préinstallé), s'adopte en un clic dans Home Assistant et inclut également un capteur multiparamètres SEN55 (PM1-PM10, COV, NOx) et un capteur de pression DPS310. Aucune soudure, aucun boîtier à imprimer.
Apollo AIR-1 + CO2
SCD40 CO2 · SEN55 (PM + COV + NOx) · ESPHome préinstallé · USB-C
Configuration ESPHome : YAML complet SCD4x
ESPHome supporte les SCD40 et SCD41 via la plateforme scd4x depuis la version 2021.10. La configuration déclare le bus I2C, puis les entités CO2, température et humidité. La calibration automatique (ASC) est activée par défaut — comportement correct pour la majorité des installations avec ventilation vers l'extérieur.
La configuration de base
esphome:
name: capteur-co2-salon
friendly_name: Capteur CO2 Salon
esp32:
board: esp32dev
framework:
type: arduino
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
logger:
i2c:
sda: GPIO21
scl: GPIO22
scan: true
sensor:
- platform: scd4x
co2:
name: "CO2"
id: co2_sensor
temperature:
name: "Température"
accuracy_decimals: 1
humidity:
name: "Humidité"
accuracy_decimals: 0
update_interval: 60s
automatic_self_calibration: true
Flashez ce YAML via le tableau de bord ESPHome (USB au premier flash, OTA ensuite). Une fois l'ESP en ligne, Home Assistant le découvre automatiquement via mDNS — acceptez l'intégration dans Paramètres > Appareils & Services.
Note sur update_interval : 60 secondes est un bon compromis entre réactivité et consommation. Les valeurs inférieures à 5 secondes ne sont pas recommandées par Sensirion — le capteur a besoin d'un minimum de temps pour produire une mesure stable.
Calibration : automatique vs forcée
La calibration automatique (automatic_self_calibration: true) suppose que le capteur est régulièrement exposé à de l'air frais. L'algorithme Sensirion prend pour référence la valeur la plus basse mesurée sur une période glissante de 7 jours et la recale à 400 ppm. Si votre installation est dans une pièce sans ventilation régulière vers l'extérieur (cave, local technique, serre), désactivez l'ASC et utilisez la calibration forcée. À noter : une exposition à du CO2 inférieur à 400 ppm (air de haute montagne, certains espaces extérieurs ruraux) peut également perturber l'ASC — même recommandation dans ce cas.
Comment calibrer un capteur CO2 ESPHome ?
Pour une calibration forcée : ouvrez les fenêtres pendant 20 minutes, puis exposez le capteur à l'air extérieur (420 ppm environ). Ajoutez un bouton ESPHome qui déclenche le service perform_forced_calibration avec la valeur cible. L'opération prend moins de 30 secondes et corrige immédiatement la dérive du capteur sans redémarrage de l'ESP.
button:
- platform: template
name: "Calibration forcée (420 ppm extérieur)"
on_press:
then:
- scd4x.perform_forced_calibration:
value: 420
Ce bouton apparaît dans Home Assistant comme une entité Button. Un appui simple depuis l'interface ou une automation déclenche la calibration forcée à 420 ppm.
Intégration dans Home Assistant : entités et dashboard
Après adoption du device, Home Assistant crée trois entités : sensor.capteur_co2_salon_co2, sensor.capteur_co2_salon_temperature et sensor.capteur_co2_salon_humidity. Elles sont immédiatement disponibles pour les automations, les dashboards et l'historique long terme via le recorder.
Pour visualiser le niveau CO2 en temps réel, la carte Gauge de Lovelace est idéale :
type: gauge
entity: sensor.capteur_co2_salon_co2
name: CO2 Salon
unit: ppm
min: 400
max: 2000
needle: true
segments:
- from: 400
color: "#22D3A5"
- from: 800
color: "#F59E0B"
- from: 1000
color: "#EF4444"
Pour l'historique, une carte History Graph affiche l'évolution sur 24h ou 7 jours — pratique pour identifier les pics nocturnes en chambre ou les montées en bureau fermé. Selon les retours du forum HACF, les pics les plus fréquents sont constatés la nuit (chambre avec deux personnes, fenêtre fermée) et entre 14h et 17h en période de travail intense en bureau.
Automations et alertes CO2 dans Home Assistant
Les deux automations les plus utiles sont la notification mobile au franchissement du seuil de 1000 ppm et le déclenchement automatique d'une VMC connectée. L'utilisation de deux seuils distincts (1000 ppm pour l'activation, 800 ppm pour la désactivation) évite les cycles marche/arrêt répétés — technique dite d'hystérésis.
Comment créer une alerte CO2 dans Home Assistant ?
Une automation Home Assistant se déclenche quand l'entité CO2 dépasse un seuil défini et envoie une notification via le service notify.mobile_app. L'ajout d'une condition for: "00:05:00" évite les faux positifs liés aux pics transitoires (four chaud, cuisson). La notification inclut la valeur actuelle via un template Jinja2.
automation:
- alias: "Alerte CO2 > 1000 ppm (salon)"
triggers:
- trigger: numeric_state
entity_id: sensor.capteur_co2_salon_co2
above: 1000
for: "00:05:00"
conditions: []
actions:
- action: notify.mobile_app_mon_telephone
data:
title: "Qualité d'air dégradée"
message: >
CO2 salon : {{ states('sensor.capteur_co2_salon_co2') | int }} ppm.
Pensez à aérer la pièce.
data:
tag: alerte_co2_salon
importance: high
Déclencher la VMC automatiquement
Si vous disposez d'une VMC connectée (prise Shelly, Sonoff Mini, ou module ESPHome), deux automations complémentaires gèrent l'activation et la désactivation. Le délai for sur chaque trigger lisse les variations transitoires et évite les courts-cycles sur la VMC.
automation:
- alias: "VMC ON si CO2 salon > 1000 ppm"
triggers:
- trigger: numeric_state
entity_id: sensor.capteur_co2_salon_co2
above: 1000
for: "00:03:00"
actions:
- action: switch.turn_on
target:
entity_id: switch.vmc_salon
- alias: "VMC OFF si CO2 salon < 800 ppm"
triggers:
- trigger: numeric_state
entity_id: sensor.capteur_co2_salon_co2
below: 800
for: "00:05:00"
actions:
- action: switch.turn_off
target:
entity_id: switch.vmc_salon
Ces deux automations suffisent pour une gestion complète de la qualité d'air intérieur. Vous pouvez affiner avec une condition de temps (ne pas activer la VMC la nuit au-delà de 23h) ou un mode maison (inactif si personne présent).
Option clé en main : Apollo AIR-1 ou module SCD40 Domadoo
Si le montage DIY ne vous convient pas, deux solutions clé en main sont disponibles sur Domadoo avec livraison depuis l'Europe. L'Apollo AIR-1 est la solution la plus complète : SCD40, capteur multiparamètres SEN55 (PM1-PM10, COV, NOx), pression DPS310, dans un boîtier WiFi compact avec firmware ESPHome préchargé. Le module SCD40 Domadoo est une carte breakout montée et testée, à connecter sur votre propre ESP32 si vous souhaitez choisir le boîtier.
Pour les débutants ou ceux qui souhaitent un résultat immédiat, l'Apollo AIR-1 est le choix le plus rapide : unboxing, branchement USB-C, adoption dans Home Assistant en moins de 10 minutes. Pour les makers qui veulent contrôler la forme et l'emplacement du capteur, le breakout SCD40 ou le module Domadoo offre plus de flexibilité.
Module CO2 SCD40 Apollo
Module SCD40 · I2C · Prêt à câbler · Compatible ESP32