【得捷电子Follow me第1期】-4- 实现定位功能
[复制链接]
本帖最后由 慕容雪花 于 2023-6-6 11:28 编辑
一、Air530定位模块基本介绍
这个GPS模块是自己参加这期FOLLOW-ME活动的主要原因。这次使用的GPS模块是Seeed推出的Air530,不仅仅支持GPS,还有咱们中国的北斗,包括: GPS / Beidou / Glonass / Galileo / QZSS / SBAS。
相关的参数如下:
- Supply voltage 3.3V/5V
- Working current up to 60mA
- Interface UART
- Time of warm start 4s
- Time of cold boot 30s
该模块有4个引脚,分别是:
GND |
接地 |
TX |
串口发送 |
RX |
串口接收 |
VCC |
电源 |
硬件连接图:
二、GPS数据解析
下面是本文的核心,主要是该如何从接收到的数据中解析出定位信息。
其实通过读取UART数据,可以发现有非常多种格式的卫星数据可以获取,
$GNGGA:GPS/北斗定位信息
$GNGSA:当前卫星信息
$GPGSV:可见GPS卫星信息
$BDGSV:可见北斗卫星信息
$GNRMC:推荐定位信息
$GNVTG:地面速度信息
$GNGLL:大地坐标信息
$GNZDA:当前时间UTC(1)信息
本文选择了其中一种:GNGLL。
$GNGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*<8><CR><LF>
<1>纬度ddmm.mmmm,度分格式(前导位数不足则补0)
<2>纬度N(北纬)或S(南纬)
<3>经度dddmm.mmmm,度分格式(前导位数不足则补0)
<4>经度E(东经)或W(西经)
<5>UTC时间,hhmmss.sss格式
<6>状态,A=定位,V=未定位
<7>模式指示,A-自动模式;D-差分模式;E-估算(航位推算)模式;M-手动
输入模式;S-模拟器模式
< 8>校验值
主要的代码如下:
def getGPS(gpsModule):
global FIX_STATUS, TIMEOUT, latitude, longitude, satellites, GPStime
timeout = time.time() + 8
while True:
gpsModule.readline()
buff = str(gpsModule.readline())
parts = buff.split(',')
print(buff)
if (parts[0] == "b'$GNGLL" and len(parts) == 8):
if(parts[1] and parts[2] and parts[3] and parts[4] and parts[5] and parts[6] and parts[7]):
print(buff)
latitude = convertToDegree(parts[1])
if (parts[2] == 'S'):
latitude = -latitude
longitude = convertToDegree(parts[3])
if (parts[4] == 'W'):
longitude = -longitude
#satellites = parts[7]
GPStime = str((int(parts[5][0:2])+8)%24) + ":" + parts[5][2:4] + ":" + parts[5][4:6]
FIX_STATUS = True
break
if (time.time() > timeout):
TIMEOUT = True
break
utime.sleep_ms(500)
def convertToDegree(RawDegrees):
RawAsFloat = float(RawDegrees)
firstdigits = int(RawAsFloat/100)
nexttwodigits = RawAsFloat - float(firstdigits*100)
Converted = float(firstdigits + nexttwodigits/60.0)
Converted = '{0:.6f}'.format(Converted)
return str(Converted)
控制台输出结果如下,可以看到在获取到有效的GNGLL数据后,接下来程序正确解析出了精度和纬度。
----------------------
mytime is: 2023-06-06 Tues 09:09:44
mytime is: 2023-06-06 Tues 09:09:45
mytime is: 2023-06-06 Tues 09:09:46
mytime is: 2023-06-06 Tues 09:09:47
mytime is: 2023-06-06 Tues 09:09:48
b'$GNGSA,A,3,06,08,09,16,24,39,,,,,,,3.7,2.1,3.0,4*3C\r\n'
b'$GNGLL,3168.46110,N,12176.26956,E,010943.000,A,A*49\r\n'
b'$GNGLL,3418.46110,N,12156.26956,E,010943.000,A,A*49\r\n'
Printing GPS data...
Latitude: 33.307686
Longitude: 123.437828
Satellites:
Time: 9:09:43
----------------------
|