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()
关键点说明:
- 串口配置:使用
pyserial库,根据树莓派实际串口设备修改port参数 - 数据清洗:函数会自动处理各种格式(带空格、0x前缀等)
- 字节转换:
bytes.fromhex()是核心转换方法 - 错误处理:验证16进制格式的有效性
依赖安装:
pip install pyserial
树莓派端准备:
- 启用串口:
sudo raspi-config→ Interface Options → Serial Port - 关闭串口控制台:选择"No"
- 重启生效
测试建议: 先用USB转串口模块在电脑上测试,再连树莓派。
总结:核心是bytes.fromhex()转换和串口写入。
题主在用树莓派开发什么?


