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

本文介绍了如何使用Python接收单片机通过串口发送的字节数据,特别关注自定义协议的应用,包括数据拆分与组装,以及如何解析报文。附有STM32教程链接供进一步学习.

一、需求描述

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

二、自定义协议

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

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

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

三、Python读取串口的源码

import serial

# 进行串口内容的读取(一次可以读到一个字节的数据)
def recv_data(ser):
    while True
使用Python的Modbus RTU协议读取传感器数据可按以下步骤进行: ### 安装依赖库 需要先安装python依赖包`pyserial`和`pymodbus_tk`,在cmd里直接运行以下命令: ```bash pip install pyserial pip install pymodbus_tk ``` ### 确认温度传感器寄存器地址 明确要读取传感器的寄存器地址,这是获取数据的关键信息。 ### 实现Modbus RTU客户端 以下是一个使用`pymodbus_tk`库实现的示例代码: ```python import serial import modbus_tk import modbus_tk.defines as cst from modbus_tk import modbus_rtu # 配置串口 master = modbus_rtu.RtuMaster( serial.Serial(port='COM1', baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0) ) master.set_timeout(5.0) master.set_verbose(True) try: # 读取保持寄存器数据 response = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 10) # 从地址0开始读取10个寄存器的数据 print("读取数据:", response) except modbus_tk.modbus.ModbusError as exc: print(f"Modbus error: {exc}") ``` ### 数据整合展示到PRTG监控系统 - **串口服务器配置**: - **服务端配置**:对服务端进行相应的参数设置,确保其能正常接收和处理数据- **客户端配置**:对客户端进行配置,使其能与服务端和传感器正常通信。 - **代码部分**:将读取到的数据进行处理后,按照PRTG监控系统的要求进行数据传输和展示。 此外,也可使用`minimalmodbus`库实现MODBUS RTU协议的基本数据读写操作,根据具体应用场景,可能需要进一步探索更高级的功能和错误处理机制,以确保通信的稳定性和可靠性 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值