使用 Python 接收串口中的 16 进制数据

在现代计算机科学中,数据通信是非常重要的一部分。虽然许多通信方式可用,但串口通信因其简洁和高效而被广泛使用。本文将介绍如何使用 Python 接收串口中的 16 进制数据,并提供相关代码示例、ER 图和序列图来帮助大家更好地理解。

什么是串口通信?

串口通信(Serial Communication)是计算机与外部设备(如传感器、微控制器等)之间进行数据传输的一种常见方式。它通过一条数据线将数据逐位发送,适合远距离传输。

16 进制数据

16 进制(Hexadecimal)是以 16 为基数的数字系统,其中包括数字 0-9 和字母 A-F。计算机内部通常使用二进制表示数据,但在调试和数据传输过程中,使用 16 进制表示数据更加直观和简洁。

Python 串口通信库

在 Python 中,我们可以使用 pyserial 库来进行串口通信。这个库非常简单易用,提供了完整的功能以支持串口的打开、读取、写入等操作。

安装 pyserial

我们可以通过 pip 安装 pyserial 库:

pip install pyserial

Python 示例代码

接下来,我们将展示一个简单的 Python 脚本,接收串口中的 16 进制数据并打印出来。

import serial
import binascii

def read_serial_data(port, baudrate):
    # 设置串口
    ser = serial.Serial(port, baudrate, timeout=1)
    
    print(f"Listening on {port}...")
    
    while True:
        if ser.in_waiting > 0:  # 如果有数据可读
            data = ser.read(ser.in_waiting)  # 读取所有可用数据
            hex_data = binascii.hexlify(data).upper()  # 转换为16进制
            print(f"Received Data: {hex_data.decode()}")  # 打印数据

在这个示例中,我们定义了一个 read_serial_data 函数,该函数接收串口名和波特率作为参数。在循环中,我们检查是否有数据可读,如果有,就读取数据并将其转换为 16 进制格式进行打印。

示例调用

if __name__ == "__main__":
    port = "COM3"  # 替换为你的串口
    baudrate = 9600  # 替换为你的波特率
    read_serial_data(port, baudrate)

数据流向图(ER 图)

以下是串口通信中数据流向的 ER 图,表示了数据的来源和去向。

erDiagram
    SERIAL_PORT {
        string port_name
        int baud_rate
    }
    DEVICE {
        string device_name
        string data
    }
    SERIAL_PORT ||--o{ DEVICE : Connects

在这个 ER 图中,SERIAL_PORT 表示串口,而 DEVICE 表示连接的设备。二者通过 Connects 关系进行关联。

序列图

在数据接收的过程中,串口与设备之间的交互可以用序列图表示:

sequenceDiagram
    participant PC as "Computer"
    participant Serial as "Serial Port"
    participant Device as "Device"
    
    PC->>Serial: Open Port
    Serial-->>PC: Port Opened
    PC->>Device: Send Data
    Device-->>PC: Data Ready
    PC->>Serial: Read Data
    Serial-->>PC: Data Sent

在这个序列图中,计算机负责打开串口,设备发送数据到计算机,计算机再通过串口读取数据。

结论

本文介绍了使用 Python 接收串口中的 16 进制数据的基本原理和方法。借助 pyserial 库,我们能够轻松地创建与设备的串口连接,并读取其中的数据。通过 ER 图和序列图的帮助,我们可以更加清晰地理解数据流动的过程。

希望这篇文章能对你在串口通信和数据处理方面有所帮助。在后续的项目中,你可以根据需要进一步扩展此代码,通过数据处理和分析实现更复杂的功能。串口通信的应用广泛,欢迎继续探索!