Python中如何将数据以16进制格式发送到树莓派

#实例化串口
import serial;
ser = serial.Serial(’/dev/ttyUSB0’, 9600, timeout = 0.5);

#需要发送的数据
strnum = 7e 00 08 01 00 02 01 ab cd

#这里该如何将 strnum 转换为 16 进制
strSerial = strnum
ser.write(strSerial)
Python中如何将数据以16进制格式发送到树莓派

5 回复

找到方法了:

import binascii

def order_list():
a = ‘aa0902630000bb’
a_list = []
for i in a.split():
a_list.append(binascii.a2b_hex(i))
return a_list

ser = serial.Serial(’/dev/ttyUSB0’, 9600)
ser.writelines(order_list())

作者:知乎用户
链接: https://www.zhihu.com/question/51733053/answer/147899163


import serial
import time

# 配置串口参数
ser = serial.Serial(
    port='/dev/ttyUSB0',  # 根据实际连接修改,可能是 /dev/ttyAMA0 或 /dev/ttyS0
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)

def send_hex_data(hex_string):
    """
    将16进制字符串转换为字节并发送
    
    Args:
        hex_string: 16进制字符串,如 "A1B2C3" 或 "0xA1 0xB2 0xC3"
    """
    # 清理字符串:移除空格、0x前缀、换行等
    hex_string = hex_string.strip().replace(' ', '').replace('0x', '').replace('\n', '').replace('\r', '')
    
    # 验证是否为有效16进制
    if not all(c in '0123456789ABCDEFabcdef' for c in hex_string):
        raise ValueError("无效的16进制字符串")
    
    # 确保长度为偶数
    if len(hex_string) % 2 != 0:
        hex_string = '0' + hex_string
    
    # 转换为字节
    try:
        data_bytes = bytes.fromhex(hex_string)
    except ValueError as e:
        raise ValueError(f"16进制转换失败: {e}")
    
    # 发送数据
    ser.write(data_bytes)
    print(f"已发送 {len(data_bytes)} 字节: {data_bytes.hex().upper()}")
    
    # 可选:等待并读取响应
    time.sleep(0.1)
    if ser.in_waiting:
        response = ser.read(ser.in_waiting)
        print(f"收到响应: {response.hex().upper()}")

# 使用示例
if __name__ == "__main__":
    try:
        # 示例1:发送单个16进制值
        send_hex_data("A1")
        
        # 示例2:发送多个16进制值(无空格)
        send_hex_data("A1B2C3")
        
        # 示例3:发送带0x前缀和空格格式的数据
        send_hex_data("0xA1 0xB2 0xC3")
        
        # 示例4:发送ASCII字符的16进制表示
        # "Hello" 的16进制是 48 65 6C 6C 6F
        send_hex_data("48656C6C6F")
        
    except Exception as e:
        print(f"发送失败: {e}")
    finally:
        ser.close()

关键点说明:

  1. 串口配置:使用pyserial库,根据树莓派实际串口设备修改port参数
  2. 数据清洗:函数会自动处理各种格式(带空格、0x前缀等)
  3. 字节转换bytes.fromhex()是核心转换方法
  4. 错误处理:验证16进制格式的有效性

依赖安装:

pip install pyserial

树莓派端准备:

  • 启用串口:sudo raspi-config → Interface Options → Serial Port
  • 关闭串口控制台:选择"No"
  • 重启生效

测试建议: 先用USB转串口模块在电脑上测试,再连树莓派。

总结:核心是bytes.fromhex()转换和串口写入。

题主在用树莓派开发什么?

获取二维码扫描器数据

回到顶部