【得捷电子Follow me第1期】+任务4 GNSS模块(Air530)定位
[复制链接]
经过前面3个实验的熟悉,对于更高的综合实验就比较得心应手了,接下来,我们上手玩一玩合宙的Air530 GNSS模组。
GNSS定位模组在日常做位置服务、同步授时等场合都有非常广泛的应用!
(1)硬件准备
关于Grove GNSS模组,可以参阅资料:Grove - GPS (Air530) - Seeed Studio
Air530模块是一款高性能、高集成度的多模卫星定位导航模块。体积小、功耗低,可用于车载导航、智能穿戴、无人机等GNSS 定位的应用中。而且提供了和其他模块厂商兼容的软、硬件接口,大幅减少了用户的开发周期。 模块支持GPS/Beidou/GLONASS/Galileo/QZSS/SBAS。采用了射频基带一体化设计,集成了DC/DC、 LDO、 LNA、射频前端、基带处理、32 位RISC CPU、RAM、FLASH 存储、RTC 和电源管理等功能。提供超高的性能,即使在弱信号的地方,也能快速、准确的定位。
GNSS模组Air530的链接非常简单,只需要将UART接口连接到Grove底板的UART0上即可,分别用到串口的TX=GP0 RX=GP1。
(2)软件调试
针对GNSS模组,都是遵循NMEA规范格式进行的报文输出。若需要熟悉GNSS模组的报文输出,可以采用USB转TTL的串口工具,以9600波特率,将输出的报文在PC上位机端采用串口助手打印出来。
"""GPS NMEA Sentence Parser. Creates object that stores all relevant GPS data and statistics.
Parses sentences one character at a time using update()."""
为了避免造轮子,借用巨人的肩膀,我们采用micropyGPS的库进行定位信息的解析,先克隆micropyGPS的库:
借用前人的成果,很容易就调用gps.update函数可以将解析得到的经纬度信息、日期信息等内容通过print输出或显示在OLED的屏幕上。
from machine import UART, Pin
import time
from micropyGPS import MicropyGPS
from machine import I2C
from ssd1306 import SSD1306_I2C
WIDTH = 128
HEIGHT = 64
# Init I2C using I2C0 defaults, SCL=Pin(GP9), SDA=Pin(GP8), freq=400000
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=400000) # Grove - OLED Display 0.96" (SSD1315)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
time.sleep(0.1)
rxData = bytes()
my_gps = MicropyGPS()
while True:
if uart0.any():
stat = my_gps.update(uart0.read(1).decode("ascii")) # Note the conversion to to chr, UART outputs ints normally
if stat:
oled.fill(0)
lat_disp = my_gps.latitude_string()
oled.text(lat_disp, 5, 10)
lon_disp = my_gps.longitude_string()
oled.text(lon_disp, 5, 30)
time_disp = my_gps.date_string("s_dmy")
oled.text(time_disp, 5, 50)
oled.show()
print("Latitude:", my_gps.latitude_string())
print("Longitude:", my_gps.longitude_string())
print(
"Speed:",
my_gps.speed_string("kph"),
"or",
my_gps.speed_string("mph"),
"or",
my_gps.speed_string("knot"),
)
print("Date (Long Format):", my_gps.date_string("long"))
print("Date (Short D/M/Y Format):", my_gps.date_string("s_dmy"))
print("timestamp (Short [H,M,S] Format):", my_gps.timestamp)
stat = None
(3)调试实验
将代码下载到开发板内部,然后将GPS模组置于窗口位置就可以在OLED上显示定位的经纬度以及REPL窗口上输出相关的NIMA的报文解析。
|