找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 4054|回复: 0

【EV3与物联网系列教程】15让EV3和电脑互相发送消息

[复制链接]
发表于 2022-12-7 14:45:30 | 显示全部楼层 |阅读模式
本帖最后由 蒙德·究史尼 于 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。输入以下代码:
  1. #电脑端程序,使用python3运行
  2. #导入socket库
  3. import socket
  4. #创建套接字对象s1
  5. s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  6. #绑定端口8888
  7. s1.bind(('0.0.0.0', 8888))
  8. #向EV3发送消息“light”,使用UTF-8编码
  9. #在此程序中,EV3的IP地址是192.168.0.112,端口号是9999
  10. s1.sendto('light'.encode('UTF-8'),('192.168.0.112', 9999))
  11. print('消息已经发送,等待EV3回复!')
  12. #等待来自EV3的回复,这个过程是阻塞的(如果收不到回复,就会一直等下去)
  13. message, address=s1.recvfrom(1024)
  14. #输出接收到的来自EV3的回复内容,使用UTF-8解码
  15. print(message.decode('utf8'))
  16. #关闭套接字
  17. s1.close()
复制代码
保存,先不着急运行。
1.png

EV3端的程序
在Thonny里输入以下代码:
  1. #EV3端的程序,使用python3或micropython都可以运行
  2. #导入socket库
  3. import socket
  4. #导入ev3dev2库的颜色传感器
  5. from ev3dev2.sensor.lego import ColorSensor
  6. #创建颜色传感器对象colorsensor01,端口是EV3的3号传感器端口
  7. colorsensor01 = ColorSensor(address='ev3-ports:in3')
  8. #创建套接字对象s1
  9. s1=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  10. #绑定端口9999
  11. s1.bind(('0.0.0.0', 9999))
  12. print('准备好接收消息了,等待消息中。')
  13. #等待来自电脑端的消息,这个过程是阻塞的(如果收不到消息的话就会一直等下去)
  14. message, address=s1.recvfrom(1024)
  15. #收到消息以后,对收到的消息用UTF-8解码,并判断其内容是否为“light”
  16. if(message.decode('UTF-8')=='light'):
  17.     #如果是的话,就向电脑端回复,回复的内容是颜色传感器的反射光强度(光值),用UTF-8编码
  18.     s1.sendto(('light='+str(colorsensor01.reflected_light_intensity)).encode('UTF-8'), address)
  19.     print('已发送光值')
  20. else:
  21.     print('未知的命令?')
  22. #关闭套接字
  23. s1.close()
复制代码
保存,先不着急运行。
2.png

运行程序
把一个EV3颜色传感器连接到EV3的3接口。确保你的电脑和EV3的网络是连接到同一个路由器的。
先在Thonny里让EV3运行程序,稍等几秒,EV3会输出“准备好接收消息了,等待消息中。”,此时EV3已经准备就绪,可以运行电脑端的程序了。
在电脑端的IDLE里,按F5键运行程序,可看到EV3回复的内容,颜色传感器测得的反射光强度为15。
3.png
现在,你已经可以用Python让电脑和EV3互相发送消息了!

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-11-21 22:43 , Processed in 0.111347 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表