Serialization 为什么raspberry pi和arduino之间的串行启动缓慢?

Serialization 为什么raspberry pi和arduino之间的串行启动缓慢?,serialization,arduino,raspberry-pi,Serialization,Arduino,Raspberry Pi,嗨,我正试图通过usb连接设置arduino和raspberry pi之间的通信,但我遇到了一些奇怪的问题,我似乎无法理解。我想从python脚本向arduino发送一些数据,然后让arduino指示灯点亮 编辑*我已经解决了这个问题,但我把问题留在这里,以防它对其他人有帮助。问题在于串行初始化时间。见下文 Python代码 import serial import time ser = serial.Serial('/dev/ttyACM0', 9600, timeout=3) ser.op

嗨,我正试图通过usb连接设置arduino和raspberry pi之间的通信,但我遇到了一些奇怪的问题,我似乎无法理解。我想从python脚本向arduino发送一些数据,然后让arduino指示灯点亮

编辑*我已经解决了这个问题,但我把问题留在这里,以防它对其他人有帮助。问题在于串行初始化时间。见下文

Python代码

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600, timeout=3)
ser.open()
ser.write('1')
阿杜伊诺代码

char serialRecieved;



/*output*/
int ledOne=8;
int ledTwo=12;
int ledThree=13;

/*input pins*/
int thermistor=1;

void setup(){
  pinMode(ledOne, OUTPUT);
  pinMode(ledTwo, OUTPUT);
  pinMode(ledThree, OUTPUT);
  Serial.begin(9600);
 }


void loop(){
   if (Serial.available() > 0) {
 
         serialRecieved=Serial.read();
         if(serialRecieved=='1'){lightLed(8,1000);}
         if(serialRecieved=='2'){lightLed(12, 1000);}
         if(serialRecieved=='3'){lightLed(13 , 1000);}
         if(serialRecieved=='4'){sendTemp();}
         delay(1);
   }
}

void lightLed(int led, int time){
     digitalWrite(led, HIGH);
     delay(time);
     digitalWrite(led, LOW);
 }

void sendTemp(){
  int temp=analogRead(thermistor);
  Serial.print(temp);
  }
当我尽可能地运行python脚本时,引脚8上的led应该亮起,但它没有亮起。奇怪的是,如果我运行一个循环(见下面的代码),它工作得很好,只是循环的第一次迭代中的串行数据没有被处理

除了第一次循环迭代之外,此脚本可以正常工作
导入序列号
导入时间
ser=serial.serial('/dev/ttyACM0',9600,超时=3);
ser.open();
i=0
当我<5时:
ser.write('1')
ser.write('2')
ser.write('3')
ser.write('4')
时间。睡眠(1)
串行数据=ser.readline()
打印(“温度”)
打印串行数据
i=i+1
有人知道为什么串行数据的第一部分丢失或不读取吗?顺便说一句,如果你说不出我是python、linux pi和arduino的新手,对不起

编辑,问题解决了

好的,我刚刚发现了问题,这是由于在pi和arduino之间建立串行连接所花费的时间。如果有人有同样的问题,这里有链接


现在,我只需要了解如何知道串行连接何时准备好开始发送和接收数据。

连接到串行线可能会触发设备重置(这取决于使用的串行转换器)…以调用引导加载程序

此功能用于将新草图加载到电路板中…通常电路板在引导加载程序中停留约1秒,并在没有命令或命令无效时启动主应用程序

如果要禁用此功能,请断开串行转换器上的dtr线路-但在这种情况下,您也将失去上载草图的能力…您必须在每个上载周期手动按下重置按钮

哇…关于这个话题有一个有趣的文档:

import serial
import time


ser = serial.Serial('/dev/ttyACM0', 9600, timeout=3);
ser.open();

i=0
while i < 5:

ser.write('1')
ser.write('2')
ser.write('3')
ser.write('4')
time.sleep(1)
serial_data = ser.readline()
print("temperature")
print serial_data

i=i+1