【得捷电子Follow me第1期】任务4:实现定位功能
[复制链接]
本次活动配套了seeed的GPS定位模块,GPS模组型号是Air530z。在网上可以找到这个GPS模组的详细信息。
Air530Z 是一款高性能、高精度、高集成度、低功耗的多模卫星导航定位模块,支持北斗三代/GPS/GLONASS 等卫星定位系统,支持多系统联合定位和单系统独立定位。
模块采用了射频基带一体化设计,集成了 DC/DC、 LDO、射频前端、低功耗应用处理器、RAM、Flash 存储、RTC 和电源管理,可通过纽扣电池或法拉电容给 RTC、备份 RAM 供电,减少首次定位时间,可广泛应用于车载定位与导航设备、高精度授时、安全监测、测量测绘、精准农业等对导航/定位/授时有需求的领域。
Air530z接口
Air530z模块对外提供的数据接口是UART,详细管教定义如下:
Air530z模块驱动
Air530z模块的驱动已经有大神提供了开源的python库,链接:
使方法也非常简单,只需要将micropyGPS.py文件上传到pico w中,再调用对应的接口就能获取到定位信息了。
示例代码:
"""
演示硬件:
SSD1306(OLED 128*64 IIC)
RP2040 Pico W
所需文件:
ufont.py
unifont-14-12917-16.v3.bmf
ssd1306.py
链接引脚:
SCL = 9
SDA = 8
使用字体: unifont-14-12917-16.v3.bmf
"""
import time
from machine import I2C, Pin, UART
import ufont
import ssd1306
from micropyGPS import MicropyGPS
def wait(info, _t=5):
print(info)
time.sleep(_t)
if __name__ == '__main__':
buzzer = Pin(16, Pin.OUT) # Buzzer
led = Pin("LED", Pin.OUT) # led on board
#uart_dbg = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # uart0
uart_gps = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5)) # uart1
gps = MicropyGPS() #GPS
# 请修改为对应 FootPrint
i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq = 400000)
display = ssd1306.SSD1306_I2C(128, 64, i2c)
# 载入字体
# 使用字体制作工具:https://github.com/AntonVanke/MicroPython_BitMap_Tools
font = ufont.BMFont("unifont-14-12917-16.v3.bmf")
font.text(display, "你好,Pico W\n", 0, 0, font_size=16, show=True, clear=True)
time.sleep(3)
while True:
if uart_gps.any() > 0:
status = gps.update(uart_gps.read(1).decode("ascii"))
if status:
print("latitude:", gps.latitude_string())
print("Longitude:", gps.longitude_string())
print("Speed:",gps.speed_string("kph"),"or",gps.speed_string("mph"),"or", gps.speed_string("knot"),) #读取速度信息
print("Date (Long Format):", gps.date_string("long"))#读取时间信息
print("Date (Short D/M/Y Format):", gps.date_string("s_dmy"))
print("timestamp (Short [H,M,S] Format):", gps.timestamp)
font.text(display, "纬度" + gps.latitude_string(), 0, 0, font_size=16, show=True, clear=True)
font.text(display, "经度" + gps.longitude_string(), 0, 16, font_size=16, show=True, clear=False)
font.text(display, "速度" + gps.speed_string("kph"), 0, 32, font_size=16, show=True, clear=False)
stat = None
# led.off()
# # buzzer.value(0)
# time.sleep(1) # sleep 1s
# led.on()
# # buzzer.value(1)
# time.sleep(1) # sleep 1s
运行效果:
|