</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

  • خانه
  • الکترونیک
  • پرینت سه‌بعدی
  • حکاکی و برش لیزری
  • ابزار کارگاهی
  • پهپاد
  • ربات زمینی UGV
  • ربات پرنده UAV
  • صنایع دستی
  • آموزش
  • پروژه‌ها
  • درباره ما
خانه›ربات‌های پرنده (UAV)›ساخت Telemetry Dashboard با Python و MAVLink: مانیتورینگ پرواز روی لپ‌تاپ (فارسی)
ربات‌های پرنده (UAV) پروژه‌ها

ساخت Telemetry Dashboard با Python و MAVLink: مانیتورینگ پرواز روی لپ‌تاپ (فارسی)

​ ژوئن 11, 2026 3 دقیقه مطالعه
داشبورد Telemetry Python MAVLink پهپاد

MAVLink و Telemetry Dashboard یعنی چه؟ (برای مبتدی)

MAVLink (Micro Air Vehicle Link) یک پروتکل ارتباطی سبک است که توسط پهپادهای ArduPilot، PX4 و دیگران برای تبادل داده پرواز استفاده می‌شود. از طریق یک لینک Telemetry (رادیو 433MHz SiK یا WiFi)، پهپاد پیام‌های MAVLink شامل موقعیت GPS، ارتفاع، سرعت، وضعیت باتری، حالت پرواز و صدها پارامتر دیگر را می‌فرستد.

pymavlink یک کتابخانه Python است که دریافت و ارسال پیام‌های MAVLink را ساده می‌کند. با ترکیب pymavlink و Tkinter (رابط گرافیکی داخلی Python)، می‌توانید یک داشبورد مانیتورینگ سفارشی بسازید — دقیقاً اطلاعاتی که می‌خواهید.

محصولی که می‌سازید

یک داشبورد Python که ارتفاع، سرعت، ولتاژ، GPS، RSSI و حالت پرواز را در زمان واقعی نمایش می‌دهد.

  • زمان ساخت: ۳ تا ۵ ساعت
  • هزینه: رایگان (Python + pymavlink)
  • پیش‌نیاز: Python 3.x نصب‌شده

ALT 42.3m SPEED 8.4m/s VOLTAGE 12.6V MODE LOITER GPS: 35.6892°N 51.3890°E | Sats: 12 | RSSI: -72dBm | Arm: YES

نصب کتابخانه‌ها


pip install pymavlink
pip install dronekit   # اختیاری — سطح بالاتر از pymavlink
pip install folium     # اختیاری — نقشه پرواز HTML

کد داشبورد Python + Tkinter


import tkinter as tk
from pymavlink import mavutil
import threading, time

# اتصال به telemetry (COM4 یا /dev/ttyUSB0)
CONN = 'COM4'  # تغییر دهید
master = mavutil.mavlink_connection(CONN, baud=57600)
master.wait_heartbeat()
print("Heartbeat received!")

data = {'alt': 0, 'spd': 0, 'bat': 0.0, 'mode': '---', 'lat': 0, 'lon': 0, 'sats': 0}

def receive_loop():
    while True:
        try:
            msg = master.recv_match(blocking=True, timeout=2)
            if not msg: continue
            t = msg.get_type()
            if t == 'GLOBAL_POSITION_INT':
                data['alt'] = msg.relative_alt / 1000
                data['lat'] = msg.lat / 1e7
                data['lon'] = msg.lon / 1e7
            elif t == 'VFR_HUD':
                data['spd'] = msg.groundspeed
            elif t == 'SYS_STATUS':
                data['bat'] = msg.voltage_battery / 1000.0
            elif t == 'HEARTBEAT':
                modes = {0:'STAB',2:'ALT_H',3:'AUTO',4:'GUIDED',5:'LOITER',6:'RTL',9:'LAND'}
                data['mode'] = modes.get(msg.custom_mode,'???')
            elif t == 'GPS_RAW_INT':
                data['sats'] = msg.satellites_visible
        except: pass

threading.Thread(target=receive_loop, daemon=True).start()

root = tk.Tk(); root.title("UAV Telemetry"); root.configure(bg='#0d1117')
root.geometry('700x220')

font_big  = ('Courier New', 28, 'bold')
font_med  = ('Courier New', 13)
font_lab  = ('Courier New', 11)

labels = {}
fields = [
    ('ALT (m)',    'alt',  '#00ff88'),
    ('SPEED m/s',  'spd',  '#ff9f1c'),
    ('BATTERY V',  'bat',  '#ffeb3b'),
    ('MODE',       'mode', '#4fc3f7'),
]
for i,(lbl,key,col) in enumerate(fields):
    tk.Label(root,text=lbl,font=font_lab,bg='#161b22',fg='#8b949e',width=12).grid(row=0,column=i,padx=4,pady=(10,0))
    labels[key]=tk.Label(root,text='---',font=font_big,bg='#161b22',fg=col,width=8)
    labels[key].grid(row=1,column=i,padx=4,pady=4)

gps_lbl = tk.Label(root,text='GPS: ---',font=font_med,bg='#0d1117',fg='#aaa')
gps_lbl.grid(row=2,column=0,columnspan=4,pady=8)

def update_ui():
    labels['alt'].config(text=f"{data['alt']:.1f}")
    labels['spd'].config(text=f"{data['spd']:.1f}")
    labels['bat'].config(text=f"{data['bat']:.2f}")
    labels['mode'].config(text=data['mode'])
    gps_lbl.config(text=f"GPS: {data['lat']:.5f}°N  {data['lon']:.5f}°E  |  Sats: {data['sats']}")
    root.after(500, update_ui)

update_ui()
root.mainloop()

چک‌لیست راه‌اندازی

مرحله وضعیت
Telemetry Radio به COM متصل است؟ ☐ Device Manager چک کنید
Baud Rate 57600 یا 115200 است؟ ☐ با SiK Radios 57600
Heartbeat دریافت شد؟ ☐ پیام در Terminal
ارتفاع و سرعت آپدیت می‌شوند؟ ☐

ArduPilot FC MAVLink UART SiK Radio 433MHz pymavlink Python Parse Tkinter UI داشبورد زنده پایپلاین Telemetry — ArduPilot → رادیو → Python → داشبورد

ویدئوهای آموزشی


منابع بیشتر

  • آپارات: MAVLink پایتون پهپاد فارسی
  • MAVLink Python: pymavlink Documentation
  • DroneKit Python Documentation
برچسب‌ها: Dashboard MAVLink pymavlink Python Telemetry آموزش گام‌به‌گام پایتون پهپاد
​
مطلب بعدی ساخت سیستم چتر نجات سرووی برای پهپاد Fixed-Wing: ایمنی در سقوط (فارسی) مطلب قبلی راهنمای پروتکل CRSF و ExpressLRS v3: تنظیم لینک RC با تأخیر ۱ms (فارسی)
</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

یاد بگیر، بساز، به اشتراک بگذار. جامعه‌ای برای سازندگان، مهندسان و علاقه‌مندان به فناوری در ایران.

دسته‌بندی‌ها

  • پروژه‌ها
  • ربات‌های پرنده (UAV)
  • آموزش
  • ربات‌های زمینی (UGV)
  • الکترونیک
  • پهپاد و مولتی‌روتور

پیوندها

  • خانه
  • درباره ما
  • تماس
  • فید RSS

آخرین مطالب

  • خلاصه دوره ArduPilot/iNAV و گام‌های بعدی (فارسی)
  • رادیو تله‌متری در مقابل LTE/4G برای کنترل از راه دور (فارسی)
  • Ground Station روی موبایل و تبلت — QGroundControl و Solex (فارسی)
  • راه‌اندازی Ground Station با Mission Planner (فارسی)
© 2026 Make for Iran – بسازیم برای ایران. تمامی حقوق محفوظ است.
ساخته شده با ❤️ برای سازندگان ایران  |  ورود