
ESP32 iPhone Agent কী করে
ESP32 iPhone Agent একটি AI মডেলকে বাস্তব iPhone দেখতে ও নিয়ন্ত্রণ করতে দেয়। এটি ভিজ্যুয়াল ইনপুটের জন্য AirPlay স্ক্রিন মিররিং এবং USB মাউস ও কীবোর্ড হিসেবে একটি সাশ্রয়ী ESP32-S3 বোর্ড ব্যবহার করে। এটি স্ক্রিন ও পয়েন্টারের মাধ্যমে কাজ করে, তাই ফোনে Xcode, Apple ডেভেলপার অ্যাকাউন্ট, jailbreak, Developer Mode বা কোনো সহায়ক অ্যাপ ইনস্টল করার প্রয়োজন হয় না।
কম্পিউটারে macOS বা Linux চলতে পারে। এতে UxPlay, Python সার্ভার, ওয়েব ইন্টারফেস এবং OpenAI-compatible ভিশন মডেলের সঙ্গে সংযোগ চালু থাকে। ESP32-S3 Wi-Fi-এর মাধ্যমে কম্পিউটারের সঙ্গে সংযুক্ত হয় এবং iPhone-এর কাছে একটি সাধারণ USB Human Interface Device হিসেবে দেখা যায়।
সিস্টেমটি যেভাবে কাজ করে
AirPlay চোখ হিসেবে কাজ করে
iPhone তার ডিসপ্লে কম্পিউটারে থাকা UxPlay-এ মিরর করে। একটি GStreamer পাইপলাইন সেই স্ট্রিমকে JPEG ফ্রেমে রূপান্তর করে, যা AI agent এবং ব্রাউজারভিত্তিক লাইভ ভিউ—উভয়ই ব্যবহার করে।
ESP32-S3 হাত হিসেবে কাজ করে
iPhone-এর সঙ্গে সংযুক্ত হলে বোর্ডটি USB মাউস ও কীবোর্ডের মতো আচরণ করে। iOS AssistiveTouch চালু থাকলে মাউস ক্লিক ট্যাপে, পয়েন্টার ড্র্যাগ সোয়াইপে, স্ক্রল হুইল ইন্টারফেস স্ক্রলে এবং কীবোর্ড কমান্ডে লেখা প্রবেশ করানো বা শর্টকাট চাপা যায়।
ফার্মওয়্যারে ইচ্ছাকৃতভাবে খুব কম লজিক রাখা হয়েছে। সার্ভার TCP-এর মাধ্যমে move, click, scroll, type এবং key-এর মতো লাইনভিত্তিক কমান্ড পাঠায়। বোর্ড ok অথবা একটি ত্রুটি বার্তা দিয়ে সাড়া দেয়।
Planner ও actor মস্তিষ্ক হিসেবে কাজ করে
একটি planner মডেল অনুরোধ করা লক্ষ্য ও বর্তমান স্ক্রিন থেকে একটি সংক্ষিপ্ত পরিকল্পনা তৈরি করে। একটি actor মডেল প্রতিটি নতুন স্ক্রিনশট পরীক্ষা করে পরবর্তী কাজ নির্বাচন করে, যেমন ট্যাপ, সোয়াইপ, পথ আঁকা, টাইপ করা, কোনো কী চাপা, হোমে ফেরা বা কাজ শেষ করা। একই ভিশন মডেল উভয় ভূমিকা পালন করতে পারে।
বন্ধ-লুপ যাচাই নির্ভরযোগ্যতা বাড়ায়
পয়েন্টারের চলাচল আপেক্ষিক, তাই সার্ভার তার আনুমানিক অবস্থান ট্র্যাক করে। ট্যাপের আগে এটি পয়েন্টার সামান্য নাড়াতে, মিরর করা ছবিতে সেটিকে শনাক্ত করতে, ভুল সংশোধন করতে এবং ক্যালিব্রেশন আরও নির্ভুল করতে পারে। কোনো কাজের পরে agent স্ক্রিন পরিবর্তিত হয়েছে কি না পরীক্ষা করে। ফলে ব্যর্থ কাজ শনাক্ত করে পুনরায় চেষ্টা করা যায়, পরবর্তী ধাপগুলো তার ওপর নির্ভর করে ভুল পথে এগিয়ে যায় না।
বারবার কাজ করার পর সিস্টেমটি নতুন করে পরিকল্পনা করতে পারে এবং সংযোগ বিচ্ছিন্ন হওয়া বা মডেলের অবৈধ উত্তরের পর পুনরুদ্ধার করতে পারে। Wi-Fi সংযোগ বিচ্ছিন্ন হলে বোর্ড মাউসের বোতামগুলো ছেড়ে দিয়ে স্বয়ংক্রিয়ভাবে পুনরায় সংযুক্ত হয়।
প্রধান বৈশিষ্ট্য
- Apple ডেভেলপমেন্ট সেটআপের প্রয়োজন নেই: Xcode, ডেভেলপার অ্যাকাউন্ট, কোড সাইনিং, Developer Mode বা test-runner অ্যাপের কোনোটি প্রয়োজন হয় না।
- বিস্তৃত অ্যাপ সামঞ্জস্য: agent accessibility tree-এর ওপর নির্ভর না করে পিক্সেলে কাজ করে, তাই সাধারণ অ্যাপ ও গেম—উভয়ের সঙ্গেই কাজ করতে পারে।
- Mac বা Linux host: সার্ভারটি শুধু macOS-এ সীমাবদ্ধ নয়।
- নমনীয় মডেল সমর্থন: ছবি গ্রহণ করে এমন যেকোনো OpenAI-compatible chat API ব্যবহার করা যায়।
- ম্যানুয়াল ও স্বয়ংক্রিয় নিয়ন্ত্রণ: ওয়েব ইন্টারফেসে সরাসরি ট্যাপ, সোয়াইপ, স্ক্রল, টাইপ, Home, Back এবং AI-চালিত কাজ সমর্থিত।
- কার্যক্রম পর্যবেক্ষণ: ইন্টারফেসে লাইভ ফোন স্ক্রিন, পরিকল্পনা, লগ, স্ক্রিনশট, কাজ, reasoning এবং সময়সংক্রান্ত তথ্য দেখা যায়।
- নিরাপত্তা নিয়ন্ত্রণ: জরুরি স্টপ agent-কে থামিয়ে পয়েন্টার ছেড়ে দেয়।
যা যা প্রয়োজন
- ESP32-S3 বোর্ড: প্রকল্পটি খালি Seeed Studio XIAO ESP32S3 দিয়ে পরীক্ষা করা হয়েছে। অন্য ESP32-S3 বোর্ডও কাজ করতে পারে, যদি এর USB-C পোর্ট চিপের native USB interface-এর সঙ্গে সংযুক্ত থাকে।
- iPhone: USB-C মডেলগুলো সরাসরি সংযুক্ত করা যায়। Lightning মডেলের জন্য Lightning to USB Camera Adapter প্রয়োজন।
- কম্পিউটার: iPhone-এর একই নেটওয়ার্কে থাকা macOS বা Linux মেশিন।
- Wi-Fi: বোর্ড কনফিগারেশনের জন্য 2.4 GHz নেটওয়ার্কের নাম ও পাসওয়ার্ড প্রয়োজন।
- ভিশন মডেল: ছবি গ্রহণ করে এমন cloud বা local OpenAI-compatible endpoint।
iPhone বোর্ডটিকে বিদ্যুৎ দেয়। একই সময়ে ফোন চার্জ করতে হলে power pass-through সমর্থনকারী USB-C hub ব্যবহার করুন।
Agent ইনস্টল ও কনফিগার করুন
1. Repository clone করুন
git clone https://github.com/onehumanbeing/esp32-iphone-agent.git
cd esp32-iphone-agent
2. ESP32-S3 প্রস্তুত ও flash করুন
arduino-cli এবং 3.x ESP32 core ইনস্টল করুন। USB-এর মাধ্যমে ESP32-S3-কে কম্পিউটারের সঙ্গে সংযুক্ত করুন, উদাহরণ secrets ফাইলটি কপি করুন এবং নতুন ফাইলটি সম্পাদনা করুন।
cp hardware/hid_bridge/secrets.example.h hardware/hid_bridge/secrets.h
hardware/hid_bridge/secrets.h-এ 2.4 GHz Wi-Fi নেটওয়ার্কের নাম, Wi-Fi পাসওয়ার্ড এবং সার্ভার চালাবে এমন কম্পিউটারের IP address লিখুন। এরপর বোর্ডটি flash করুন:
hardware/flash.sh
Flash script ঐচ্ছিকভাবে একটি serial port এবং --debug flag গ্রহণ করে। Debug firmware USB serial-এর মাধ্যমে কমান্ড ও তাদের সময়কাল প্রতিধ্বনিত করে।
3. UxPlay ইনস্টল করুন
macOS-এ Homebrew দিয়ে UxPlay ইনস্টল করুন:
brew install uxplay
Debian বা Ubuntu-তে UxPlay এবং প্রয়োজনীয় GStreamer প্যাকেজ ইনস্টল করুন:
sudo apt install uxplay gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-libav
4. Python environment তৈরি করুন
সার্ভার ডিরেক্টরিতে প্রবেশ করুন, একটি virtual environment তৈরি করুন এবং প্রকল্পটি ইনস্টল করুন:
cd server
python3 -m venv .venv
.venv/bin/pip install -e .
Python 3.10 বা তার পরের সংস্করণ প্রয়োজন।
৫. মডেল কনফিগার করুন
এনভায়রনমেন্ট টেমপ্লেট কপি করুন:
cp .env.example .env
server/.env সম্পাদনা করে অন্তত OpenAI-সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট, মডেলের নাম এবং API কী সেট করুন:
LLM_BASE_URL=https://your-endpoint.example/v1
LLM_MODEL=your-vision-model
LLM_API_KEY=your-api-key
নির্বাচিত মডেলটিকে ছবি সমর্থন করতে হবে। একটি ক্লাউড API যথেষ্ট; স্থানীয় মডেল চালানো ঐচ্ছিক।
৬. সার্ভার চালু করুন
set -a && . ./.env && set +a && .venv/bin/python -m hidagent
ব্রাউজারে http://<computer-ip>:8890 খুলুন। বোর্ড যে নেটওয়ার্ক ব্যবহার করছে, সেই নেটওয়ার্ক থেকে কম্পিউটারের IP-তে পৌঁছানো সম্ভব হতে হবে।
iPhone সেট আপ করুন
নিচের ফোন কনফিগারেশন সাধারণত একবারই করতে হয়:
- Settings খুলে Accessibility, Touch এবং AssistiveTouch-এ যান।
- AssistiveTouch চালু করুন।
- ফ্ল্যাশ করা বোর্ডটি কম্পিউটার থেকে বিচ্ছিন্ন করে iPhone-এ সংযুক্ত করুন।
- একটি গোলাকার পয়েন্টার দেখা যাচ্ছে এবং ওয়েব পেজে কন্ট্রোলার সংযুক্ত দেখাচ্ছে কি না নিশ্চিত করুন।
- iPhone-এ Control Center খুলে Screen Mirroring নির্বাচন করুন।
- iPhone Agent নির্বাচন করুন। লাইভ ফোনের ডিসপ্লে ওয়েব ইন্টারফেসে দেখা যাওয়ার কথা।
- ওয়েব ইন্টারফেসে Manual controls খুলে Calibrate নির্বাচন করুন।
- লাইভ স্ক্রিনে দৃশ্যমান পয়েন্টারের ঠিক ওপর ক্লিক করুন।
পরে AssistiveTouch ট্র্যাকিংয়ের গতি পরিবর্তন করলে পুনরায় ক্যালিব্রেট করুন।
আপনার প্রথম কাজ চালান
ওয়েব ইন্টারফেসে একটি লক্ষ্য লিখে Start চাপুন। উদাহরণ:
Open Settings and go to Wi-Fi
প্ল্যানার একটি সংক্ষিপ্ত পরিকল্পনা তৈরি করে, আর অ্যাক্টর বারবার বর্তমান স্ক্রিনশট পরীক্ষা করে একটি অ্যাকশন নির্বাচন করে। কাজ চলার সময় লাইভ ফোন ভিউ এবং লগ দেখুন।
প্রতিটি সিদ্ধান্তের জন্য ব্যবহৃত স্ক্রিনশট স্টেপ ওয়ালে সংরক্ষিত হয়। এতে ছবির ওপর নির্বাচিত ট্যাপ বা সোয়াইপও দেখানো হয় এবং মডেলের যুক্তি ও সময় প্রদর্শিত হয়। কোনো স্টেপ কার্ড নির্বাচন করলে বড় ভিউ খোলে।
ম্যানুয়াল কন্ট্রোল ব্যবহার করুন
- ওই অবস্থানে ট্যাপ করতে লাইভ ফোনের ছবিতে ক্লিক করুন।
- সোয়াইপ করতে ছবির ওপর দিয়ে টেনে নিন।
- ফোন স্ক্রল করতে স্ক্রলিং ইনপুট ব্যবহার করুন।
- Home, Back, টেক্সট এন্ট্রি এবং কীগুলোর জন্য দেওয়া কন্ট্রোল ব্যবহার করুন।
অ্যাক্টর অপ্রত্যাশিত আচরণ করলে Emergency stop সক্রিয় করুন অথবা Esc চাপুন। এতে রান বন্ধ হবে এবং পয়েন্টার ছেড়ে দেওয়া হবে। ইন্টারফেসে এক্সিকিউশন ইতিহাস মুছে ফেলার কন্ট্রোলও রয়েছে।
গুরুত্বপূর্ণ কনফিগারেশন অপশন
LLM_BASE_URL: OpenAI-সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট। ডিফল্ট হলোhttp://localhost:8000/v1।LLM_MODELএবংLLM_API_KEY: মডেলের নাম এবং API শংসাপত্র।LLM_EXTRA_BODY: প্রতিটি মডেল অনুরোধের সঙ্গে একীভূত করা JSON, যেমন মডেলের চিন্তন মোড বন্ধ করার সেটিং।ACTOR_*এবংPLANNER_*: সংশ্লিষ্টLLM_*সেটিংগুলোর ভূমিকা-নির্দিষ্ট ওভাররাইড।AIRPLAY_NAME: iPhone-এর Screen Mirroring তালিকায় দেখানো রিসিভারের নাম। ডিফল্ট হলোiPhone Agent।PORT: ওয়েব ইন্টারফেসের পোর্ট, ডিফল্ট8890।DEVICE_PORT: ESP32-S3 ব্যবহৃত পোর্ট, ডিফল্ট7300।HIDAGENT_DATA: ক্যালিব্রেশন ও ট্রেস ডিরেক্টরি, ডিফল্ট~/.hidagent।HIDAGENT_DEBUG:1সেট করা হলে সার্ভার-সাইড ডিবাগ লগিং চালু করে।
উন্নত ব্যবহার ও সমস্যা সমাধান
প্ল্যানার ও অ্যাক্টরের জন্য আলাদা মডেল নির্ধারণ করুন
প্ল্যানার ও অ্যাক্টর একই মডেল ব্যবহার করতে পারে, তবে ভূমিকা-নির্দিষ্ট এনভায়রনমেন্ট ভেরিয়েবলগুলো মডেলের সেটিং আলাদাভাবে ওভাররাইড করার সুযোগ দেয়। আলাদা এন্ডপয়েন্ট বা মডেল প্রয়োজন হলে সংশ্লিষ্ট LLM_* ভেরিয়েবলের PLANNER_* এবং ACTOR_* রূপ ব্যবহার করুন।
স্থানীয় মডেল সার্ভার সংযুক্ত করুন
vLLM, SGLang, llama.cpp এবং Ollama-সহ যেকোনো OpenAI-সামঞ্জস্যপূর্ণ ভিশন মডেল সার্ভার একইভাবে কনফিগার করা যায়। প্রকল্পটি NVIDIA Qwen3.8-Flash-Next-NVFP4 ব্যবহার করে এবং টেনসর প্যারালেলিজমের মাধ্যমে দুটি NVIDIA DGX Spark থেকে পরিবেশিত অবস্থায় তৈরি ও সময় পরিমাপ করা হয়েছে।
ওই সেটআপের একটি উদাহরণ কনফিগারেশন:
LLM_BASE_URL=http://<dgx-spark-ip>:8888/v1
LLM_MODEL=Qwen3.8-Flash-Next
LLM_EXTRA_BODY='{"chat_template_kwargs": {"enable_thinking": false}}'
চিন্তন মোড বন্ধ থাকা অবস্থায় উল্লিখিত ডেভেলপমেন্ট সেটআপে প্রতি অ্যাকশনে প্রায় ১.৩ সেকেন্ড এবং প্রতি প্ল্যানে ২ সেকেন্ড সময় পাওয়া গেছে। এই পরিসংখ্যান নির্দিষ্ট হার্ডওয়্যার ও মডেল কনফিগারেশনকে নির্দেশ করে; অন্যান্য ডিপ্লয়মেন্টের জন্য এটি নিশ্চিত গতি নয়।
ট্রেস সংগ্রহ চালু করুন
server/.env-এ নিচের মানটি সেট করুন:
HIDAGENT_DEBUG=1
ডিবাগ মোড প্রতিটি বোর্ড কমান্ড এবং তার লেটেন্সি লগ করে। এটি ~/.hidagent/traces/-এর অধীনে প্রতিটি এজেন্ট রান-এর জন্য একটি ডিরেক্টরিও তৈরি করে। ডিরেক্টরিতে steps.jsonl থাকে, যাতে মডেল প্রম্পট, কাঁচা উত্তর, লেটেন্সি পরিমাপ এবং অ্যাকশনসহ মডেল কলের সময় দেখা স্ক্রিনশটগুলো থাকে।
বোর্ড প্রোটোকল বুঝুন
pingস্বাস্থ্য পরীক্ষা করে।homeপরিচিত অবস্থান নির্ধারণের জন্য পয়েন্টারকে উপরের-বাম কোণে নিয়ে যায়।move <dx> <dy>ধ্রুব গতিতে পয়েন্টারকে আপেক্ষিকভাবে সরায়।press,releaseএবংclickবাম মাউস বোতাম নিয়ন্ত্রণ করে।scroll <v> <h>উল্লম্ব ও অনুভূমিক স্ক্রল-হুইলের ইনপুট পাঠায়।type <text>ASCII টেক্সট প্রবেশ করায়।key <combo>enter,cmd+hবাcmd+space-এর মতো কী বা কী-সমন্বয় পাঠায়।
Linux-এ AirPlay আবিষ্কার-সংক্রান্ত সমস্যা সমাধান
কম্পিউটারে একাধিক নেটওয়ার্ক ইন্টারফেস থাকলে এবং iPhone রিসিভারটি তালিকাভুক্ত না করলে, ফোনের নেটওয়ার্কের সঙ্গে সংযুক্ত ইন্টারফেসে Avahi mDNS বিজ্ঞাপন সীমাবদ্ধ করুন।
পরিচিত সীমাবদ্ধতা
- iOS পাসকোড প্রবেশ, Apple Pay, DRM-সুরক্ষিত ভিডিও এবং আরও কিছু সুরক্ষিত স্ক্রিন মিরর করে না, তাই এজেন্ট সেগুলো দেখতে পারে না।
- ফোন লক হলে স্ক্রিন মিররিং বন্ধ হয়ে যায়। এজেন্ট চালু থাকা অবস্থায় অটো-লক নিষ্ক্রিয় রাখুন।
- কীবোর্ডের টেক্সট ইনপুট ASCII-তে সীমাবদ্ধ।
- AssistiveTouch ট্র্যাকিং গতি পরিবর্তন করার পর পয়েন্টার ক্যালিব্রেশন পুনরায় করতে হবে।
- এজেন্টটি বোর্ড ও সার্ভারের মধ্যে কার্যকর নেটওয়ার্ক সংযোগ এবং ফোন ও কম্পিউটারের মধ্যে একটি উপলভ্য AirPlay স্ট্রিমের ওপর নির্ভর করে।
দায়িত্বশীল ব্যবহার
শুধু আপনার মালিকানাধীন বা ব্যবহারের অনুমতিপ্রাপ্ত ডিভাইস ও অ্যাকাউন্ট স্বয়ংক্রিয়ভাবে পরিচালনা করুন এবং সংশ্লিষ্ট অ্যাপ্লিকেশনগুলোর শর্তাবলি মেনে চলুন।
এজেন্টটি একজন মানুষের মতো একই ধরনের ইনপুট দিয়ে কাজ করতে পারে, তাই সক্রিয় রানগুলো তদারক করুন এবং জরুরি বন্ধের ব্যবস্থা হাতের কাছে রাখুন।
উপসংহার
ESP32 iPhone Agent AirPlay মিররিং, কম খরচের ESP32-S3 USB HID ব্রিজ এবং OpenAI-সামঞ্জস্যপূর্ণ ভিশন মডেলকে একত্র করে Apple-এর প্রচলিত ডেভেলপমেন্ট টুলচেইন ছাড়াই একটি বাস্তব iPhone স্বয়ংক্রিয়ভাবে পরিচালনা করে। ফার্মওয়্যার, সার্ভার, মডেল এন্ডপয়েন্ট, AssistiveTouch, মিররিং এবং পয়েন্টার ক্যালিব্রেশন কনফিগার করার পর আপনি প্রাকৃতিক ভাষায় লক্ষ্য নির্ধারণ করতে, প্রতিটি সিদ্ধান্ত পরীক্ষা করতে, ম্যানুয়ালি হস্তক্ষেপ করতে এবং ডিবাগিংয়ের জন্য বিস্তারিত ট্রেস সংগ্রহ করতে পারবেন।
