在Anaconda环境运行DJI Tello无人机控制代码时遭遇'Did not receive state packet from Tello'错误寻求帮助
解决Tello无人机连接时"Did not receive state packet from Tello"错误
我之前帮不少开发者排查过这个问题,这个错误本质是电脑和Tello之间的状态监听链路没建立起来,大概率是网络、端口或者环境配置的问题。结合你的代码和错误日志,给你几个针对性的解决步骤:
1. 先确认网络连接的正确性
- 确保你的电脑只连接Tello的WiFi热点(默认名称是
Tello-XXXXXX),关掉其他网络(比如以太网、手机热点),避免系统路由混乱导致状态包传不回来。 - 打开命令提示符,执行
ping 192.168.10.1,如果出现丢包或者请求超时,说明WiFi连接不稳定:重启Tello无人机,或者重新连接一次WiFi试试。
2. 检查状态监听端口是否被占用
djitellopy默认用8889端口发指令,8890端口接收状态包。如果这两个端口被其他程序占用,就会收不到状态包:
- 在Windows上执行命令:
找到输出里的PID,打开任务管理器结束对应的进程。netstat -ano | findstr :8890 - 也可以尝试在初始化Tello时指定备用端口(如果默认端口确实被占用):
me = tello.Tello(state_port=8891) # 改用8891端口监听状态
3. 延长连接超时时间
有时候是状态包传输延迟,默认的超时时间不够。你可以修改connect()方法的超时参数:
me.connect(timeout=20) # 把超时时间从默认的10秒改成20秒
4. 确保Anaconda环境的依赖兼容
Anaconda环境偶尔会有依赖冲突,建议你:
- 创建一个干净的虚拟环境专门跑Tello代码:
conda create -n tello_env python=3.9 conda activate tello_env pip install djitellopy==2.4.0 # 这个版本稳定性很高,适配多数Python版本 - 避免用太新的Python版本(比如3.11+),目前djitellopy对新版本的兼容性还在完善中。
5. 硬件层面排查
- 确保Tello电量充足(低于20%会限制连接),重启无人机试试。
- 远离WiFi干扰源(比如路由器、蓝牙音箱),找个空旷的地方测试。
修改后的测试代码
你可以试试这个带异常处理和超时设置的版本:
from djitellopy import tello from time import sleep try: me = tello.Tello() print("Tello对象初始化完成,正在连接...") me.connect(timeout=20) battery = me.get_battery() print(f"无人机电池电量: {battery}%") if battery > 20: # 确保电量足够起飞 me.takeoff() sleep(1) me.send_rc_control(0, 20, 0, 0) sleep(2) me.send_rc_control(0, 0, 0, 0) sleep(1) me.land() else: print("电量不足,请充电后再尝试") except Exception as e: print(f"连接或控制出错: {str(e)}") if 'me' in locals(): me.end() # 确保断开连接
内容的提问来源于stack exchange,提问作者Mythili R6




