使用easyGUI模拟操控界面控制Tello EDU

说到easyGUI这个模块,大家应该都不陌生了,模块名中有个“easy”,是的,这代表它用起来很简单;这个模块就是一个能够轻易创建用户界面的工具,所以本篇文章我们将实现使用用户界面来对Tello EDU进行控制;效果大体是怎样的呢?在使用移动端Tello APP操控的时候,会有如下的操控界面:

很标准的一个无人机操控界面,一开始我拿到Tello EDU这个小东西的时候就是使用这款APP进行的操控体验,所以我们会使用python的easyGUI模块来“模拟”这样一个功能,如果你想问“能不能实现完全一样的界面显示效果?”,那我的回答是:“no way!根本不可能”,因为easyGUI这个模块不仅在使用起来“easy”,而且使用它来创建的用户界面也非常的“easy”。

如果想要实现一个效果比较好的用户界面,我建议你去学学Tkinter,同样作为创建用户界面的模块,这个可就复杂的多了,而且查看easyGUI的“.__ init __”代码可以发现,easyGUI其实就是使用Tkinter“延伸”出来的。

回到正题,如果我们想要通过easyGUI的用户界面来控制Tello EDU,那么首先我们不能使用上篇文章示例程序中的——向控制台里键入指令来控制——的方法了,我们需要在程序中进行控制,实现这个效果很简单,我们直接在上篇文章的代码中做些修改就可以了,以下是修改之后的代码,区别我会在注释里标注,(上半部分代码没有任何改变)当然更建议对比上篇文章的代码:

#
# Tello EDU Auto Control Demo
#
# Hopes_li
#
#2020/4/30import threading  #导入线程模块
import socket  #导入套接字模块
import sys  #导入系统模块(其实没用到)
import time  #导入时间模块#设置主机及端口号
host = ''
port = 8889
locaddr = (host,port)# 创建UDP的socket通信
#获取Udp/Ip套接字(socket就是套接字)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#第一个参数为socket家族:有AF_UNIX基于文件类型,及AF_INET基于网络类型
#第二个参数为socket_type:
#流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM(datagram)、原始套接字SOCK_RAWtello_address = ('192.168.10.1', 8889)  #设置tello主机及端口号sock.bind(locaddr)  #绑定(主机,端口号)到套接字#定义数据接收函数(从Tello EDU返回的信息)
def recv():count = 0while True:try:#接收UDP数据;data为接收的数据,server为客户地址,1518为每次接收字节数data, server = sock.recvfrom(1518)  #输出从socket接收的数据,并以编码为"utf-8";print(data.decode(encoding="utf-8"))except Exception:print ('\nExit . . .\n')break#启动多线程
#通过Thread类进行对象实例化为recvThread;
recvThread = threading.Thread(target=recv)  recvThread.start()  #启动多线程#*****以上的代码都是没有任何区别的,我们只需要把下面的循环键入指令的代码注释掉*****
'''
while True:try: #使用异常msg = input("")  #输入指令if not msg:break  #如果没有指令则退出if 'end' in msg:print ('...')sock.close()  #关闭套接字break# Send datamsg = msg.encode(encoding="utf-8")  #对要发送的信息进行编码sock.sendto(msg, tello_address)  #发送UDP数据except KeyboardInterrupt:print ('\n . . .\n')sock.close()  #关闭套接字break
'''#*****然后输入自动运行的代码*****
# Send data
#显而易见,sock.sendto()就是用来发送给无人机指令的方法
sock.sendto("command".encode(encoding="utf-8"), tello_address)
#这里一定注意,输入的指令为字符串类型,一定加双引号
#而且需要对字符串进行转码为“utf-8”time.sleep(1)  #这里需要使用time模块进行延时,tello的指令需要在上一条命令完成之后再发送
sock.sendto("takeoff".encode(encoding="utf-8"), tello_address)time.sleep(5)    #起飞之后的延时是非常重要的,最好不要小于5秒
sock.sendto("left 90".encode(encoding="utf-8"), tello_address)time.sleep(3)
sock.sendto("forward 400".encode(encoding="utf-8"), tello_address)time.sleep(6)
sock.sendto("cw 180".encode(encoding="utf-8"), tello_address)time.sleep(3)
sock.sendto("forward 400".encode(encoding="utf-8"), tello_address)time.sleep(6)
sock.sendto("land".encode(encoding="utf-8"), tello_address)

以上的代码就可以实现直接运行程序后Tello EDU的自动运行;当然,这不是我们想要的,我们的目的是使用用户界面来点击控制Tello EDU,那么接下来,我可以告诉你,其实真的很“easy”:

#首先我们需要导入easyGUI模块
import easygui
#然后直接使用easygui模块的buttonbox()方法
input = easygui.buttonbox(msg="click to control",title="easygui control Demo",choices=("command","takeoff","land"))

我们可以按住“ctrl / command” 然后点击buttonbox方法,查询这个方法的使用,如下:

def buttonbox(msg="",title=" ",choices=("Button[1]", "Button[2]", "Button[3]"),image=None,images=None,default_choice=None,cancel_choice=None,callback=None,run=True):

我们大体可以了解在buttonbox内的第一个参数是用来在界面窗口显示提示语句的,第二个参数可以设置窗口标题,第三个才是我们需要的几个button,也就是按键,当然在choices内只示例了三个button,其实在尝试的过程中发现是完全可以向里填入足够的button的;接下来需要做的就是把我们需要控制Tello EDU的指令按照自己的逻辑写入choices中,运行后的界面如下:

并且点击相应的button都会在控制台打印相应的字符输出,这就代表我们点击的每个button,都会把相应的字符串储存于变量“ipnut”中,这样一来就非常容易了,同样直接上easyGUI控制的代码(同样只是修改的最后几行):

#
# Tello EDU easyGUI Conntrol Demo
#
# Hopes_li
#
#2020/4/29import threading  #导入线程模块
import socket  #导入套接字模块
import sys  #导入系统模块(其实没用到)
import time  #导入时间模块
import easygui#设置主机及端口号
host = ''
port = 8889
locaddr = (host,port)# 创建UDP的socket通信
#获取Udp/Ip套接字(socket就是套接字)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#第一个参数为socket家族:有AF_UNIX基于文件类型,及AF_INET基于网络类型
#第二个参数为socket_type:流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM(datagram)、原始套接字SOCK_RAWtello_address = ('192.168.10.1', 8889)  #设置tello主机及端口号sock.bind(locaddr)  #绑定(主机,端口号)到套接字#定义数据接收函数(从Tello EDU返回的信息)
def recv():count = 0while True:try:data, server = sock.recvfrom(1518)  #接收UDP数据;data为接收的数据,server为客户地址,1518为每次接收字节数print(data.decode(encoding="utf-8")) #输出从socket接收的数据,并以编码为"utf-8";except Exception:print ('\nExit . . .\n')breakprint ('\r\n\r\nTello EDU Demo.\r\n')print ('end -- 输入可退出.\r\n')#启动多线程
recvThread = threading.Thread(target=recv)  #通过Thread类进行对象实例化为recvThread;
recvThread.start()  #启动多线程#发送button内指令
while True:
# Send data#设置easyGUI界面,并将指令设置为button,将点击后的字符串赋值给变量“send”send = easygui.buttonbox(msg="click to control",title="Tello control Demo",choices=("command","takeoff","left 20","right 20","land"))print(send)   #打印输出“send”sock.sendto(send.encode(encoding="utf-8"), tello_address) #发送send指令给Tello EDU

以上的代码就是可以实现使用自制easyGUI用户界面来控制Tello EDU的代码了,有些人可能觉得这个界面的button排列是在是太丑了,能不能改变每个button的位置,让它更明确一些,很遗憾的告诉你,是不可以的(只是我没找到改变位置的方法),但是这起码是我们走进用户界面操控的第一步了,不是吗?接下来,let`s check it ! 尝试一下吧。

大疆睿炽Tello EDU无人机python操控之三——使用easyGUI模拟操控界面控制Tello EDU相关推荐

  1. 大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机

    使用Tello-Python-master示例程序控制Tello EDU 上篇文章我们应该可以掌握使用socket调试工具操控Tello EDU无人机,那么本篇文章我们将使用"正宗" ...

  2. python控制大疆无人机_大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机...

    使用Tello-Python-master示例程序控制Tello EDU 上篇文章我们应该可以掌握使用socket调试工具操控Tello EDU无人机,那么本篇文章我们将使用"正宗" ...

  3. 大疆睿炽Tello EDU无人机python操控之一——使用socket调试工具控制Tello EDU无人机

    使用socket调试工具控制Tello EDU无人机 最近工作一直在搞大疆之前推出的一款用于编程教育的无人机–Tello EDU,就是下图的这个小东西: 我们可能都知道在Tello EDU推出之前还有 ...

  4. 5G关键厂商推动2019年推出下一代网络;大疆发布首条企业级无人机产品Matrice 200│IoT黑板报...

    健康品牌"Withings"将改名为诺基亚 @雷锋网 据外媒报道,预计今年夏天,诺基亚收购的智能健康产品线"Withings"将正式改名归属到"诺基亚 ...

  5. 产品创新案例分析|大疆如何从初创到无人机帝国的进阶之路

    与智能手机.个人电脑和互联网的发展类似,无人机也迅速从一种DIY爱好发展成为风靡全球的主流技术.如今的无人机产品一代比一代更小巧.安全.便宜,其飞行功能和拍摄质量也在快速地提高.而在无人机这个规模达百 ...

  6. 大疆地理围栏系统预防无人机闯入机场

    全球最大的无人机制造商大疆(DJI)发表了「在线地理空间环境」( Geospatial Environment Online,GEO)2.0版,主要改善了欧洲市场的地理围栏(Geofencing)技术 ...

  7. 大疆aeb连拍_给无人机新手的3个航拍技巧,入门机也能拍大片!

    现在无人机越来越便宜了,以大疆的晓为例,作为大疆无人机中的最基础版,只需要3000多元.不过很多人买了无人机之后,发现拍出的照片似乎并没有那么理想? 是机器不够高级吗?或许是你没用好!这里我介绍了三个 ...

  8. 一文带你读懂大疆精灵4多光谱版无人机

    DJI 大疆行业应用正式发布了精灵 4 多光谱版无人机.作为具备多光谱成像系统的航测一体机,精灵 4 多光谱版可采集高精度多光谱数据,广泛应用于农业.科研.环保等多个领域. 精灵 4 多光谱版一经问世 ...

  9. 大疆经纬M600 Pro 行业无人机应用特点

    大疆经纬M600 Pro搭载A3 Pro飞行控制系统,配备三套IMU和GNSS模块,配合软件解析余度导航系统,可靠性更高: 大疆经纬M600 Pro开箱后,只要简单的安装,几分钟准备即可起飞.脚架采用 ...

最新文章

  1. etcd 在超大规模数据场景下的性能优化
  2. XamarinEssentials教程设置首选项Preferences的值
  3. python的继承模式_Python之继承--增加新功能,不更改以前的代码
  4. Axure RP 7.0团队项目使用笔记
  5. Windows下安装OpenSSL及其使用
  6. startlogging中设置setstdout=false来禁用这个功能。_Windows 10禁用USB选择性暂停设置,峰哥教你解决USB设备失灵问题...
  7. int类型数字特别大
  8. Register Delphi ,Delphi 不能运行
  9. 助成招聘网站——个人项目06
  10. java程序编译命令_使用 java 命令编译运行 java 程序
  11. VB.net小技巧系列目录
  12. omnet++ tictoc1 实例分析
  13. Python新手引导 第三篇-Python基础和字符编码
  14. fast-lio 卡尔曼滤波
  15. 微信小游戏开发实战教程3-绘制网格
  16. 山东科技大学计算机科学与技术学硕,2021年山东科技大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  17. NGINX工作原理解析
  18. NOIP2004P4 火星人 题解
  19. python输入国家显示首都名_Java各国首都列表
  20. iOS 开发者账号下100台关联设备UDID如何删除替换

热门文章

  1. BeanUtils开发包的使用
  2. spring boot 打包部署发布
  3. 华为面向5G的室内覆盖数字化关键技术要素
  4. 开启沉浸式体验 艺画开天《灵笼》积极探索文化与国漫发展
  5. 周杰伦 jay《最长的电影》mp3 下载/试听/MV/在线播放
  6. 工业机器人cloos_地震!埃斯顿全资收购德国百年焊接机器人巨头CLOOS!
  7. 11. 计算排列的编号【组合数学】
  8. 瓶子机器人diy制作大全_创意手工——废弃瓶子制作蓝色机器人,需要技巧
  9. 论文阅读| 《An Integrated Pipeline Architecture for Modeling Urban Land Use, Travel Demand, and Traffic 》
  10. Python爬虫实战(三):定时爬取数据存入SqlServer