From a983b7d923bc4448aea625350db3246dcb951c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E9=99=88=E5=8D=9A?= <1134950748@qq.com> Date: Mon, 29 Nov 2021 11:36:08 +0000 Subject: [PATCH] =?UTF-8?q?update=20ports/quectel/core/gnss.py.=20?= =?UTF-8?q?=E5=BD=93=20read=5Fgnss=5Fdata()=E5=9C=A8=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD=E8=A2=AB=E8=B0=83=E7=94=A8=EF=BC=8C=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E5=BB=B6=E6=97=B6=E6=97=B6=E9=97=B4=E4=BD=8E=E4=BA=8E1?= =?UTF-8?q?=E7=A7=92=E7=9A=84=E8=AF=9D=EF=BC=8C=E4=BC=9A=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因:由于此时串口的GPS模组还没有将数据上报,所以此时调用 read_gnss_data()会报错,错误信息 self.r1.group(0) group 不存在。 此处增加一个返回返回值,这样线程中调用的时候。使用的时候,可以不断去询问串口是否有数据发送。 例子: def GpsQueuePush(): gnss = GnssGetData(GPS_CONFIG['uartn'],GPS_CONFIG['baudrate'],GPS_CONFIG['databits'],GPS_CONFIG['parity'],GPS_CONFIG['stopbits'],GPS_CONFIG['flowctl']) while(1): utime.sleep_us(10) # 加个延时避免EC200U/EC600U运行重启 if gnss.read_gnss_data(): location = gnss.getLocation() gps_result.lng = '%.7f' % location[2] gps_result.lat = '%.7f' % location[0] --- ports/quectel/core/gnss.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/ports/quectel/core/gnss.py b/ports/quectel/core/gnss.py index cdc812a..dff9110 100644 --- a/ports/quectel/core/gnss.py +++ b/ports/quectel/core/gnss.py @@ -38,17 +38,23 @@ class GnssGetData: #读取GNSS数据并加以解析 def read_gnss_data(self): try: - buf = self.uart.read(self.uart.any()) - gps_data = buf.decode().strip("b") - self.r = ure.search("GNGGA(.+?)M", gps_data) - self.r1 = ure.search("GNRMC(.+?)M", gps_data) - self.r2 = ure.search("GPGSV(.+?)M", gps_data) - self.r3 = ure.search("GNVTG(.+?)M", gps_data) - global fixFlag - if self.r1.group(0).split(",")[2] == 'A': #有效定位 - fixFlag=1 - else: - fixFlag=0 + msgLen = self.uart.any() + if msgLen: + buf = self.uart.read(self.uart.any()) + gps_data = buf.decode().strip("b") + self.r = ure.search("GNGGA(.+?)M", gps_data) + self.r1 = ure.search("GNRMC(.+?)M", gps_data) + self.r2 = ure.search("GPGSV(.+?)M", gps_data) + self.r3 = ure.search("GNVTG(.+?)M", gps_data) + global fixFlag + if self.r1.group(0).split(",")[2] == 'A': #有效定位 + fixFlag=1 + else: + fixFlag=0 + + return True + else: + return False except: print("Exception:read gnss data error!!!!!!!!") raise -- Gitee