如何使用Python开发串口通讯上位机(一)
用Python开发串口通讯型上位机,其实并非最优解,本系列更新只为个人学习与总结。如果有C语言底子,嵌入式层面的上位机开发,C++ Builder,C#才是更加好用的利器。
什么是上位机
从事过嵌入式软件开发或者工控机开发的,对上位机应该都不陌生。简单来说,上位机指的是能够发送指令的计算机或者控制器,通过各类通讯获取下位机信息,控制下位机的行为等。
最典型的例子,电脑端的串口助手(上位机),通过RS232-DB9或者USB转串口,与单片机(下位机)的串口通讯,获取单片机系统的状态等。
图片来自百度百科
此系列文章,与大家讲讲如何使用Python进行串口通讯型上位机的开发。此为第一篇。
准备工作
1. 串口调试助手,用于验证通讯,此处推荐使用Uartassistant,百度一下即可轻松找到下载方法
2. Virtual Serial Port:虚拟串口,可以在没有实际串口线连接的情况,在电脑端虚拟出对接的两个串口,方便我们在没有下位机或者未就绪的情况下,验证数据的收发,下图为虚拟出COM1与COM2两个串口,并内部互联,打开两个1中调试助手,分别配置为COM1和COM2,波特率相同,在COM1发送“Hello world”,COM2即可收到
3. Pyqt5:用于开发界面,详见前面几期内容
4. PyCharm:Python IDE
5. Pyserial库安装-pip install pyserial
Pyserial 初步使用
Pyserial API的使用参见官网:
https://pythonhosted.org/pyserial/pyserial_api.html。
初始化参数:
name:设备名字
port:读或者写端口
baudrate:波特率
bytesize:字节大小
parity:校验位
stopbits:停止位
timeout:读超时设置
writeTimeout:写超时
xonxoff:软件流控
rtscts:硬件流控
dsrdtr:硬件流控
interCharTimeout:字符间隔超时
常用接口
isOpen():查看端口是否被打开。
open() :打开端口‘。
close():关闭端口。
read():从端口读字节数据。默认1个字节。
read_all():从端口接收全部数据。
write('hello'):向端口写数据。
readline():读一行数据。
readlines():读多行数据。
in_waiting():返回接收缓存中的字节数。
flush():等待所有数据写出。
flushInput():丢弃接收缓存中的所有数据。
flushOutput():终止当前写操作,并丢弃发送缓存中的数据。
简易验证代码:
1. 使用虚拟串口,配置COM1与COM2
2. 打开串口助手,配置为COM2,9600后打开
3. Pycharm或者jupyter notebook输入如下代码并运行
运行截图如下:
1. Python打开串口后发送“Python serial port demo!”
2. 另外一端的COM2,手动输入“Yes”,Python程序接收到后打印出来
总结
本篇主要介绍了什么是上位机以及Python开发串口通讯型上位机所需的准备工作,并简单展示了如何进行串口收发。
一个好的上位机还需要更多功能,将会在接下来几期逐步深入与完善,敬请期待哦。
作者:跨界程序员Vincent