所以我尝试使用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。非常感谢您,我将感谢您的帮助。
答案 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()