ESPHomeベースのモノのインターネット(IoT)プラットフォーム
(esphome.io)- ESPHomeは、ESP32、ESP8266、BK72xx、RP2040のようなボードをスマートホームデバイスに変えるプラットフォームで、C++の代わりにYAML設定でデバイスを構成する
- ローカル制御と無線アップデートをサポートし、クラウドへの依存を減らしつつ、センサー・ディスプレイ・コンポーネントを組み合わせてさまざまなデバイスを作れる
- DIYユーザーからプロのインテグレーター、Made for ESPHome認証製品を作るメーカーまで、対象範囲が広い
- 対応環境には、Espressif ESP32・ESP8266、Raspberry Pi RP2040、Nordic Semiconductor nRF52、Realtek RTL87xx、Beken BK72xxに加え、一部コンポーネント向けのhostプラットフォームも含まれる
- はじめて使う場合はHome Assistant経由が最も簡単で、上級ユーザーはコマンドラインガイドや事前構成済みプロジェクトから始められる
YAMLで構成するローカルスマートホームデバイス
- ESPHomeは、ESP32、ESP8266、BK72xx、RP2040およびその他の対応ボードをスマートホームデバイスに変換する
- 複雑なC++コードの代わりに、YAML設定ファイルでデバイスを構成する方式
-
主な機能
- コーディング不要の設定: 複雑なC++なしでシンプルなYAML設定を使用する
- 無線アップデート: デバイスに物理的にアクセスせずにアップデート可能
- モジュール型設計: 数百種類のセンサー、ディスプレイ、その他コンポーネントに対応
- ローカル制御: クラウドに依存せずローカルで動作する
-
関連リソース
ユーザー層と始め方
-
誰が使うのか
- DIYユーザー: 特定の要件に合わせたセンサー、スイッチ、ディスプレイを制作する
- スマートホーム愛好家: 低価格のカスタムデバイスでホームオートメーションシステムを拡張する
- プロのインテグレーター: 顧客向けにローカル制御のスマートデバイスを導入する
- メーカー: 標準化されたファームウェアでMade for ESPHome認証製品を制作する
-
対応マイクロコントローラーと実行環境
- Espressif ESP32・ESP8266: 多くのIoTプロジェクトで使われるESP32・ESP8266マイクロコントローラーに対応
- RP2040: Raspberry PiのRP2040マイクロコントローラーに対応
- その他のチップ: Nordic Semiconductor nRF52、Realtek RTL87xx、Beken BK72xxに対応
- デスクトップhostプラットフォーム: 多くのESPHomeコンポーネントをデスクトップコンピューターでも実行できる
-
始め方
- Home Assistantアプリ経由で始めるのが最も簡単な方法: Home Assistant Guide
- コマンドライン作業を好む上級ユーザーは別のガイドを利用できる: Command Line Guide
- 一般的なユースケースは事前構成済みプロジェクトから始められる: Browse Projects
1件のコメント
Hacker Newsのコメント
ESPHomeを率いている一人です。質問があればどうぞ。
先週の土曜日に、ESPHomeが今後は Open Home Foundation の所有になったと発表しました。
Open Home Foundationは、スマートホームとそこで暮らすすべての人のために、プライバシー、選択の自由、持続可能性を守ることを目指す団体です: https://www.openhomefoundation.org/blog/announcing-the-open-...
安価なマイクロコントローラを、ブラウザからそのまま 音声アシスタント、Bluetoothプロキシ、メディアプレーヤーに変えられます
Espressif SDKを深く掘って、温度センサーとMQTT付きの無線スイッチをほぼ一通り実装したのですが、ESPHomeを見つけた瞬間、それまでの作業が全部不要になりました。
自分が書いた機能はすでに全部あり、そのうえではるかに多くの機能まで備わっていました
EspressifにはZigbee機能付きのデバイスがいくつかあるようですが、今後は自分で Zigbeeデバイス を作れる道が開けるのか気になります
ただ、自分が欲しいものがESPHomeの範囲に入るのか、きれいに実装できるのかはよく分かりませんが、デバイス内で高速なフィードバックループと、より複雑なオンボードアルゴリズムを回せるようになることです。
たとえば照度センサーが電球を制御し、ほとんど気付かないほど小さな変化で明るさを継続的に調整し、カルマンフィルタ のようなものを使って、時間帯に応じた一定の照度と色温度を保ちたいです。
空気清浄、換気、暖房、加湿、除湿、冷房も継続的に制御して、環境と電力使用を最適化したいです。換気はCO2/TVOCを下げる一方で、PM2.5や外気温も取り込みますし、冷暖房・換気・湿度は複雑に絡み合っています。
補助暖房は基本暖房よりずっと高くつきますが、非常に寒い日には必要で、家にいないときは優先度も変わるので、在宅時には快適な湿度を、不在時には湿度の最小化を望みます。
二つ目としては、ESPHomeでWi-Fiだけでなく Zigbeeデバイス も作れるようになると嬉しいです
Wi-Fi経由でログを見るのが、こんなに簡単でいいのかと思うほどです。
TVリモコンでオーディオシステムを操作するために、小型の 赤外線受信機/送信機 を作りましたが、設定はとても簡単で、Home Assistant連携も素晴らしいです
ESPHomeで20台以上のデバイスを動かしていて、そのうち4分の3ほどはHome Assistantネットワークに入っており、6台ほどは独立してESPHomeがMQTTでほかと通信するようにしています。
中身をESP32に置き換えた安価な中国製の気象観測器、雨水タンクの監視、温室の土壌水分、家の中の各所の温湿度、キッチンや子ども部屋の空気質などを見ています。
ESPHomeは本当に過小評価されているプロジェクトです。文字通り5分、10ドルのハードウェア、プログラミング不要で、家のIoTデバイスを自作して、敷地内のどこからでもリアルタイムデータを得られます
アイデアが浮かんだときにすぐ手の届く場所にハードウェアがあるのは、ものすごい自由です。
意外なほど安定していて、スプリンクラーコントローラのようなモジュールは独立動作するようにプログラムできるので、電源さえあれば動き続けます。
Home AssistantのmicroSDカードが壊れていたことに数か月後まで気付かなかったのですが、自分の 水耕栽培設備 がずっと正常に動いていたからです。
いちばん時間を食ったのは、防水Sockitboxの中でリレーを駆動するためにDC/DCコンバータへ配線する作業でした。
ねじ端子ブレークアウトボードも手元に置いておくととても便利です: https://www.amazon.com/whiteeeen-Development-Expansion-ESP-W...
CloudFreeも、ESPHomeで再プログラム可能な既製IoT部品を手に入れるのに便利です: https://cloudfree.shop/
以前、3ドルのWittycloud ESP8266で太陽光解析データを取得し、Home Assistantで消費量を見るためにESPHomeを使っていました。
ですが、USBアダプタ以外では、まだ上品な電源供給方法を見つけられていません。屋外センサーには すっきりしたバッテリー方式 があるといいのですが
かなり高機能なチップを使っているように思います。
もっと節約するならESP8266は4ドル程度までいけて、本当に驚くべきレベルです
たとえば、賃貸に出している自宅に、誰かが侵入の痕跡を残さず入るようなケースです。
ドキュメントにはいくつか選択肢がありますが、動作/在室検知にすべきか、二値の在室検知器にすべきか分かりません。どのセンサーがより良く、コスト効率が高いのか気になります
ESPHomeの一番良い点は、強く活発なコミュニティがあることだ
私たちが作ったオープンソースのハードウェア空気質モニター [1] について、コミュニティのメンバーが洗練されたESPHome統合 [2] を開発した
その統合には、基本のオープンソースファームウェアに入っている機能がすべてあり、ときには新機能の実装も私たちより速かった
ある意味では、こうしたオープンソースの競争が、私たちのソフトウェア版をより良くする助けになり、動機にもなった
[1] https://www.airgradient.com/
[2] https://github.com/MallocArray/airgradient_esphome
関連資料として、市販ハードウェア向けのESPHomeデバイス設定集がある: https://devices.esphome.io/
ESPHomeも動作することが多いデバイス向けのTasmota設定集もある: https://templates.blakadder.com/
少し脱線するが、ESPHomeが好きで、家のIoTベースの温度センサーいくつかに使ってきた
ただ、WAF、つまり妻受けの面でいつも引っかかるのは、ESP32、センサー、配線が絡み合ったものを見栄えよくケースに入れて隠すことだ
電子部品を隠すのにみんな何を使っているのか気になる
Apolloの製品はかなり目立たないようによく作られている: https://apolloautomation.com/products/sensor-stand?pr_prod_s...
温度センサーは、通常このファームウェアが対応している既製品を選ぶ: https://github.com/pvvx/ATC_MiThermometer
おまけに電池で1年以上動作可能だ
ガラスの器や透明なプラスチック製品を使えば、部品が汚れず、内部を見ることもできる
壁に設置するときは、基板をふたの内側にネジ止めし、そのふたを壁に固定すればよい。そうすれば容器をふたから外すだけで簡単にアクセスできる
欠点は、よく目に入る場所に置くと見た目が悪いかもしれないことだ
たいていThingiverseでだいたい合う既存設計を探す。一般的な部品を使っていれば、ぴったり合うモデルも見つかる可能性が高い
検索しても答えを見つけられなかった質問がある
浄化槽の警報システムがあり、フロートスイッチがタンクが3/4まで満たされたと検知すると、音と視覚の警報が作動する
警報が鳴ると閉じるNO無電圧接点が1組ある
この接点が閉じているか開いているかをどう監視すればよいのか知りたい。GPIOピンでできそうだが、検索しても使える答えを見つけられなかった
あきらめてRIB01BDC [0] パッケージリレーでRaspberry Piを起動し、浄化槽の接点が閉じたらメールを送るようにしようかと考えている
[0] https://www.functionaldevices.com/product/rib01bdc/
マイクロコントローラにGPIOピンを定期的に読ませれば、Highなら接点は開いていて警報は鳴っておらず、Lowなら接点が閉じていて警報が鳴っている状態になる
GPIO/接点/抵抗/VCCという構成は、回路の片側を高論理レベルに引き上げるプルアップ回路として働き、抵抗は接点が閉じたときに流れる電流を制限する
マイクロコントローラがGPIOピンの内部プルアップ設定をサポートしているなら、追加ハードウェアなしでピンを接点に直接つなぐこともできる
逆に内部プルダウン設定があれば、VCCを接点に接続し、GPIOをもう一方に直接接続する形に反転できる。利用可能な機能と電流制限はマイクロコントローラの文書を見る必要がある
浄化槽監視で欲しい情報しだいでは、これも有用な選択肢になり得る
ESPHomeとM5StickCで出退勤記録時計を作った
出勤/退勤を打刻すると、Home Assistantが時刻をGoogle Sheetへ送り、とても安定して動作している
面白い点のひとつとして、ESP32は一部のピンで静電容量式タッチ検知をサポートしており、導電性の表面をスマートホームのボタンや入力デバイスに変えられる
ESPHomeでもよくサポートされている: https://esphome.io/components/binary_sensor/esp32_touch.html
試してみたい小さなプロジェクトがある
自宅近くの停留所のバス到着時刻を地域の交通APIで取得して、主要なバス3本の時刻を大きな画面1つ、またはバスごとの小さな画面3つに表示したい
高解像度である必要はないが、離れた場所からでも家族がひと目で見られるくらい大きくて明るいとよい。たとえば7セグ表示器でバス番号3桁と到着までの残り分4桁を表示するような感じ
Wi-Fiで更新できる必要があり、ArduinoやRaspberry Piのような低消費電力デバイスがつながっていても構わない。AA電池で動かせるならなおよい
1つ目はできるが、2つ目はまったく分からず、はんだ付けもしたことがない。分かる人に方向性を示してもらえると助かる
ピクセル格子に描画するdisplayコンポーネント https://esphome.io/components/display/, テキストレンダラー、アドレス指定可能LEDドライバー https://esphome.io/components/light/neopixelbus の上に表示マトリクスを作るaddressable_lightプラットフォーム https://esphome.io/components/display/addressable_light, 安価な8x32 LEDパネル https://www.google.com/search?q=8x32+ws2812b などを組み合わせればよい
もっとスペースが必要なら複数作るか、パネルをつなげることもできる
もちろん車輪を再発明する必要はなく、こうしたガイドに従ってもよい: https://community.home-assistant.io/t/led-matrix-with-esphom...
特にUlanziのような既存ハードウェアを再利用する方向なら、はんだ付けはあまり必要なく、正しいデータ接続と電源供給が重要になる
ESP32はArduinoでプログラミングでき、慣れたライブラリやWi-Fi処理もそのまま使える
AdafruitでRGBマトリクスを買うことができ、これを直接駆動できるESP32ボードも売っているので、実質的に挿せば動くレベルで、ハードウェアの知識はほとんど要らない
自作したいが案内が必要なら、求めているものに近いWi-Fi接続テキスト表示装置をハードウェアとソフトウェアの両方で文書化したこのプロジェクトを見るとよい: https://github.com/BlueAndi/esp-rgb-led-matrix
個人的には使っていないが、本当に素晴らしいアイデアに見える
以前にセンサーボードを作って自分でファームウェアを書いたことがあり、ESPHomeを簡単に設定してそのボードで動かせるか見てみたい
ただし、自分のファームウェアにすでにある機能のうち、ぜひ必要なのはプル方式OTAアップデートだ
今はファームウェアをフォルダにコピーしておけば、家の中のすべてのセンサーがHTTPサーバー経由で自動的にそのファームウェアへ更新される
ESPHomeではセンサーごとに更新を個別にプッシュしなければならず、数十台あると面倒
単純なバックエンドと通信するファームウェアを自分で書いたほうが、より簡単で速そうだった
ESP32デバイス向けのコードがどのように収まるのかも気になる。4MBフラッシュのデバイスでOTAをやるなら、実質的なプログラム上限は1MB程度だ
GPIO、ADC、UART、Wi-Fi、HTTPS、HTTPSサーバー、割り込み、FreeRTOS、MQTT、NVS、チップ情報、ログ、OTA、標準ライブラリ関数だけを呼ぶ単純なプログラムでも、すでに1MBの上限を超える。
scanfひとつでも30KB使うログを全部切ってコンパイルすれば、おおよそ800KBのプログラムまで縮められるが、プログラムロジックがないのにかなり上限に近い
次にリモート監視デバイスが必要になったら、また見直すつもりだ
更新したくないデバイスがあれば、YAMLファイルに想定外のキーワードを一時的に入れて、コンパイルと更新が失敗するようにしておく
家のあちこちに温度プローブが付いたESPデバイスがかなりあり、保守するコードを減らせるようESPHomeへ移そうとしているところだ
特に最初はブラウザから書き込みでき、その後は無線で更新できる点がよい