2011-03-30 12 views
2

Я работаю над проектом с участием Arduino и Python. В принципе, я получаю данные от датчиков и используя Python для их записи в базу данных.Работа с данными микроконтроллера с течением времени

В настоящий момент я запрограммировал Arduino таким образом, что он отправляет данные каждую минуту. Программа Python ждет данных и вставляет их.

ser = serial.Serial('/dev/ttyUSB0',9600) 
while 1: 
ser.open() 
if ser.readline() != "": 
    db.data.insert({"Light" : ser.readline(), "Ts" : time()}) 
ser.close() 

Этот метод оказался не так хорошо, потому что вместо того, чтобы каждую минуту, я получаю вставки примерно один раз каждые 4 минуты.

Итак, что было бы вашим советом для решения этой проблемы? Программа Arduino позволяет выводить данные все время (меньше работы на компьютерном процессоре), а затем просто ждать в Python для другого выбора?

+2

Я думаю, нам нужно увидеть сторону arduino кода, чтобы понять, почему вы получаете 4 минуты вместо 1. – drysdam

ответ

3

Если ваш код Arduino не отправляет все дважды, половина проблемы состоит в том, что вы вызываете ser.readline() дважды на итерацию. Это означает, что на два сообщения будет одна вставка.

Еще одна вещь, которая выглядит странно, заключается в том, что вы открываете и закрываете последовательный порт во время каждой итерации. Я сомневаюсь, что это противоречит вашей проблеме, но почему бы не открыть порт только один раз, в начале?

ser = serial.Serial('/dev/ttyUSB0',9600) 
ser.open() 
while 1: 
    line = ser.readline() 
    if line != "": 
    db.data.insert({"Light" : line, "Ts" : time()}) 
ser.close() 

Для получения дальнейшей помощи, пожалуйста, напишите код Arduino.

+0

По какой-то причине я считал, что серийный номер не может быть открыт все время. Спасибо, это работает! – mrkva

Смежные вопросы