ESP32でCO2モニターを自作したい
ESP32でCO2モニターを自作したい
ESP8266 で CO2 モニターを作っていたが、I2C 通信が不安定で悩んでいた。調べたことをまとめておく。
ESP8266 の I2C が不安定になる原因
しばらく動いていると CO2 センサーや BMP280 からエラーが返ってくる症状。考えられる原因は以下。
| 原因 | 説明 |
|---|---|
| プルアップ抵抗の問題 | 2つのセンサーを並列接続すると合成抵抗が半分になる。引き上げ力が強すぎて不安定になることがある |
| クロックストレッチ | CO2センサーが測定中に通信を一時停止する。ESP8266のソフトI2Cはこれへの対応が弱い |
| I2C速度 | 100kbps → 400kbps に上げると信号の立ち上がり時間が短くなり、プルアップが弱い場合は悪化する |
ESP8266 vs ESP32
ESP8266 の I2C はソフトウェアで実装されている(ビットバンギング)。そのため制御が荒く、センサーの「ちょっと待って」に対応しにくい。
ESP32 はハードウェアで I2C を持っているため、クロックストレッチを適切に処理できる。安定性が段違い。
ゼロから作る場合のコスト
部品
| 部品 | 目安価格 |
|---|---|
| ESP32 開発ボード | 700〜1,500円 |
| CO2センサー(MH-Z19B) | 2,000〜3,000円 |
| BMP280(温度・気圧) | 400〜600円 |
| ブレッドボード | 300〜500円 |
| ジャンパーワイヤー | 300〜500円 |
| USBケーブル | 300〜500円 |
合計:約4,000〜6,500円
ブレッドボード(はんだ不要の試作台)で組めば、道具なしでも動くものが作れる。
開発環境
| 方法 | 難易度 | 備考 |
|---|---|---|
| Arduino IDE(C/C++) | 普通 | ライブラリが豊富。王道 |
| MicroPython | 易しい | Pythonで書ける |
| TinyGo | 難しめ | Go対応あるがライブラリが少ない |
センサーのライブラリは Arduino(C++)向けが圧倒的に充実しているので、最初は Arduino が無難。
まとめ
- ESP8266 の I2C 不安定問題は ESP32 に乗り換えると解決しやすい
- CO2センサーが一番高い(約2,000〜3,000円)
- 全部揃えても5,000〜7,000円程度で作れる