Python 阿杜伊诺+;Raspy3系列问题
我是python新手,我正在尝试使用python将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
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”,会发生什么情况?此外,您可能需要查看以下线程: