こんにちは。エンジニアの八尾です。
今回ですが、自宅で余っているESP32をAppleのAirTagのように動作させてみました。
ESP32をAirTagのようにBluetooth信号を発信し、その位置を追跡可能にするオープンソースプロジェクト OpenHayStack を紹介します。
OpenHayStack とは
- OpenHayStackは、Appleの「Find My」ネットワークを利用して、自作のBluetooth端末を追跡できるオープンソースプロジェクトです。(Find My Networkに接続するため、MacOSのメールアプリにプラグインとしてインストールして動作させます。)
- プロジェクト内のPythonスクリプトでESP32などの端末にファームウェアを書き込むことで、端末に電力を供給した際に自動的にBluetooth信号を発信させて、端末の位置を追跡することができます。
- *注意: このプロジェクトはApple非公式のPoCプロジェクトであり、Appleが今後もFind My Networkのこのような利用を許可するかは不透明です。そのため、利用する際は自己責任でお願いします。
ESP32とは
- ESP32は Espressif Systems 社が提供する、Wi-FiやBluetooth通信が可能な低消費電力かつ多機能なマイクロコントローラーです。
- 今回は、自宅にあったESP32C3というタイプのESP32に、OpenHayStack用のファームウェアを書き込む方法を調査しました。
ESP32C3 は OpenHayStack非サポート端末だった
- 自宅にあったESP32C3は、2024年9月12日時点でOpenHayStack公式( https://github.com/seemoo-lab/openhaystack/tree/main/Firmware/ESP32 )ではサポートされていませんでした。そのため、別の方法を探しました。
HomeAssistantのプラグインESPHomeを使ってESP32C3にファームウェアを書き込む
- 調査したところ、公式のissue( https://github.com/seemoo-lab/openhaystack/issues/138 )に記載されている通り、HomeAssistantのプラグインESPHomeのOpenHayStackコンポーネントを利用することで、ESP32C3にファームウェアを書き込むことが可能だとわかりました。
ESP32 + OpenHayStack + HomeAssistant + ESPHomeの開発環境
- ESP32の種類
- Seeed Studio XIAO ESP32C3
- OpenHayStack
- macOS 13 - v.0.5.3
- RaspberryPi4 のスペック
- モデル: Raspberry Pi 4 Model B
- RAM: 4GB
- MicroSD: 32GB
- Home Assistant
- Core: 2024.9.1
- Supervisor: 2024.09.1
- Operating System: 13.1
- フロントエンド: 20240906.0
- ESPHome
- version: 2024.8.3
HomeAssistantサーバーをRaspberry Pi 4で構築する
- Home Assistantは、自宅内のスマートスイッチやIoT機器を管理するオープンソースプロジェクトです。( https://www.home-assistant.io/ )
- 今回はHomeAssistantのプラグイン機能を利用するため、Dockerではなく、LAN内にRaspberry Piでローカルサーバーを構築して利用しました。
- 以下のリンクを参考に構築しました。
https://www.home-assistant.io/installation/raspberrypi
- 以下のリンクを参考に構築しました。
ESPHomeプラグインで、ESP32C3にOpenHayStackのファームウェアを書き込む
- HomeAssistantのプラグインESPHomeを追加し( https://esphome.io/guides/getting_started_hassio )、以下のyamlファイルを使ってUSB接続したESP32C3にファームウェアを書き込みました。
external_components:
- source:
type: git
url: https://github.com/ytatsuno/esphome-config-files
ref: main
components: [openhaystack]
esphome:
name: test-esp32c3-openhaystack
platformio_options:
board_build.flash_mode: dio
esp32:
board: esp32-c3-devkitm-1
variant: ESP32C3
framework:
type: arduino
version: latest
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable logs
logger:
# Enable Home Assistant API
api:
ota:
platform: esphome
password: !secret ota_password
openhaystack:
# OpenHaystackのキーをBase64でエンコードしたものをここに記述します
# セキュリティ上、!secretとして管理することをお勧めします
key: !secret openhaystack_key
- ファームウェアを書き込んだESP32C3を自宅の車のUSBポートに接続し、昼休みに自宅近くのイオンまで行った際の追跡記録が以下の通りです。
感想
以上で、電力供給したESP32C3をOpenHayStackを使って追跡することができるようになりました。
今回の記事作成にあたって、HomeAssistantを利用したIoT機器の管理についての知識を得ることができました。
また、ESP32がWi-FiやBluetooth接続を持っており、さまざまな用途に活用できることに大変興味が湧きました。今後もESP32に関する調査を続けていきたいと思います。
以上です。