本帖最后由 蒙德·究史尼 于 2022-12-7 14:48 编辑
上一篇:https://bbs.cmnxt.com/forum.php?mod=viewthread&tid=65474
这一篇讲的是让EV3和电脑互相发送消息的方法。
用Python让EV3和电脑互相收发UDP数据包在刚才的两个实验中,我们使用了网络调试助手来让电脑与EV3收发UDP数据包。在实际项目中,因为我们需要做“自动化”的程序,而不是手动点击按钮,所以网络调试助手不能完全满足我们的需求。我们需要在电脑上和EV3上都使用Python语言。 在下面的这个示例中,EV3先等待接收UDP数据包。我们用电脑向EV3发送一个UDP数据包(消息),内容为“light”。EV3接收到数据包以后,对其内容进行判断,如果内容为“light”,则向这个数据包的来源回复一条消息,内容为连接到3号端口的颜色传感器的反射光强度。
关于Thonny和IDLE如果在电脑上和EV3上同时用Python编程的话,就需要使用两个Python编程软件(IDE)。虽然Thonny既支持调用电脑上的Python解释器又支持调用远程的EV3上的Python解释器,但是Thonny不支持多开,所以在电脑上运行Python代码的时候,我们只能用其它的编程软件(IDE)。我们以电脑上的Python自带的IDLE为例,如果你的电脑上没有IDLE的话,请百度搜索“如何安装IDLE”。
电脑端的程序打开电脑端的IDLE,我在电脑上使用的Python版本是3.7.0。输入以下代码: - #电脑端程序,使用python3运行
- #导入socket库
- import socket
- #创建套接字对象s1
- s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- #绑定端口8888
- s1.bind(('0.0.0.0', 8888))
- #向EV3发送消息“light”,使用UTF-8编码
- #在此程序中,EV3的IP地址是192.168.0.112,端口号是9999
- s1.sendto('light'.encode('UTF-8'),('192.168.0.112', 9999))
- print('消息已经发送,等待EV3回复!')
- #等待来自EV3的回复,这个过程是阻塞的(如果收不到回复,就会一直等下去)
- message, address=s1.recvfrom(1024)
- #输出接收到的来自EV3的回复内容,使用UTF-8解码
- print(message.decode('utf8'))
- #关闭套接字
- s1.close()
复制代码保存,先不着急运行。
EV3端的程序在Thonny里输入以下代码: - #EV3端的程序,使用python3或micropython都可以运行
- #导入socket库
- import socket
- #导入ev3dev2库的颜色传感器
- from ev3dev2.sensor.lego import ColorSensor
- #创建颜色传感器对象colorsensor01,端口是EV3的3号传感器端口
- colorsensor01 = ColorSensor(address='ev3-ports:in3')
- #创建套接字对象s1
- s1=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- #绑定端口9999
- s1.bind(('0.0.0.0', 9999))
- print('准备好接收消息了,等待消息中。')
- #等待来自电脑端的消息,这个过程是阻塞的(如果收不到消息的话就会一直等下去)
- message, address=s1.recvfrom(1024)
- #收到消息以后,对收到的消息用UTF-8解码,并判断其内容是否为“light”
- if(message.decode('UTF-8')=='light'):
- #如果是的话,就向电脑端回复,回复的内容是颜色传感器的反射光强度(光值),用UTF-8编码
- s1.sendto(('light='+str(colorsensor01.reflected_light_intensity)).encode('UTF-8'), address)
- print('已发送光值')
- else:
- print('未知的命令?')
- #关闭套接字
- s1.close()
复制代码保存,先不着急运行。
运行程序把一个EV3颜色传感器连接到EV3的3接口。确保你的电脑和EV3的网络是连接到同一个路由器的。 先在Thonny里让EV3运行程序,稍等几秒,EV3会输出“准备好接收消息了,等待消息中。”,此时EV3已经准备就绪,可以运行电脑端的程序了。 在电脑端的IDLE里,按F5键运行程序,可看到EV3回复的内容,颜色传感器测得的反射光强度为15。
现在,你已经可以用Python让电脑和EV3互相发送消息了!
|