用Python开发串口通讯型上位机,其实并非最优解,本系列更新只为个人学习与总结。如果有C语言底子,嵌入式层面的上位机开发,C++ Builder,C#才是更加好用的利器。1

什么是上位机

从事过嵌入式软件开发或者工控机开发的,对上位机应该都不陌生。简单来说,上位机指的是能够发送指令的计算机或者控制器,通过各类通讯获取下位机信息,控制下位机的行为等。

最典型的例子,电脑端的串口助手(上位机),通过RS232-DB9或者USB转串口,与单片机(下位机)的串口通讯,获取单片机系统的状态等。

图片来自百度百科

此系列文章,与大家讲讲如何使用Python进行串口通讯型上位机的开发。此为第一篇。2

准备工作

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

3

Pyserial 初步使用

Pyserial API的使用参见官网:


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程序接收到后打印出来

4