PySerial: странный вывод с буквой и кавычками - PullRequest
0 голосов
/ 24 ноября 2018

, поэтому я пытаюсь использовать Python для считывания значений с датчика температуры DS18B20 на моей плате Arduino.В моем коде 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 голосов
/ 24 ноября 2018

Что касается первого вопроса,

Не беспокойтесь, значения читаются как байты. b перед ним обозначены байты.Вы можете преобразовать его в строку, используя decode ('utf-8') .

Требуется изменить код

Заменить

print(line.strip())

на

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

Что касается второго вопроса, ваш процесс не завершен, поскольку он прослушивает устройство.Условие

while line:

поддерживает процесс в рабочем состоянии.

Если вы хотите, чтобы программа просто прочитала значение и вышла из программы, вы можете использовать , если вместо в то время как .

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