#!/usr/bin/env python3 # -*- coding:utf-8 -*- import RPi.GPIO as GPIO import serial import time #EN_485 = 4 # 预期的数据包长度,根据情况进行修改 EXPECTED_LENGTH = 6 # 初始化GPIO #GPIO.setmode(GPIO.BCM) #GPIO.setup(EN_485, GPIO.OUT) #GPIO.output(EN_485, GPIO.LOW) # 接收模式 # 初始化串口 ser = serial.Serial( port="/dev/ttyS0", baudrate=115200, timeout=0.1, # 缩短超时时间,提高响应速度 ) # 用于缓存不完整的数据 buffer = b'' try: while True: # 读取可用数据 if ser.in_waiting > 0: data = ser.read(ser.in_waiting) buffer += data # 检查缓存中的数据是否达到预期长度 while len(buffer) >= EXPECTED_LENGTH: # 提取完整的一帧数据 frame = buffer[:EXPECTED_LENGTH] # 剩余数据保留在缓存中 buffer = buffer[EXPECTED_LENGTH:] # 打印完整数据(十六进制格式) print("data:", ' '.join(f'{b:02X}' for b in frame)) # 短暂延时,降低CPU占用 time.sleep(0.01) except KeyboardInterrupt: print(":stop") finally: ser.close() GPIO.cleanup()