PySerial:带有字母和引号的奇怪输出

时间:2018-11-24 08:27:42

标签: python pyserial

所以我尝试使用Python从Arduino板上的DS18B20温度传感器读取值。在我的python代码中,我使用Pyserial访问端口,下面是代码。

import serial
def readTemp():
    temp = serial.Serial('COM3', 9600)
    line = temp.readline().strip()
    while line:
        print(line.strip())
        line = temp.readline().strip()
    temp.close()

def main():
    readTemp()

main()

在我的Arduino代码中,我对其进行了编码,以便输出应为数字。以下是Arduino的输出:

21.3125
22.3750
22.3750
22.3750
22.3750

但是,当我运行Python代码时,输​​出会添加一些字母和引号,但是我不知道为什么以及如何删除它们。以下是Python的输出。

b'22.3750'
b'22.0625'
b'22.0625'
b'22.0625'
b'22.0625'

第二,通常,当人们在外壳上运行python脚本时,会有一个“ >>”表示正在运行的进程已完成,然后可以关闭外壳。但是,在打印我的python脚本的输出后,该脚本似乎仍在运行,因为没有出现“ >>”。我尝试使用ctrl + c杀死程序却无法执行操作,当我尝试关闭外壳程序时,弹出窗口显示“您的程序仍在运行,您要杀死它吗?”。那么在输出打印后,还有什么可以完成运行的吗?

我是Python的新手,刚刚学过pyserial。非常感谢您,我将感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

关于第一个问题,

不用担心,这些值将读取为字节。它前面的 b 表示字节。您可以将其转换为字符串 使用 decode('utf-8')

需要更改代码

替换

print(line.strip())

使用

bytesValue = line.strip()
numericValue = int(bytesVale.decode('utf-8'))
print(numericValue)

关于第二个问题, 您正在侦听设备的过程尚未完成。 条件

while line:

使过程保持活力。

如果您希望程序仅读取一个值并退出,则可以使用 if 代替 while

line = temp.readline().strip()
if line:
        bytesValue = line.strip()
        numericValue = int(bytesVale.decode('utf-8'))
        print(numericValue)
temp.close()