Python序列写不首先运行

时间:2016-06-15 00:44:09

标签: python arduino serial-port

我有2个测试串行通信的程序,一个简单的arduino程序,它回显串行端口上的任何内容,以及一个写入串口并打印回复的python程序。

我有一个问题,每当我上传arduino程序并尝试在我上传后第一次运行python时,它会被卡在print ser.readline()上,我假设有某些原因python没有写入串口。我将不得不退出python程序并再次运行它以获得arduino的回复。该程序将继续工作,直到我重新上传arduino然后再次python将不会在第一次运行。此外,如果我在运行python程序之前打开和关闭串行监视器,它将在第一次运行时工作。有谁知道这是什么问题?这是在Ubuntu上。

Arduino的

String str;

void setup() {                
// Turn the Serial Protocol ON
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
      str = Serial.readStringUntil('\n');     // Read the serial input
      Serial.println(str);             // sends ascii code

  }
}

的Python

import serial


ser = serial.Serial('/dev/ttyACM1', 115200)

for i in range(0,4):
    str = "test string\n"
    ser.write(str)
    print ser.readline()

2 个答案:

答案 0 :(得分:0)

默认情况下,python Serial可能会在默认情况下阻止尝试删除超时:

                           int? totalClientURL = 0;   
                           int? totalHgURL = 0;
                                foreach (var d in results5)
                                {
                                    int col = 6;

                                    worksheet.Cells[row, col++].Value = d.employees_range;
                                    worksheet.Cells[row, col].StyleName = styleData;
                                    worksheet.Cells[row, col++].Value = d.client_url_count;
                                    totalClientURL += d.client_url_count;
                                    worksheet.Cells[row, col].StyleName = styleData;
                                    worksheet.Cells[row, col++].Value = d.url_count;
                                    totalHgURL += d.url_count;


                                    row++;

                                    ExportCount++;
                                    if (ExportCount % 100 == 0)
                                        Worker.ReportProgress(20, ExportCount + " rows exported of " + TotalRows);
                                }

                                int TotalCol = 6;
                                worksheet.Cells[row, TotalCol++].Value = "Total";
                                worksheet.Cells[row, TotalCol].StyleName = styleData;
                                worksheet.Cells[row, TotalCol++].Value = totalClientURL;
                                worksheet.Cells[row, TotalCol].StyleName = styleData;
                                worksheet.Cells[row, TotalCol++].Value = totalHgURL;                                 

还可以查看serial.threaded in the docs

答案 1 :(得分:0)

我添加了

time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)

打开串口后问题得到解决。