2026年4月29日水曜日

【2026年版】ESP32-S3 + ESPHome で部屋のCO2モニタを自作する【Home Assistant 連携】

※Claude Codeで記事の自動更新お試し中

この記事は、自宅の空気質を可視化したいエンジニア向けです。ESP32-S3 と CO2 センサ「SCD41」を ESPHome でつないで、CO2・温度・湿度を Home Assistant に流し込むまでを最短ルートで書きます。半田付けほぼナシ、ファームのコードも全公開です。(在宅ワーク中の「なんか頭がぼーっとする」問題を物理的に可視化したかった、というのが動機です。)

この記事でできること

  • ESP32-S3 で動くスタンドアロンの CO2 モニタが作れる(消費電力は数十 mW クラス)
  • ESPHome の YAML を書くだけで Home Assistant に自動統合される(コードは記事内で全部公開)
  • 必要なものは合計 4,000 円ちょっとから

使ったもの

全体の流れ

SCD41(CO2 + 温度 + 湿度)
▼ I2C(4 本接続)
XIAO ESP32-S3 + ESPHome
▼ Wi-Fi(ESPHome API)
Home Assistant(可視化・通知・自動化)

手順

1. 配線(4 本だけ)

SCD41 と XIAO ESP32-S3 を I2C で接続します。XIAO のデフォルト I2C は D4 = GPIO5(SDA)D5 = GPIO6(SCL)

SCD41 側 XIAO ESP32-S3 側
VDD3V3
GNDGND
SDAD4(GPIO5)
SCLD5(GPIO6)

2. ESPHome を準備

ESPHome は Home Assistant 公式の「マイコン用ファームウェア生成ツール」。Home Assistant の「ESPHome アドオン」を入れておくのが一番楽(HACS 不要)。ローカルで動かすなら pipx でも入る。

$ pipx install esphome
$ esphome version
2026.4.x

3. YAML を書く(コピペでOK)

以下を co2-monitor.yaml として保存。!secret 部分は自分の Wi-Fi に書き換えてください。

esphome:
  name: co2-monitor
  friendly_name: CO2 Monitor

esp32:
  board: seeed_xiao_esp32s3
  framework:
    type: arduino

logger:
api:
  encryption:
    key: "32 バイトの base64 キーを入れる"

ota:
  - platform: esphome
    password: "適当に"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

i2c:
  sda: GPIO5
  scl: GPIO6
  scan: true

sensor:
  - platform: scd4x
    co2:
      name: "CO2"
    temperature:
      name: "Temperature"
    humidity:
      name: "Humidity"
    update_interval: 60s

4. ファームを書き込む

USB-C で XIAO を PC につないで、初回はシリアル経由で焼きます。

$ esphome run co2-monitor.yaml
# シリアルポートを選んで Enter

2 回目以降は同じネットワーク上なら無線(OTA)で更新できます。これが ESPHome の最大の楽さ。

5. Home Assistant に統合

同じ Wi-Fi 上にあれば自動検出されます。検出されない場合は手動で:

  1. 「設定」→「デバイスとサービス」→「統合を追加」→「ESPHome」
  2. ホスト名 co2-monitor.local を入力
  3. YAML で設定した暗号化キーを入力 → 完了

CO2 / Temperature / Humidity の 3 センサが現れるので、ダッシュボードに「センサカード」「履歴グラフカード」を追加するだけで可視化完成です。

ここから先のハック

  • OLED 表示を追加: 0.96 インチ I2C OLED(SSD1306)を同じバスに繋いで現在の CO2 をその場で見せる。I2C なので配線追加なしでデバイスを増やせる
  • CO2 が高くなったら換気通知: Home Assistant のオートメーションで「1000 ppm が 3 分続いたら Slack / LINE 通知」を組む
  • L チカ警告: XIAO 内蔵 LED や WS2812B LED テープlight: コンポーネントで点灯。CO2 レベルで色を変える(青→緑→黄→赤)
  • バッテリ駆動: XIAO ESP32-S3 はリポ直結&充電回路つき。ディープスリープ+10 分おき計測で数日もつ

詰まりポイント

  • I2C で SCD41 が見えない: i2c: scan: true のログを確認。0x62 が見えれば成功。見えない場合は配線(特に SDA と SCL の逆挿し)を疑う
  • ESPHome のボード指定: board: esp32-s3-devkitc-1 でも動くが、XIAO 専用の seeed_xiao_esp32s3 のほうが GPIO マッピングが正しい
  • 初回の数値が暴れる: SCD41 は電源投入から最初の数分は校正中で値が安定しない。常時通電で運用するのが前提

まとめ

ESP32-S3 + SCD41 の組み合わせは、半田付けゼロ・コード 80 行で「自宅の CO2 を Home Assistant に流す」までいけます。市販の CO2 モニタを買うより安く、しかもオートメーションで「換気して」と通知させたり、エアコンの強弱を切り替えたり、好きなだけ拡張できる。これが自作の楽しさ。

この記事が役に立ったら X(Twitter)でシェアしてもらえると喜びます。

参考

0 件のコメント:

コメントを投稿