2017-02-10 23 views
-1

Я использую pyserial для чтения данных, отправленных с arduino nano.Новичок в Pyserial, обнаруживает, что отстает от

Мне нужно много данных для чтения в режиме реального времени.

Чтобы прочитать его, я использую этот код:

import threading 
ser = serial.Serial('COM6', 250000, timeout=0) 
def serial_stuff(): 
    global numb_0 
    global numb_1 
    global continuer 
    while continuer: 
     chaine=ser.readline() 
     numb_0=[int(s) for s in chaine.split() if s.isdigit()] 
     time.sleep(0.005) 
     if len(numb_0)>0: 
      print("got one") 
      numb_1=numb_0 
thread = threading.Thread(target = serial_stuff) 
thread.start() 
while 1: 
    if numb_1!=numb_archive: 
     numb_archive=numb_0 
     #Do stuff to process the data here 

Сумма прихода данных является довольно большой. Иногда скрипт python начинает считывать последовательные данные с большим и большим отставанием, потому что данные быстро обновляются.

Как обнаружить, что система начинает отставать (как определить, что последовательный буфер растет очень быстро)? Я хочу его обнаружить, поэтому я могу отправить сигнал на arduino, чтобы снизить «пропускную способность» отправленных данных.

+1

Что вы пробовали до сих пор? SO - это веб-сайт, на котором вы публикуете код, связанный с вашим вопросом, и получаете на нем помощь. Вы не указали код обработки. –

+2

Поскольку * выходной сигнал Arduino * 'serial' довольно мал, вполне вероятно, что данные накапливаются в буфере ввода' pyserial'. Поэтому вы можете использовать 'ser.inWaiting()' для проверки количества накопленных там байтов. Если вы делаете это с постоянными временными интервалами, вы можете определить, нужно ли задавать * Arduino * замедление или, проще говоря, более усердно работать с хрустом данных, используя всю вычислительную мощность вашего компьютера. Это не должно быть затмеванным * Ардуино *. –

+0

Я добавил дополнительную информацию о моем коде. Не могли бы вы объяснить мне, как «больше работать, чтобы хруст данных»? спасибо :) – n0tis

ответ

0

У объекта serial.Serial объект имеет метод inWaiting() - он возвращает количество байтов, ожидающих в последовательном буфере. Вы можете использовать значение этого, чтобы решить, когда дросселировать ваш Arduino.

Обратите внимание, что в PySerial 3.0, это изменилось в in_waiting(), см documentation