使用pyserial从串口读取连续数据

时间:2015-04-16 16:18:59

标签: python arduino pyserial

我的arduino不断发送字符串。

例如,我逐行发送一个整数(0-1023),所以它应该是:

"51\r\n233\r\n37\r\n166\r\n"

无限长,因为它不断流式传输。

我目前正在使用pyserial的函数readline()来读取数据,但不断看到已损坏/丢失的字节。例如,代替"37\r\n"后跟"11\r\n",它将获得"3\r11\r\n"甚至"3711\r\n"

这是我完整的Python端代码:

import serial
import time

if __name__ == '__main__':
    ser = serial.Serial('COM3', baudrate=1000000)
    data = []
    time0 = time.time()
    while (time.time() - time0 < 5):  # Read data for 5 seconds
        data.append(ser.readline())
    ser.close()

对于那些感兴趣的人,(可能相关的)arduino代码就是:

#define FASTADC 1  // Flag for prescale 16
// Code pasted for modifying ADCSRA
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

void setup() {
  Serial.begin(1000000);
  #if FASTADC
    // set prescale to 16
    sbi(ADCSRA,ADPS2) ;
    cbi(ADCSRA,ADPS1) ;
    cbi(ADCSRA,ADPS0) ;
  #endif
}

void loop() {
  int val;
  val = analogRead(A0);
  Serial.println(val);
}

从代码中可以看出,波特率,奇偶校验,停止位均设置为1,000,000;没有; 1。

0 个答案:

没有答案