#!/usr/bin/env python """Identify which Tello you have — standard vs EDU / RoboMaster TT. This settles the networking question: only Tello EDU / RoboMaster TT support the `ap` command (station mode), which would let the drone JOIN the EEG cap's WiFi so one Mac can talk to both. A standard Tello can only be its own access point, so you'd need a second network interface (USB WiFi) or a relay box. Run it with your Mac connected to the drone's WiFi (TELLO-XXXXXX). It only QUERIES — it never arms the motors and never sends `ap`, so it cannot change your drone's config. python identify_tello.py """ from __future__ import annotations import socket import sys TELLO = ("192.168.10.1", 8889) LOCAL = ("", 9000) def ask(sock, cmd, timeout=3.0): sock.settimeout(timeout) try: sock.sendto(cmd.encode(), TELLO) return sock.recvfrom(1024)[0].decode(errors="replace").strip() except socket.timeout: return None except OSError as e: return f"" def main(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.bind(LOCAL) except OSError as e: print(f"bind 9000 失败: {e}"); return print("→ 进入 SDK 模式 …") if ask(s, "command") is None: print("✗ 没有响应。检查:Mac 是否连到 TELLO-XXXXXX 这个 WiFi?无人机开机了吗?") return sdk = ask(s, "sdk?") sn = ask(s, "sn?") ver = ask(s, "wifi?") bat = ask(s, "battery?") print(f"\n SDK 版本 : {sdk or '无响应(旧固件 → 标准版 Tello)'}") print(f" 序列号 : {sn or '无响应'}") print(f" WiFi SNR : {ver or '无响应'}") print(f" 电量 : {bat or '无响应'}%") print("\n" + "=" * 58) if sdk is None or "ok" not in str(sdk).lower() and not str(sdk).strip().isdigit(): print(" 判定: 很可能是【标准版 Tello】(不响应 sdk?)") print(" → 不支持 ap 站点模式 ⇒ 双 WiFi 需走 USB 网卡 或 树莓派中继") elif str(sdk).strip() == "30": print(" 判定: 【RoboMaster TT】(SDK 3.0) — 支持 ap 站点模式 ✅") elif str(sdk).strip() == "20": print(" 判定: SDK 2.0 —— 【Tello EDU】或已升级固件的标准版") print(" → EDU 支持 `ap`。确认方法:机身是否印 'TELLO EDU' / 是否黑色 / 是否随附任务卡") else: print(f" 判定: 未知 SDK 响应 {sdk!r}") print("=" * 58) print("\n注:本脚本只做查询,未发送任何飞行或 ap 配置指令。") s.close() if __name__ == "__main__": main()