Home AssistantでBME680センサーを使った空気質・湿度・温度の測定方法と設定手順

Published on: | Last updated:

最近、Home Assistantで部屋の環境を可視化するのにハマってて。最初はArduinoで温湿度センサー(DHT11)を動かすところから始めたんだけど、正直、WiFi接続とかMQTTでデータ飛ばすとか、全部コード書くのって結構骨が折れるじゃない?

で、ある週末に「もうちょっと楽な方法ないの?」って思って、ESPHomeを試してみることにしたんだ。ターゲットは空気質センサーのBME680。結果から言うと…はんだ付けの時間も含めて、たった2時間でHome Assistantのダッシュボードに気温、湿度、気圧、それに空気質まで表示できた。マジで衝撃だった。

この体験が、僕のIoTプロジェクトの考え方を根本から変えたかな。もうゼロからコード書くのはやめて、ESPHomeみたいなエコシステムに全力で乗っかろうって決めた。もちろん、事前にセンサーがESPHomeに対応してるか確認する必要はあるけど、公式ドキュメントに載ってるやつなら、まあ、だいたい動く。しかも、かなり安定して。

というわけで、これはBME680センサーをESP8266につないで、ESPHome経由でHome Assistantに統合するまでの、僕の作業メモみたいなもの。同じことやろうとしてる人の参考になれば嬉しい。

で、なんでArduinoじゃなくてESPHomeなの?

よく聞かれるんだけど、僕も最初は「Arduinoで書けば自由度高いじゃん」って思ってた。でもね、目的が「センサーの値をサクッと可視化したい」だけなら、ESPHomeの方が圧倒的に楽。どれくらい違うかというと…

比較項目 Arduinoで自力実装 ESPHomeを使う場合
センサーの読み取り まずライブラリ探しから。バージョン違いとかで動かないことも…。あー、あの沼ね。 YAMLファイルに`platform: bme680_bsec`って書くだけ。え、マジで?ってなる。
ネットワーク接続 WiFi接続、切断時の再接続ロジック、MQTTブローカーへの接続…全部自分でコード書く。正直しんどい。 `wifi:`と`mqtt:`のセクションにSSIDとかIPアドレス書けば、あとは勝手にやってくれる。神。
Home Assistant連携 MQTTのTopicを設計して、HA側で`configuration.yaml`にセンサー定義を延々と書く作業が待ってる。 ESPHomeがHome Assistantを自動検出してくれる(API連携の場合)。追加ボタン押すだけ。えぇ…。
OTAアップデート 自分でOTA用のコードを組み込む必要がある。結構面倒。やらなくなるよね、正直。 標準機能。ESPHomeのダッシュボードからワイヤレスで書き込み可能。めっちゃ便利。

要するに、ESPHomeは「やりたいこと」を宣言的に書くだけで、面倒な「どうやるか」の部分を全部隠蔽してくれる感じ。車輪の再発明をしなくていいって、本当に楽だよ。

じゃ、何がいるの?

今回のプロジェクトで使ったのは、基本これだけ。

  • ESP8266ボード (僕はWemos D1 Miniを使った。小さくて使いやすいから)
  • BME680センサーモジュール (Amazonで評価と価格のバランスがいいやつを選んだ)
  • デュポンワイヤー (いわゆるジャンパワイヤーね)

BME680はBosch製のセンサーで、温度、湿度、気圧だけじゃなくて、VOC(揮発性有機化合物)も測れるから、空気の質(IAQ: Indoor Air Quality)の指標が出せるのが面白いところ。ちなみに、こういう部品は日本の通販サイト、例えば秋月電子とかでも普通に手に入るやつで大丈夫。

センサーからダッシュボードまでのデータの流れ
センサーからダッシュボードまでのデータの流れ

配線:ここ、一番ハマりやすいポイントかも

BME680はI2Cっていう通信方式で接続するのが一般的。ESPHomeの公式ドキュメントもI2C接続を推奨してる。配線自体はシンプルなんだけど、僕、最初間違えてSPI接続のピン配置を見ちゃってて、「動かねー!」って少しハマった。だから、ここは慎重に。

Wemos D1 Mini (ESP8266) と BME680 のI2C接続はこう。

  • ESP8266 5V → BME680 Vin (電源)
  • ESP8266 GND → BME680 GND (グラウンド)
  • ESP8266 D1 (GPIO5) → BME680 SCL (クロック線)
  • ESP8266 D2 (GPIO4) → BME680 SDA (データ線)

ボードによってピンの名前(D1とかD2とか)が違うから、GPIOの番号で確認するのが確実かな。GPIO5がSCL、GPIO4がSDAね。

実際の配線はこんな感じ
実際の配線はこんな感じ

ESPHomeの設定:YAMLをちょこっと書くだけ

配線が終わったら、ESPHomeのダッシュボードで新しいデバイスを作成する。ボードの種類(d1_miniとか)とWiFiの情報を入れるのはいつも通り。

ここからがBME680の設定。大事なのは、コンポーネントとして古い`bme680`じゃなくて、新しい`bme680_bsec`を使うこと。こっちを使わないと、IAQとかCO2換算値が取れないから。Bosch Sensortec BSEC (Bosch Sensortec Environmental Cluster)っていう、Boschが提供してるライブラリを使って賢く計算してくれる方ね。

具体的に追加・修正するのは以下の部分。

  1. `i2c`の設定: どのピンをSDAとSCLに使ってるかESPHomeに教えてあげる。
  2. `bme680_bsec`の設定: I2Cのアドレスとか、測定間隔とかを設定。`sample_rate`は`ulp` (ultra-low power, 5分間隔) か`lp` (low power, 3秒間隔) が選べる。僕はバッテリー駆動じゃないから`lp`でもいいんだけど、まあ最初は`ulp`で。
  3. `sensor`の設定: どの測定値(温度、湿度、IAQとか)をHome Assistantに送りたいかリストアップする。
  4. `text_sensor`の設定: IAQの精度が今どんな状態か("Calibrating"とか"Excellent"とか)をテキストで取得するために追加。

僕の最終的な設定ファイルはこんな感じになった。コピペして自分の環境に合わせて修正すれば動くはず。

# Chip Info:
# - Chip Family: ESP8266
# - Chip Model: ESP8266EX

esphome:
  name: esp8266-air-quality
  platform: ESP8266
  board: d1_mini

# WiFiやMQTT、APIなどの設定は省略...

i2c:
  sda: 4  # GPIO4
  scl: 5  # GPIO5
  scan: true
  id: bus_a

# Boschのライブラリを使うbme680_bsecコンポーネント
bme680_bsec:
  address: 0x77 # 大抵0x77か0x76。scan:trueなら自動検出してくれる
  temperature_offset: 0 # 必要に応じて温度の補正値を入れる
  iaq_mode: static # 持ち運ばないならstaticでOK
  sample_rate: ulp # 5分に1回の測定
  state_save_interval: 6h # 6時間ごとに校正状態を保存

# Home Assistantに送るセンサーの定義
sensor:
  - platform: bme680_bsec
    temperature:
      name: "書斎 BME680 温度"
    pressure:
      name: "書斎 BME680 気圧"
    humidity:
      name: "書斎 BME680 湿度"
    iaq: # Indoor Air Quality Index
      name: "書斎 BME680 IAQ"
    co2_equivalent: # CO2換算値
      name: "書斎 BME680 CO2換算値"
    breath_voc_equivalent: # 呼吸由来のVOC換算値
      name: "書斎 BME680 呼吸VOC"

# IAQの精度を文字列で表示するセンサー
text_sensor:
  - platform: bme680_bsec
    iaq_accuracy:
      name: "書斎 BME680 IAQ精度"

書き込みと動作確認

YAMLが書けたら、あとは "Install" ボタンを押して書き込むだけ。USBで繋いで直接書き込んでもいいし、バイナリファイルをダウンロードして`esphome-flasher`みたいなツールで書き込んでもOK。僕は後者でやったけど、Arduino IDEで書き込むときみたいにログが流れて、なんか安心する。

書き込みが終わって、ESPがWiFiに接続されると、ESPHomeのログにセンサーの値が流れ始めるはず。

[19:48:29][D][sensor:121]: '書斎 BME680 IAQ': Sending state 25.00000 IAQ with 0 decimals of accuracy
[19:48:29][D][sensor:121]: '書斎 BME680 CO2換算値': Sending state 500.00000 ppm with 1 decimals of accuracy
...
[19:48:29][D][sensor:121]: '書斎 BME680 温度': Sending state 24.96941 °C with 1 decimals of accuracy
[19:48:29][D][sensor:121]: '書斎 BME680 湿度': Sending state 57.82278 % with 1 decimals of accuracy

こんな感じのログが出始めたら成功。最初のうちはIAQの値が安定しないけど、数時間から1日くらい動かしておくとセンサーが校正されて、`IAQ精度`が"Excellent"とかになってくる。

うまく動かない?ありがちなミスはこれ

  • 配線の再確認: しつこいけど、もう一度。SDAとSCLが逆になってない?GNDはちゃんと繋がってる?
  • I2Cアドレス: ログを見て`Found I2C device at 0x76`みたいに出てたら、YAMLの`address`を`0x76`に直す。`scan: true`にしておけば大抵は大丈夫だけど。
  • ディープスリープモードの罠: もしバッテリー駆動でディープスリープモードを使ってるなら、書き込むときはD0(GPIO16)とRSTピンを繋ぐワイヤーを外さないと書き込みモードに入れないことがある。…これで15分くらい溶かしたことある。
  • 再起動してみる: なんか変だなと思ったら、とりあえずESP8266の電源を入れ直してみる。案外それで直ったりする。

Home Assistantダッシュボードに追加

で、一番最高なのがHome Assistant側の設定。ESPHomeのデバイスがオンラインになると、HAが自動で「新しいデバイスが見つかりました」って通知してくれる。あとは「設定」→「デバイスとサービス」から見つかったデバイスを追加するだけ。

エンティティが全部自動で作成されてるから、ダッシュボードにカードを追加するのも超簡単。「エンティティで」タブから追加したいセンサーを選ぶだけで、いい感じのカードがプレビューされる。ポチッと追加すれば、完成。

完成したダッシュボード。いい感じ!
完成したダッシュボード。いい感じ!

まとめ:もうArduinoには戻れないかも

正直、Arduinoでゼロからやってたのが嘘みたいに楽だった。I2C接続でちょっとだけつまづいたけど、それ以外は本当にスムーズ。YAMLを数行書くだけで、複雑なセンサーの値をHAに統合できるESPHomeのエコシステムは、本当に強力だと思う。

スマートホームで「あれ測りたいな」「これ自動化したいな」って思ったときに、面倒なプログラミングをすっ飛ばして、すぐ形にできるのはめちゃくちゃ楽しい。もし同じようにセンサー遊びをしてる人がいたら、ESPHome、マジでおすすめ。

…さて、次は何のセンサーを繋いでみようかな。みんなは他にどんなセンサー使ってる?おすすめあったらぜひ教えて!

Related to this topic:

Comments

  1. Guest 2025-11-19 Reply
    最近またBME680いじってたんだけど、やっぱ最初ちょっと混乱するんだよね…。I2Cの配線間違えて「あれ?センサー全然反応しないじゃん…」って独り言ぼそぼそ言いながら結局ハンダやり直したりしてさ。うーん、まあ温度と湿度分かれば十分かなぁなんて思ってたけど、IAQ(空気質指数)わかると意外と使う場面増えるんだよ。「お、この数値めっちゃ下がった。換気しよう?」みたいな感じで家族にも言えるから便利。 設定自体は、Home Assistantに一回接続方法覚えれば割と簡単なのがありがたい。configにbme680追加して再起動ポチッだけでOK。でも細かいパラメータとか突き詰めるとなかなか奥が深くてさ…。ネットの掲示板とか見て「へぇ、それいいじゃん!」って真似したこと何回もある。 最近はESPHome使う機会も多め。OTAアップデートできるから後からでも設定直せて地味に助かるというか。それで色々イジっちゃう癖直らなくなってる…。IoT系こういう自作話、本当好きなんだよね。説明書そのままだと満足できなくてどうしてもちょっと手を加えたくなる――それが楽しいから止まらないみたいな感じ…ふぅ、まあ今日はこのぐらいでいいかな。
  2. Guest 2025-11-07 Reply
    正直これ…BME680センサー、Home Assistantで使ってみると毎回ちょっと後悔してる。温度も湿度も空気の質も測れて便利そう?いやたしかに。でも、設定がもう、とにかく手間ばっかり。コード書いて、config直して、再起動また再起動…それでもたまに認識しないから、その都度「あれ?いけてんのこれ?」みたいな不安になる。空気質データは結構ズレて見えること多くて信じきれない瞬間あるし(むしろ怪しい値出る方が多かった)。あーでも湿度だけは無難な数字出してたかな。でもESPHome経由だとアップデートきっかけで急にお亡くなりパターンけっこう遭遇したし、一回I2C配線ミスった時は謎データ連発で普通に萎えた記憶…。実際「めっちゃ便利」って言いたいけど、なんだろ、この微妙な頼りなさ拭えなくて。本音いうとネットワークカメラとかスマートプラグ入れる方が圧倒的おすすめというか安心感段違い。でもガジェット好きとして気になっちゃうんだよね…。結局また手を出す予感ある。
  3. Guest 2025-09-05 Reply
    へえ、IoTセンサーの構築、興味深いですね!ESP8266とBME680、Home Assistantとの連携あたりって、実際どんな感じで実装されてるんでしょうか?現場レベルの知見、めっちゃ聞きたいです。
  4. Guest 2025-08-29 Reply
    息子の理科の自由研究、センサープロジェクトにめっちゃ興味あるんだけど、こんな感じの詳細なガイドって助かるわ!ESP関連の技術、どこまで理解できるか楽しみだな。
  5. Guest 2025-08-07 Reply
    おお、IoTセンサーの世界、マジでワクワクしますね!BME680とESPボードの組み合わせって、めちゃくちゃ面白そう。海外のメイカーコミュニティでもこのトレンド、結構熱いらしいですよ。
  6. Guest 2025-08-03 Reply
    へぇ〜、BME680とESPボードの組み合わせ、めっちゃ興味深いですね!最近IoTセンサーの現場で同じような構成を試してて、ESPHomeの設定って結構ハマりどころあるよね。データ可視化のコツとか、もし良かったら共有したいです(^^)v
  7. Guest 2025-06-23 Reply
    へい、IoTセンサーの世界、超おもしろいですよね!ESP8266とBME680で環境モニタリング、めっちゃクールな感じ。Home Assistantとか使うと、まじでスマートホームの未来感じられちゃいます。
  8. Guest 2025-06-07 Reply
    あの、IoTセンサーって、子供の部屋の空気の質とか、温度とか気になるんですけど…。専門的な感じがして、ちょっと難しそうですよね。素人でも大丈夫なんでしょうかね。
  9. Guest 2025-04-09 Reply
    あー、この記事めっちゃ参考になる!特にBME680の取り付け手順とかESPHomeの設定って、自分でやってみたら意外と詰まるとこ多いから助かるわ。Home Assistant連携のとこも詳しく書いてて、大学生のIoT課題でそのまま使えそう。湿度データの可視化とかもっと深掘りできるともっと嬉しいかも?今度実機で試してみよーっと!
  10. Guest 2025-04-05 Reply
    すみません、ちょっと補足させてください!BME680を使う時は、特にVOC測定値のドリフト問題に注意が必要ですね。うちのプロジェクトではセンサーのウォームアップ時間を30分以上取るようにしています。あと、ESP32のDeepSleep機能との相性もチェックした方がいいかも。どちらも実務でハマりやすいポイントですよ~
  11. Guest 2025-04-05 Reply
    はい!BME680センサーの記事、すごく参考になりました!特にESPHomeの設定方法が分かりやすかったです。自分も実験で使ってみたけど、最初フラッシュで詰まった経験あるからトラブルシューティングの部分が超助かります。Home Assistant連携のTIPとかもあったらまた教えてほしいな~。