すっかり冷え込む季節になりました。一年中ユニクロのエアリズムを着ているので外に出るときは寒くて仕方ないです。そろそろヒートテック買わなきゃ。
今回はAppleの「探す」アプリで使われている「Find Myネットワーク」にタダ乗りして自作AirTagを作ることのできるOSSのプロジェクトのOpenHayStackを使ってみたので手順などを紹介したいと思います。
OpenHaystackとは?#
OpenHayStackとは、AppleのFind Myネットワークにタダ乗りしてBluetooth(BLE)を喋るデバイスをAirTag化できる技術・ソフトウェアです。
Find MyネットワークやAirTagをリバースエンジニアリングした結果から開発されたものだそうです。
実際に触ってみる#
注意#
実際のところリリース版を使って公式のREADMEの手順通りにやってもうまく動きません。それを解決するために今回はリリース版ではなくmainブランチの最新の状態を取り込んで作業しています。mainブランチの最新の状態によってはこの記事の通りの手順では動かないことに注意してください。
環境#
- MacOS 14(Sonoma)
- XCode Version 15.1 (15C65)
- ESP32互換ボード
1. XCodeでOpenHaystackをビルドする#
GithubのReleasesからビルド済みのアプリケーションがダウンロードできますが、そのバージョンは現行開発版ではなく、古いので使えません。そのためリリース版を使わず自前でビルドする必要があります。なのでこの手順は必須です。
まずはGithubリポジトリをcloneします。
--depth 1
をつけることで最新のコミット履歴だけを落とせるので素早くダウンロードできます。
リポジトリのディレクトリのOpenHaystack
ディレクトリの中にOpenHaystack.xcodeproj
があるのでこれを開くとXCodeが起動すると思います。
ただ、Xcodeのバージョンによっては以下の記事のような現象が発生し、ライブラリが足りないなどのエラーや警告が出ると思います。
Xcode 15.3/15.4で発生するPackage.resolvedの削除問題について #Swift - Qiita
自分はこのエラーが置きましたが、以下を実行しOpenHaystack/OpenHaystack.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
を削除して再度XCodeを開き直すことで解決しました。
ビルドが完了するとこんな感じのアプリケーションが開きます。(セットアップ済みの画面なので既にアクセサリが表示されていますが実際には何も表示されていないと思います。)
2. OpenHaystackのセットアップ#
MacOS14以降ではOpenHaystackのREADMEの手順通りにやってもうまくいきません。
MacOS14以降の実際の手順を紹介します
OpenHaystackのアプリケーションをXCodeからビルドし起動したら、OpenHaystackの設定に移動します。ステータスバーのOpenHaystackから「Settings」で開きます。すると「Search Party Token」を入力するテキストフィールドのある設定が別ウィンドウで開きます。
ここにトークンを入れます。トークンはキーチェーンにあります。キーチェーンアプリを開いて以下の文字列で検索します。
項目を右クリックし「パスワードをクリップボードにコピー」でコピーできます。
先ほどのフィールドに入力したらアプリケーション側のセットアップは完了です。
3. OpenHaystackのファームウェアをESP32に焼く#
OpenHaystackは公式にESP32のファームウェアを用意しています。ファームウェアの書き込みは公式の手順にに従えばできますがここでも一応紹介します。(公式のインストラクション)
書き込みにはESP-IDFというツールを使用します。ESP-IDFのセットアップ手順は以下を参考にすると良いと思います。idf.py
というコマンドが使えるようになっていればOKです。
事前にOpenHaystackアプリからデバイスを作っておきます。画像赤丸の箇所から作成できます。
デバイスが一覧に追加されるので、追加されたデバイスを右クリックして「Copy advertisement key → Base64」でBase64形式でアドバタイズ用のキーをコピーしておきます。
OpenHaystackのプロジェクトディレクトリに入り、Firmware/ESP32
まで移動します。
まずはファームウェアをビルドします。
ディレクトリ内にあるflash_esp32.sh
を使って書き込みます。「Base64-encoded advertisement key」の箇所には先ほどコピーしたアドバタイズ用のキーに置き換えます。
ここまででセットアップは完了です。しばらくするとOpenHaystackの画面にデバイスの位置が表示されるはずです。(アプリ右上の更新ボタンを押すと位置情報が表示されるはずです。)ファームウェアを焼いてから表示されるまで5分ほどラグがあるように思いました。
まとめ#
ESP32を使ってOpenHaystackを動かす方法を紹介しました。もうかれこれ2,3週間くらい前にやったことな気がするのでうろ覚えで記事を書いたの間違っている箇所があればすいません・・・・・・。
最近nRF52832というハードウェアを使ってOpenHaystackを動かすのもやったのでそれも記事にかけたらいいなと思っています。
気づいたら年明けてた。