перекрывающиеся значения Python из последовательного

У меня есть arduino, подключенный к pi через usb, и он отправляет показания с датчика DHT, используя простую программу, приведенную ниже (этот бит работает, как и ожидалось, на последовательном мониторе arduino):

int chk = DHT.read11(DHT_PIN);
Serial.println(DHT.temperature,1);
delay(2000);

Затем у меня есть программа на Python, которая должна получать данные из последовательного порта:

import serial
conn = serial.Serial('/dev/ttyACM0',9600)
temp = conn.readline()

print temp

Этот скрипт затем вызывается в PHP с помощью $temp = shell_exec('python temp.py 2>&1'); который работает нормально, но значения, которые я получаю из серийного номера, неверны.

Ожидаемый результат должен быть что-то вроде 23.0 но когда я обновляю страницу (или даже запускаю скрипт python в терминале), я получаю такие значения, как 2323.0, 23.023.0, 22..0 а также 2, Они постоянно меняются и очень редко выходят в нужном формате.

Кажется, что данные из последовательного порта перекрываются, хотя Serial.println() Функция помещает его в новую строку. Если бы кто-то мог сказать мне, как исправить это, это было бы очень ценно.

1

Решение

пытаться print repr(temp) … или даже print temp.strip()+" . "

Я очень сильно подозреваю, когда вы читаете, вы получаете

"23.0\r"

\r возвращает курсор в начало строки

если вы делаете print "23.0\rB" ты увидишь "B3.0"

(т.е. я думаю, что вы видите перекрытие только потому, что печатаете его …)

0

Другие решения

РЕШИТЬ

Я посмотрел вокруг на нескольких сайтах и ​​нашел эту страницу http://www.elinux.org/Serial_port_programming довольно полезно Я посмотрел на часть кода и заметил, что с моим исходным кодом внутри serial.Serial(...) Я только что ввел скорость передачи после запятой без указания baudrate=9600,

import serial
port = serial.Serial('/dev/ttyACM0',baudrate=9600,timeout=3.0)
temp = port.readline()

print data

Этот код, похоже, решил проблему! Вот скриншот этого в действии http://gyazo.com/22e7801fd0d7cdf2873e627bb8b88fdc.

0