在执行串口测试任务时,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))

(完)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐