python串口发送多字节数据_Python串口测试:bytes数据
在执行串口测试任务时,PC端向下位机发送串口指令有两种常用的格式:
ASCII字符串,比如:AT+CFUN=1
整数数组,比如:[0x59, 0x03, 0x01, 0x02, 0x03]
在Python程序中,PySerial库的数据收发API的参数都是bytes类型。
Python的bytes类型是一个只读的字节列表,单个字节就相当于C语言的uint8类型。bytes的常见写法为:b'\x01\x02'或b'hello'。
所以在实际程序中需要将字符串或整数类型与bytes进行互转,本文总结一些常用的转换技巧。
1. 字符串转换成bytes类型
cmd_str = 'AT+CFUN=1'
cmd_bytes = cmd_str.encode()
# cmd_bytes = b'AT=CFUN=1'
2. 十六进制数组转换成bytes类型
cmd_hex = [0x01, 0x02, 0x03, 0x04]
cmd_bytes = bytes(cmd_hex)
# cmd_bytes = b'\x01\x02\x03\x04'
cmd_byte = 0x05
cmd_bytes = bytes([cmd_byte])
# cmd_bytes = b'\x05'
3. 多字节整数转换成bytes类型
cmd_number = 0x010203
cmd_bytes = cmd_number.to_bytes(3, 'big')
# cmd_bytes = b'\x01\x02\x03'
4. bytes类型转换成整数数组
cmd_bytes = b'\x01\x02\x03\x04'
cmd_hex_list = list(cmd_bytes)
# cmd_hex_list = [0x01, 0x02, 0x03, 0x04]
cmd_bytes = b'\x05'
cmd_byte = cmd_bytes[0]
# cmd_byte = 0x05
5. bytes类型转换成字符串数组(十六进制形式)
cmd_bytes = b'\xf1\xf2\xf3\xf4'
cmd_str = ['0x{:02X}'.format(x) for x in list(cmd_bytes)]
# cmd_str = ['0xF1', '0xF2', '0xF3', '0xF4']
6. bytes类型转换成ASCII字符串
cmd_bytes = b'hello'
cmd_str = cmd_bytes.decode()
# cmd_str = 'hello'
7. bytes类型转换成多字节整数
cmd_bytes = b'\x00\x01'
cmd_hex = int.from_bytes(cmd_bytes, 'big')
# cmd_hex = 0x0001
示例
准备一个PCA10040,下载\examples\peripheral\cli,用串口终端连接测试,输入python命令,将返回Nice joke ;),实际效果如下:
下面脚本可以自动通常串口发送python命令,然后打印出设备返回的消息Nice Joke ;)。
import serial
CMD_COLORS_OFF = 'cli colors off'
CMD_PYTHON = 'python'
CLI_PREFIX = 'uart_cli:~$ '
def serial_command(cmd):
serial_cmd = cmd + '\r'
return bytes(serial_cmd.encode())
if __name__ == '__main__':
serial_port = serial.Serial(port='COM34', baudrate=115200, timeout=0.1)
# disable color
serial_port.write(serial_command(CMD_COLORS_OFF))
# send python command
serial_port.write(serial_command(CMD_PYTHON))
recv_msg = ''
while True:
read_line = serial_port.readline()
if read_line == CLI_PREFIX.encode():
print('Command finished')
break
if read_line != b'':
recv_msg += read_line.decode()
print('Message: {}'.format(recv_msg))
(完)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)