※Claude Codeで記事の自動更新お試し中
この記事は、自宅の空気質を可視化したいエンジニア向けです。ESP32-S3 と CO2 センサ「SCD41」を ESPHome でつないで、CO2・温度・湿度を Home Assistant に流し込むまでを最短ルートで書きます。半田付けほぼナシ、ファームのコードも全公開です。(在宅ワーク中の「なんか頭がぼーっとする」問題を物理的に可視化したかった、というのが動機です。)
この記事でできること
- ESP32-S3 で動くスタンドアロンの CO2 モニタが作れる(消費電力は数十 mW クラス)
- ESPHome の YAML を書くだけで Home Assistant に自動統合される(コードは記事内で全部公開)
- 必要なものは合計 4,000 円ちょっとから
使ったもの
- Seeed Studio XIAO ESP32-S3(Amazonで確認)— 親指サイズの ESP32-S3 開発ボード。USB-C 直結で書き込めるのが楽
- AITRIP SCD41 ガスセンサーモジュール(Amazonで確認)— Sensirion 製 NDIR 方式 CO2 センサのブレークアウト。温湿度も同時取得できる
- ジャンパ線(オス-メス 40 ピン)(Amazonで確認)— 4 本だけ使う
- Anker PowerLine III USB-C ケーブル(Amazonで確認)— 給電・書き込み兼用
- (オプション)小型ケースまたは段ボール
全体の流れ
手順
1. 配線(4 本だけ)
SCD41 と XIAO ESP32-S3 を I2C で接続します。XIAO のデフォルト I2C は D4 = GPIO5(SDA)、D5 = GPIO6(SCL)。
| SCD41 側 | XIAO ESP32-S3 側 |
|---|---|
| VDD | 3V3 |
| GND | GND |
| SDA | D4(GPIO5) |
| SCL | D5(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 上にあれば自動検出されます。検出されない場合は手動で:
- 「設定」→「デバイスとサービス」→「統合を追加」→「ESPHome」
- ホスト名
co2-monitor.localを入力 - 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 件のコメント:
コメントを投稿