پروتکل ۲
قرارداد دقیق انتقال، شناسایی، کنترل، ACK و مالکیت در Protocol 2 نسخه v1.
# انتقال و شناسایی
در Protocol 2، UDP فقط برای شناسایی محلی کنترلر و WebSocket برای ترافیک کنترلی استفاده میشود. Firmware v1.0.0 روی پورت UDP برابر 4210 و WebSocket روی پورت 81 با مسیر / کار میکند.
برای دیدن همه ستونها، جدول را افقی بکشید.
| کانال | مقدار v1 | کاربرد |
|---|---|---|
| UDP | 4210 | پخش پیام شناسایی کنترلر |
| WebSocket | ws://<controller-ip>:81/ | کنترل، پیکربندی، ACK و تلهمتری |
{"type":"esp","ip":"192.168.1.42","mac":"AA:BB:CC:DD:EE:FF"}وقتی شناسایی لازم باشد، فریمور تقریباً هر ۱٫۵ ثانیه این پیام را تکرار میکند. هنگام جریان کنترلی سالم و دارای مالک در حالت پرواز، پخش دورهای متوقف میشود.
# بستههای کنترل
هر فریم کنترلی اتمیک است: هر چهار فیلد باید بهصورت عدد صحیح JSON وجود داشته باشند و مقدار هرکدام بین 1000 تا 2000 باشد. بسته ناقص، با نوع داده نامعتبر یا خارج از محدوده نادیده گرفته میشود و heartbeat کنترل را تازه نمیکند.
{"throttle":1000,"roll":1500,"pitch":1500,"yaw":1500}اولین بسته کامل و معتبر، کلاینت WebSocket را بهعنوان مالک کنترل فعال تعیین میکند. بستههای کنترلی کلاینتهای دیگر تا آزاد شدن مالکیت رد میشوند.
# فرمانهای سطح بالای پرواز
فرمانهای ARM، DISARM، Takeoff و Landing از envelope صریح با request_id مثبت و اجباری استفاده میکنند.
{"type":"flight_command","cmd":"arm","request_id":42} پاسخ {"type":"flight_command_ack","cmd":"arm","request_id":42,"ok":true,"message":"..."}فشار دادن دکمه را معادل تغییر قطعی وضعیت پرواز در نظر نگیرید. ACK و تلهمتری کنترلر مرجع وضعیت واقعی هستند.
برای دیدن همه ستونها، جدول را افقی بکشید.
| فیلد | الزام | معنی |
|---|---|---|
type | flight_command | یک درخواست سطحبالای پرواز را مشخص میکند. |
cmd | arm، disarm، takeoff یا landing | تغییر وضعیت درخواستی. |
request_id | عدد صحیح مثبت | درخواست را با ACK متناظر میکند. |
# هویت اتصال
بلافاصله پس از اتصال WebSocket، فریمور هویت MAC کنترلر را میفرستد:
{"type":"mac","mac":"AA:BB:CC:DD:EE:FF"}# مالکیت و امنیت
اگر شکل یا معنی پیامها تغییر میکند، تغییر سازگاری را مستند و version کنید و آن را بهعنوان همان Protocol 2 بدون تغییر معرفی نکنید.