一、问题描述
需要使用python的serial库去打印串口数据,期望打印出字符串数据。
但实际上打印出来的结果为b'$GNGST,000202.20,,,,,,,*65\r\n'这种类型的。
代码如下:
import serial
import serial.tools.list_ports
import datetime
ser = serial.Serial("COM8", 460800) # 打开COM8,将波特率配置为460800,其余参数使用默认值
if ser.isOpen(): # 判断串口是否成功打开
print("打开串口成功。")
print(ser.name) # 输出串口号
while True:
com_input = ser.readline()
if com_input: # 如果读取结果非空,则输出
print(f"{datetime.datetime.now()} {com_input}")
ser.close()
else:
print("打开串口失败。")
输出结果:
二、原因分析
说白了 Python3的字符串的编码语言用的是unicode编码,由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干字节,如果要在网络上传输,或保存在磁盘上就需要把str变成以字节为单位的bytes
python对bytes类型的数据用带b前缀的单引号或双引号表示。
三、解决措施
修改代码
ser.readline()
修改为
ser.readline().decode('UTF-8')
四、措施验证
修改后,运行python文件。控制台可正常输出期望的文本。
验证结束。