2014-02-05 1 views
1

У меня есть модуль GPS, который возвращает данные NMEA. Когда я пытаюсь распечатать все данные, которые он возвращает, используя следующий код, я получаю this.Чтение данных из серии в python

while True: 
try: 
    rcv = port.read() 
    print rcv 

Затем я внесла некоторые изменения, которые будут чистить данные чистых данных NMEA. Это выглядит следующим образом:

port = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=10.0) 

line = [] 
print("connected to: " + port.portstr) 

while True: 
    try: 
     rcv = port.read() 
    except: 
     rcv = '' 


    line.append(rcv) 

    if rcv == '\n': 
     line = "".join(line)   
     print line 
     line = [] 

Выход выглядит так:

$ GPGGA, 183345.000,5023.3424, N, 01857,3817, E, 1,7,1.25,313.3, М, 42,1, М, * 53

$ GPGSA, A, 3,09,26,28,08,15,18,17 ,,,,,, 1.52,1.25,0.88 * 06

$ GPRMC, 183345,000, A , 5023.3424, N, 01857.3817, E, 0.40.55.07 050214 ,,, A * 54

$ GPVTG, 55,07, T, M, 0,40, N, 0,74, K, A * 0D

$ GPGGA, 183346.000,5023.3423, N, 01857,3817, E, 1,7,1,25,313,3, M, 42,1, М ,, * 57

$ GPGSA, A, 3,09,26,28,08,15,18,17 ,,,,,, 1.52,1.25,0.88 * 06

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

ответ

3

вы можете использовать readline вместо чтения, который будет продолжать читать символы до тех пор, пока не будет получен EOL.