ESP32 iPhone Agent: để AI điều khiển iPhone thật bằng ESP32-S3
Dự án ESP32 iPhone Agent dùng AirPlay để AI quan sát màn hình và USB HID để thao tác trên iPhone thật. Không cần jailbreak hay Mac khi chạy, nhưng lần cài đặt đầu vẫn cần Mac, Xcode và Apple ID để ký ứng dụng.
Một AI có thể mở Settings, tìm mục Wi‑Fi và thao tác trên iPhone thật — không phải máy giả lập — chỉ với một bo ESP32-S3 cắm vào máy. Đó là ý tưởng của ESP32 iPhone Agent, dự án đang được chú ý trên GitHub.
Cách tiếp cận khá trực diện: iPhone chiếu màn hình sang ESP32-S3 qua AirPlay để agent “nhìn”; bo mạch đóng vai chuột và bàn phím USB để agent “chạm, vuốt, gõ”. Phần lập kế hoạch và gọi mô hình AI chạy trong ứng dụng trên chính iPhone.
Dự án không yêu cầu jailbreak. Khi đã thiết lập, agent không cần Mac để chạy. Tuy nhiên, đây chưa phải bộ kit cắm vào là dùng ngay: bước flash firmware và cài app ban đầu vẫn cần Mac, Xcode và Apple ID.
ESP32-S3 trở thành “mắt” và “tay” cho agent
Theo README của dự án, hệ thống gồm ba vai trò:
Mắt: ESP32-S3 mở hotspot Wi‑Fi riêng và hiện trong Screen Mirroring với tên ESP32 Agent. iPhone gửi luồng AirPlay sang bo mạch.
Não: Bo mạch chuyển tiếp luồng H.264 qua Bluetooth Low Energy (BLE) tới app ESP32 Agent trên cùng chiếc iPhone. App giải mã hình ảnh, gửi ảnh màn hình đến vision model tương thích OpenAI API và quyết định thao tác kế tiếp.
Tay: App gửi lệnh qua BLE về ESP32-S3. Bo mạch hoạt động như chuột và bàn phím USB; với AssistiveTouch, con trỏ chuột có thể dùng để chạm và kéo trên màn hình.
README liệt kê các thao tác agent có thể thực hiện gồm chạm, vuốt, vẽ, nhập văn bản, bấm phím và về màn hình chính. Ví dụ minh họa của dự án là mở Clock, tạo báo thức lúc 8:00, chọn lặp lại vào thứ Hai và thứ Ba rồi lưu.
Điểm đáng chú ý là agent đang làm việc với giao diện iPhone thực. Nó phải đối mặt với trạng thái tải trang, pop-up, vị trí nút thay đổi và các yếu tố giao diện giống người dùng thông thường.
Phần cứng và điều kiện cần có
Phần cứng được dự án thử nghiệm là Seeed Studio XIAO ESP32S3 bản thường, có 8 MB PSRAM. README cho biết các bo ESP32-S3 khác có USB native qua cổng USB-C và có PSRAM cũng có thể phù hợp.
| Thành phần | Vai trò |
|---|---|
| iPhone chạy iOS 18 trở lên | Thiết bị được AI quan sát và điều khiển |
| ESP32-S3 có USB native và PSRAM | AirPlay receiver, BLE và USB HID |
| Kết nối dữ liệu di động | iPhone dùng Wi‑Fi để kết nối hotspot của bo mạch |
| Vision model tương thích OpenAI API | Đọc ảnh màn hình và quyết định hành động |
| Mac có Xcode | Flash firmware, build và cài app lần đầu |
Với iPhone dùng USB-C, bo mạch có thể cắm trực tiếp và được cấp nguồn từ điện thoại. iPhone dùng Lightning cần Lightning to USB Camera Adapter.
README cũng làm rõ vấn đề ký app:
Có thể dùng Apple ID miễn phí để ký ứng dụng, nhưng cần ký lại sau mỗi 7 ngày.
Khả năng tự kết nối hotspot bằng một chạm cần năng lực Hotspot Configuration, gắn với tài khoản trả phí.
Nếu không có năng lực này, app sẽ hiển thị mật khẩu để người dùng tự kết nối hotspot.
Luồng hoạt động: từ Screen Mirroring đến lệnh chạm
Kiến trúc của dự án có thể tóm tắt như sau:
text
iPhone ── Screen Mirroring qua Wi‑Fi ──▶ ESP32-S3
▲ │
│ BLE │
└──── USB HID chuột + bàn phím ◀───────────┘
▲
│
App ESP32 Agent trên iPhone
giải mã → vision model → lệnh
Bo mạch không giải mã video H.264. Nó giữ luồng AirPlay và chuyển tiếp qua BLE; app mới thực hiện giải mã rồi gửi ảnh đến model.
Ứng dụng hỗ trợ endpoint chat tương thích OpenAI API và có thể dùng model cloud hoặc server tự vận hành. README nêu các ví dụ như vLLM, SGLang, llama.cpp và Ollama. Người dùng có thể chọn model từ danh sách endpoint trả về hoặc nhập model ID thủ công, đồng thời đặt model riêng cho planner và actor.
Cách thử theo README
Dự án cảnh báo chỉ nên dùng các bước và lệnh trong README chính thức. Không chạy các lệnh “cài nhanh” xuất hiện trong issue hoặc phần bình luận.
1. Flash firmware cho bo mạch
Cắm ESP32-S3 vào Mac, cài arduino-cli, ESP32 core 3.3.x và NimBLE-Arduino 2.5.x. Sau đó chạy:
bash
arduino-cli lib install "NimBLE-Arduino@2.5.1"
hardware/flash.sh # optional: [serial port] [--debug]
README khuyến nghị luôn build bằng flash.sh vì script này áp dụng cấu hình bộ đệm BLE cần thiết.
2. Build và cài app lên iPhone
Tạo file cấu hình cục bộ, điền thông tin team ký và bundle ID, rồi mở project trong Xcode:
bash
cp ios/Config/Local.xcconfig.example ios/Config/Local.xcconfig
open ios/IPhoneAgent.xcodeproj
Project được tạo bằng XcodeGen từ ios/project.yml. Nếu cần tạo lại project, README đưa lệnh:
bash
cd ios && xcodegen
3. Thiết lập trên iPhone
Sau khi cắm bo mạch vào iPhone và mở ESP32 Agent, app dẫn người dùng qua bốn bước:
Plug Me In: ghép nối bo mạch qua Bluetooth.
Let Me See the Screen: kết nối hotspot của bo mạch, sau đó vào Control Center → Screen Mirroring → chọn ESP32 Agent.
Let Me Use the Pointer: bật AssistiveTouch để app hiệu chỉnh con trỏ.
Give Me a Brain: nhập endpoint và API key của vision model, sau đó chọn model.
README cho biết API key được lưu trong Keychain.
4. Bắt đầu bằng tác vụ ngắn
Ví dụ được README sử dụng là:
text
Open Settings and go to Wi-Fi
Nhấn Start để agent bắt đầu. Người dùng có thể dừng tác vụ từ Dynamic Island hoặc quay lại app. Dự án cũng cho biết Siri, Shortcuts, widget và Control Center có thể chạy các tác vụ đã lưu.
Có cơ chế hiệu chỉnh, nhưng không phải giải pháp tốc độ cao
Điều khiển iPhone bằng chuột USB có một trở ngại: tọa độ con trỏ là tương đối. Dự án xử lý bằng cách đưa con trỏ về góc màn hình để xác định lại vị trí. Trước các cú chạm cần độ chính xác cao, app có thể di chuyển nhẹ con trỏ, tìm vị trí của nó trong ảnh rồi hiệu chỉnh sai lệch.
Sau mỗi hành động, app chờ màn hình ổn định và thông báo cho model biết giao diện có thay đổi hay không. Nếu mất kết nối với bo mạch, hotspot hoặc Screen Mirroring, quá trình chạy sẽ tạm dừng và có thể tiếp tục từ bước đang thực hiện khi kết nối trở lại.
Mỗi lượt chạy được lưu trên điện thoại để xem lại từng bước, với thao tác chạm và vuốt hiển thị trên màn hình. Người dùng có thể vào Runs → mở một run → ⋯ → Export trace để xuất ảnh màn hình, hành động và annotation đã lưu.
Những giới hạn cần biết
README nêu rõ đây vẫn là một thiết lập có nhiều giới hạn:
BLE truyền khoảng 300–500 kbps.
Màn hình mirror ở mức 480×1040, tối đa 5 fps.
Mỗi bước mất vài giây; phần lớn thời gian nằm ở model.
Hệ thống hiện giả định giao diện dọc; hỗ trợ landscape vẫn nằm trong roadmap.
Nhập văn bản ngoài ASCII, chẳng hạn tiếng Trung qua bàn phím pinyin của iOS, chưa được hỗ trợ.
Danh sách model phù hợp nhất với thiết lập này vẫn là hạng mục roadmap.
Vì vậy, ESP32 iPhone Agent phù hợp hơn để khám phá computer-use trên mobile, làm proof-of-concept hoặc quan sát agent xử lý các tác vụ ngắn có giám sát. Nó chưa nên được xem là công cụ tự động hóa ổn định cho luồng công việc quan trọng.
Điểm hấp dẫn nhất của dự án không nằm ở tốc độ, mà ở kiến trúc: một AI có thể quan sát và thao tác trên iPhone thật, không jailbreak, với phần cứng ESP32-S3 giá thấp và cơ chế replay để kiểm tra lại từng hành động.