Python-读取串口接收到的数据

一、需求描述

现有一单片机在通过串口向外发送数据,需要使用Python编写程序进行数据的接收,并根据自定义的协议进行报文的解析。

二、自定义协议

因为单片机在通过串口发送数据时,是以字节为单位进行发送,对于接收方来说,收到的是一个字节一个字节的数据,这就引出了一个问题:接收方怎么知道当前收到的字节数据在原数据中属于哪一部分?

打一个通俗的比方。现在,我们在商场里买了一张大床,但是,因为家门太窄,需要将床先拆成一块块木板,等搬到屋内以后,再进行组装还原。
此时,“床”是需要通过串口发送的数据,而“家门”连接着双方串口的发送端和接收端,“一块块木板搬进房中”是按字节发送数据的过程,而“组装还原”则是接收端对收到的数据进行解析,提取出需要的数据或将数据恢复原样。

为了在组装时能够顺利,需要清楚每一块木板所属的位置,因此,声明了自定义的协议。关于自定义协议,可参考文末的链接进行学习理解。

三、Python读取串口的源码

import serial

# 进行串口内容的读取(一次可以读到一个字节的数据)
def recv_data(ser):
    while True:
        data = ser.read()
        # 没读到就接着尝试读,读到了就退出循环并return读取到的内容
        if data =='':
            continue
        else:
            break
    return data
    
# 主函数
if __name__ == '__main__':
	ser = serial.Serial('COM1',115200,timeout=0.5) # 设置COM口、波特率以及超时参数
	if ser.isOpen():
		print('串口打开成功')
	else:
		print('串口打开失败')
	while True:
		data = recv_data(ser) # 进行串口数据的读取
		
		# 如果读到了数据,就进行处理
		if data !='': 
			"""
			这一块内容是根据自定义协议的内容对本次读取的字节数据进行解析
			具体包括包头与包尾的判断,数据帧的解析等
			可参考文末的链接进行学习理解,并使用Python进行处理过程的仿写
			"""

四、参考链接

本节内容中关于报文解析的部分可参考以下链接进行学习与理解:
STM32入门教程-2023版 细致讲解 中文字幕 [9-4] USART串口数据包
STM32入门教程-2023版 细致讲解 中文字幕 [9-5] 串口收发HEX数据包&串口收发文本数据包

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值