ドキュメント一覧

はじめてのiPhoneエージェントを作る

ボードの準備から最初のタスクまで、順番に進める導入ガイド。

ESP32 iPhone Agentは、ESP32-S3を介して視覚モデルに実機のiPhoneを操作させるプロジェクトです。現在のバージョンではiPhoneアプリ上でエージェントが動作するため、実行中にパソコンは必要ありません。ただし、初回の導入にはMacとXcodeを使います。

用意するもの

  • PSRAMとネイティブUSBを備えたESP32-S3。動作確認に使われているのは、8 MB PSRAM搭載の通常版Seeed Studio XIAO ESP32S3です。
  • iOS 18以降のiPhoneとモバイルデータ通信。LightningモデルにはLightning - USBカメラアダプタも必要です。
  • XcodeをインストールしたMacと、アプリの署名に使うApple ID。
  • 画像入力に対応したモデルAPI。OpenAI互換のChat APIを使用します。

iPhoneのWi-Fiはボードへのミラーリングに使用し、モデルへのリクエストはモバイル通信で送ります。購入前に必要な機材を確認してください。

1. ソースを取得する

リポジトリをクローンして、プロジェクトのディレクトリに移動します。特に記載がない限り、以降のコマンドもここで実行します。

git clone https://github.com/onehumanbeing/esp32-iphone-agent.git
cd esp32-iphone-agent

このガイドは現在の「iPhoneアプリ + ESP32-S3」構成が対象です。legacyブランチとv0.1.0タグはパソコン側のサーバーを使う旧構成なので、手順を混ぜないでください。

2. ファームウェアを書き込む

arduino-cli、ESP32 3.3.xのボードパッケージ、NimBLE-Arduino 2.5.1を準備します。データ通信対応のUSBケーブルでボードをMacに接続し、プロジェクトのスクリプトを実行します。

arduino-cli lib install "[email protected]"
hardware/flash.sh

ボードパッケージの導入やポートの指定はファームウェアの書き込みを参照してください。hardware/flash.shは映像転送に必要なBLEバッファ設定を適用するため、標準設定でのビルドに置き換えないでください。

3. iPhoneアプリをインストールする

ローカル設定をコピーし、作成されたファイルに自分の署名チームと固有のBundle IDを設定します。

cp ios/Config/Local.xcconfig.example ios/Config/Local.xcconfig
open ios/IPhoneAgent.xcodeproj

XcodeでIPhoneAgentスキームと接続中のiPhoneを選び、ビルドして実行します。無料のApple IDでも署名できますが、7日ごとの再署名が必要です。オプションの権限設定も含め、iOSアプリの導入で確認してください。

4. アプリで接続を確認する

ボードをMacから外してiPhoneに接続し、ESP32 Agentを開きます。初回設定は次の順番です。

  1. Plug Me In:ボードを検出してBluetoothでペアリングする。
  2. Let Me See the Screen:ボードのWi-Fiに接続し、コントロールセンターの「画面ミラーリング」でESP32 Agentを選ぶ。
  3. Let Me Use the Pointer:AssistiveTouchを有効にして、ポインタの自動調整を待つ。
  4. Give Me a Brain:APIのアドレス、キー、画像対応モデルを設定する。

各接続の確認はボードと画面の接続、モデルの確認は視覚モデルの設定を参照してください。アプリの表示言語はウェブサイトと同じとは限らないため、照合できるよう英語のステップ名も記載しています。

5. 小さなタスクを試す

まずは**「設定を開いてWi-Fiの画面に移動して」**など、結果が簡単に確認できる指示を試します。モデルや端末の表示によっては、英語の “Open Settings and go to Wi-Fi” も使えます。

Startを押し、ロックを解除したまま動作を見守ってください。停止するときは対応端末のDynamic Islandから、またはアプリに戻って操作します。

現在、キーボードはASCII文字のみ対応しています。日本語で指示できることと、他のアプリに日本語を入力できることは別です。最初は日本語入力を必要としないタスクを選びましょう。

結果を自分で確認する

Runsでステップを再生し、最後の画面を確認します。モデルの「完了」は成功の独立した検証ではありません。原因を調べる場合は実行記録をエクスポートできます。

途中で止まった場合は、トラブルシューティングで失敗した接続を確認してください。毎回すべてをインストールし直す必要はありません。

プロジェクトの参照元

README.md