スマート二酸化炭素センサーを作ってみました。

# 背景

最近、
二酸化炭素の濃度に仕事の効率に影響するが分かってて、
自宅でも監視したくなりました。

もちろんAmazonで買えば済むことですが、
それを買うと記事にはならないし、しかもHomekitも使っているので
スマートのやつを作ろうと思います。

# 調査

殆どのスマートデバイスが[Tasmota](https://tasmota.github.io/docs/)で動いているので
統一した方がベストかと思っています。
なので、Tasmota のドキュメンテーションに良さそうのやつがあるか探してみました。

たまたまGithubのリポジトリのdiscussionに見つかりました。

https://github.com/arendst/Tasmota/discussions/11329

Sensiron という会社から新しいCO2 I2Cセンサーが出たらしくて、
最新の Tasmota に対応するようになったようです。
温度の計測機能もついているので、今まで使っていた温度センサーも取り替えるので一石二鳥です。

# 買う

ハードを買うなら ~~Switch Science~~ AliExpress なので、ここから買いました。

https://ja.aliexpress.com/item/1005003001968461.html

7,000円で買えるのでポッチっと買っちゃいました。

_Switch Science相変わらず在庫なしでした (´ω`)_

### ESP8266

センサーだけたどデータ処理、通信などできないのでマイコンが必要です。
Tasmota といえば ESP8266 です。
今持っている温度センサーのマイコンを使ってました。
ちなみに使っているのはNodeMCUです。

https://www.amazon.co.jp/HiLetgo%C2%AE-ESP32-ESP-32S-NodeMCU%E9%96%8B%E7%99%BA%E3%83%9C%E3%83%BC%E3%83%892-4GHz-Bluetooth%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89/dp/B0718T232Z?pd_rd_w=qwYi8&pf_rd_p=52ecde5f-22cd-44a8-9320-89e5f2926931&pf_rd_r=8TCHX7N14NYY727CGXVD&pd_rd_r=b672fb09-1e5f-41ea-9424-ab0e7087a0af&pd_rd_wg=COwUK&pd_rd_i=B0718T232Z&psc=1&linkCode=ll1&tag=takoandpancak-22&linkId=7b1a6a52e4a84eff2047f52b10cec0a6&language=ja_JP&ref_=as_li_ss_tl

# ファームウエアをコンパイル

Tasmota には SCD40 を対応していますが、
あらかじめ用意したビルドには有効されていません。
そこで、個別でTasmotaのコンパイルが必要です。

コンパイルとは言ってもすごく簡単です。

- TasmotaのGitリポをclone

```bash
$ git clone https://github.com/arendst/Tasmota.git
```

- Tasmotaのビルドをカスタマイズできるファイルのテンプレートのコピーを作ります

```bash
$ cd Tasmota/tasmota
$ cp user_config_override_sample.h user_config_override.h
```

- `#define` の直後に1行を追加します

```c:user_config_override.h
#define _USER_CONFIG_OVERRIDE_H_ // <- 既にある行
#define USE_SCD40
```

- docker を使ってコンパイルします

```bash
$ cd ..
$ docker run -it --rm -v .:/tasmota -u $UID:$GID blakadder/docker-tasmota -e tasmota
```

- 無事にコンパイルできたら `Tasmota/build_output/firmware` に `tasmota.bin` というファイルが生成されます。

# ファームウエアを焼く

Tasmotaのドキュメンテーションに沿って焼きました。方法いくつありましたが `esptool.py` を使ってました。

https://tasmota.github.io/docs/Getting-Started/#flashing

# Tasmota をセットアップ

ファームウエアを焼いてマイコンを再起動したらWifi情報を設定しました。

### ハードウエアレイアウトを定義

I2Cのセンサーならピンレイアウトやコンフィグはどれでも同じなので前に使った温度センサの情報を参考しながらやりました。

https://tasmota.github.io/docs/devices/Sonoff-Basic-and-BME280/

# できました！

設定や接続が順調になるとTasmotaの画面にセンサー情報が出てきます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285534/30373245-b0ab-5119-4391-04e5f4c4e7b2.png)

# オマケ

### Home Assistantにセンサー情報を取り込む

MQTT経由で、Home Assistantの一覧画面に表示できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285534/bc46102f-50da-51bf-e630-fbe646f9badf.png)

データ履歴もちゃんと表示されています。

![Screen Shot 2021-12-02 at 18.50.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285534/9fcf9e9e-e563-f483-bd50-7cf693e4dea4.png)

窓を開くと一気に下がりますが、でも閉じると一瞬でまた上がります。
ワンルームなので仕方ないですかね。。
逆に長時間で開くと寒いので悩ましい。。。

### Homekit と連携

Home Assistantの[Homekitのプラグイン](https://www.home-assistant.io/integrations/homekit/)を使って、センサー情報をHomekitと連携しました。
二酸化炭素の濃度が1,000ppmを超えると通知が来ます。

![IMG_5595.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285534/c8178afd-1b51-28dd-aabd-4636abcac9e6.png)

![IMG_5596.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285534/3d5bcf6d-8ef6-b3d9-0b1c-9671982ee6ba.png)