Python读取串口数据的实现方法
1.编程流程
串口数据流程为,
1.实例化串口连接,
2.初始化设置连接属性,
3.连接串口硬件,
4.读取传输缓存区的串口数据。
使用Python的serial库进行读写串口数据。
pip3 install serial
技巧:重复运行上述pip指令,可输出当前serial依赖库的存放位置。
参考教程:https://www.jb51.net/article/170801.htm.
2.应用serial库
分析1中功能流程,进行如下汇总:
- 串口连接配置1:实例化串口连接
- 串口连接配置2:配置串口参数,并连接串口
- 串口连接配置3:读取串口数据
- 加上功能:核验接收数据
3.编码设计
将上面的功能,进行如下进行设计:
- 串口参数配置设为变量,初始化串口连接时进行调用
- 读取串口数据,写入文件
- 判断:串口数据数据格式,每包数据长度
4.编程实现
编写函数,实现读取串口操作
def msg_list(): # 新建一个列表,返回该串口数据,做后续数据处理使用 msg_list = list() # 准备一个文件,保存数据 r = r'E:\py\0.txt' write_file = open(r, 'wb') # 配置串口名称、比特率、超时时间 port = 'COM3' bps = 1152000 timex = 1 # 连接串口 ser = serial.Serial(port, bps, timeout=timex) print(ser) # 等下时间,去启动串口发送程序。不然,程序会直接进入判断串口数据直接结束 time.sleep(3) # 进入读写过程 while True: # 判断当前写入区有没有串口数据 if ser.in_waiting: # 读数据 msg = ser.readall() # 写入数据到文件里 write_file.write(msg) # 将数据转成16进制数,存入列表中 msg_list = list(msg.hex) else: # 当串口写入缓存区没数据,关闭串口和文件,结束读写操作 ser.close() write_file.close() break # 保存的串口数据列表做这次函数的返回值 return msg_list
有了一组串口数据,后续就可以自定义发挥了。
if __name__ == '__main__': a = msg_list() # 由于我的发串口程序是发16进制的固定长度为160的数据包,所以进行按固定长度分割列表。列表里的索引就为每一个数据包的次序。 # 补充,串口配置默认是按每8bit位读取(可配置),所以在数据里,一包总长度为160 * 2 = 320 a1 = [a[i:i+162*2]] for i in range(0, len(items), 162*2) # 判断下,每帧串口数据头是否正确 # 由于缓存区存在内存大小限制。预估在结尾容易发生丢包,所以加个长度判断 for i in range(0, len(a1)): if a1[i][0:4] = ['a', 'b', 'c', 'd'] and len(a[i]) == 160*2: pass else: # 输出第一次不正确的上下行数据 print('到了', i) print(a1[i-1]) print(a1[i]) break
到此这篇关于Python读取串口数据的实现方法的文章就介绍到这了,更多相关Python读取串口数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
这篇文章主要介绍了使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-05-05浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
这篇文章主要介绍了Python中的可迭代对象、迭代器、For循环工作机制、生成器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-03-03
最新评论