Python 阿杜伊诺+;Raspy3系列问题

Python 阿杜伊诺+;Raspy3系列问题,python,arduino,raspberry-pi,Python,Arduino,Raspberry Pi,我是python新手,我正在尝试使用python将ArduinoUno与树莓Pi3连接起来。Arduino每1秒发送一次数据(ID、温度和湿度) 问题是我想让raspberry每隔5秒读取一次串行端口,raspy正在丢失数据。。。它只得到ID:2,4,6,8等等,所以我丢失了数据,我还发现当raspy读取时,它没有得到最新的数据,它似乎在读取串行数据的缓冲区(我也试着每秒读取一次,问题是一样的) 以下是代码的一部分: 导入numpy 导入系统 导入时间 从PyQt4.QtCore导入* 从PyQ

我是python新手,我正在尝试使用python将
Arduino
Uno与树莓Pi3连接起来。Arduino每1秒发送一次数据(ID、温度和湿度)

问题是我想让raspberry每隔5秒读取一次串行端口,raspy正在丢失数据。。。它只得到ID:2,4,6,8等等,所以我丢失了数据,我还发现当raspy读取时,它没有得到最新的数据,它似乎在读取串行数据的缓冲区(我也试着每秒读取一次,问题是一样的)

以下是代码的一部分:

导入numpy
导入系统
导入时间
从PyQt4.QtCore导入*
从PyQt4.QtCore导入pyqtSignal作为信号
从PyQt4.QtGui导入*
导入序列号
类Ventana(QMainWindow,ui\u SQL.ui\u Ventana):
port1=serial.serial(3)#port1=serial.serial('/dev/ttyUSB0')
端口1.1波特率=9600
port1.timeout=1
def uuu init uuu(self,parent=None):
self.l1=[]
self.l2=[]
self.l3=[]
超级(文塔纳,自我).\u初始(父)
self.setupUi(self)
self.cajita.clicked.connect(self.cancel1)
定时器=QTimer(自身)
timer.timeout.connect(self.medir)
定时器启动(5000)
def medir(自我):
texto=self.port1.readline()
texto1=texto.split(“”)
num1=int(texto1[0])
num2=浮动(texto1[1])
num3=浮动(texto1[2])
self.lect1.setText(str(num2))
self.lect2.setText(str(num3))
dato1=圆形(num2/num3,2)
num4=self.blancoSpin.value()
dato2=圆形(num4/num3,2)
self.muestraDo.setText(str(dato1))
self.guardarTxt()
def guardarTxt(自身):
guardar=self.port1.readline()
如果self.cajita.isChecked():
打开(self.lineEdit.text()+'.txt',a')作为您的文件:
yourFile.write(“%s\n”%guardar)
这是arduino密码。它只是发送随机值

int n=1;
float a;
float b;

void setup(){

Serial.begin(9600);
}

void loop()
{
a = random(10, 30000);
a /= 100;
b = random(900,1100);
b /= 100;
Serial.print(n);
Serial.print(" ");
Serial.print(a);
Serial.print(" ");
Serial.println(b);
n +=1;
delay(1000);
}

有人能帮我吗?

对于那些有同样问题的人,我最终用线程解决了这个问题……这里我粘贴了部分修改后的代码:

class guardarTxt (QtCore.QThread):

    def __init__(self, texto, nombre):
        QtCore.QThread.__init__(self)
        self.nombre = nombre
        self.texto = texto

    def __del__(self):
        self.wait()

    def run (self):
        with open(nombre+'.txt', 'a') as yourFile:
            yourFile.write("%s\n" % texto)
        self.terminate()    
在Ventana类中,我更改了self.guardarTxt(),原因如下:

nombre = self.lineEdit.text()
self.guardarTxt = guardarTxt(texto, nombre)
self.guardarTxt.start()

对于那些有相同问题的人,我最终使用线程解决了这个问题……这里我粘贴了部分修改后的代码:

class guardarTxt (QtCore.QThread):

    def __init__(self, texto, nombre):
        QtCore.QThread.__init__(self)
        self.nombre = nombre
        self.texto = texto

    def __del__(self):
        self.wait()

    def run (self):
        with open(nombre+'.txt', 'a') as yourFile:
            yourFile.write("%s\n" % texto)
        self.terminate()    
在Ventana类中,我更改了self.guardarTxt(),原因如下:

nombre = self.lineEdit.text()
self.guardarTxt = guardarTxt(texto, nombre)
self.guardarTxt.start()

你的Arduino密码是什么?您是否已尝试在Arduino草图中放置一个
Serial.flush()
,以查看是否有帮助?很抱歉,我忘记添加Arduino代码…我将更新我说过的postAs,尝试放置一个
Serial.flush()
n+=1之前,看看这是否有帮助,也许只是缓冲的问题。@ChatterOne,我试过serial.flush()但不起作用。不断失去分数…我得到了一个…我失去了一个…如果我在
arduino
上更改延迟(),没有关系,我尝试在
raspberry
上使用dalay(2000)、延迟(10000)以及相同的数字,但如果
Serial.flush()
不起作用,请尝试将其分解为小问题。只运行Arduino代码,查看串行监视器上显示的内容。如果向树莓发送单个字符串,如“abcdefgh1234567890”,会发生什么情况?另外,你可能想看看这个帖子:你的Arduino代码是什么?您是否已尝试在Arduino草图中放置一个
Serial.flush()
,以查看是否有帮助?很抱歉,我忘记添加Arduino代码…我将更新我说过的postAs,尝试放置一个
Serial.flush()
n+=1之前,看看这是否有帮助,也许只是缓冲的问题。@ChatterOne,我试过serial.flush()但不起作用。不断失去分数…我得到了一个…我失去了一个…如果我在
arduino
上更改延迟(),没有关系,我尝试在
raspberry
上使用dalay(2000)、延迟(10000)以及相同的数字,但如果
Serial.flush()
不起作用,请尝试将其分解为小问题。只运行Arduino代码,查看串行监视器上显示的内容。如果向树莓发送单个字符串,如“abcdefgh1234567890”,会发生什么情况?此外,您可能需要查看以下线程: