851|2

188

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【得捷电子Follow me第1期】任务4:GPS获取具体位置 [复制链接]

 

这次PICO使用的GPS模块是Air530,通过串口与pico w进行通信,上电后就能开始定位,但是必须要放在户外或者窗边才可以接收到卫星的信号,才能进行定位。

在PICO上通过串口读取GPS的数据,但是GPS数据很多,而且有一定的数据格式,需要进行解码。这就需要使用一个micropyGPS的库文件进行解码。

解码出来的数据就是你的坐标。再打印或者显示出来就可以了。

代码如下:

from machine import Pin
import time
from micropyGPS import MicropyGPS
from machine import UART

com = UART(0,baudrate=9600, tx=Pin(0), rx=Pin(1)) 
my_gps = MicropyGPS(8)
my_gps.local_offset

def get_GPS_values():    
    global gps_values,rtc
    time.sleep_ms(800)
    cc = com.readline()
    for x in cc:
        my_gps.update(chr(x))
    gps_values = str(my_gps.latitude[0] + (my_gps.latitude[1] / 60)) + ',' + str(my_gps.longitude[0] + (my_gps.longitude[1] / 60))
    date = my_gps.date
    timestamp = my_gps.timestamp
    hour = timestamp[0]
    rtc = str(int(timestamp[0]))+":"+str(int(timestamp[1]))+":"+str(int(timestamp[2])) 
    return gps_values,rtc

while True:
    get_GPS_values()
    time.sleep(1)
    print("sta:" + str(my_gps.satellites_in_use))
    print(gps_values)
    print("rtc:" + str(rtc))



运行后根据打印的数据

 

可以在网页上查找到你的具体定位位置,

 

 

 

最后上一个带OLED显示的视频和带速度的程序

from machine import UART, Pin
import time
import hashlib
from MicropyGPS import MicropyGPS
from machine import Pin, I2C

from ssd1306 import SSD1306_I2C
import framebuf


WIDTH  = 128                            
HEIGHT = 64
i2c = I2C(1)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)

# Init I2C using I2C0 defaults, SCL=Pin(GP9), SDA=Pin(GP8), freq=400000

uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
time.sleep(0.1)
rxData = bytes()
my_gps = MicropyGPS(8)
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



 

实验四

 

后记:

OLED显示°,属于特殊字符,在OLED实现显示上如果要正确显示必须要加载一个显示的文字库,由于这次没做文字库,所以无法显示中文和°的字符。显示出来乱码。后续有机会再做一个字库一起尝试显示汉字和字符。

 

最新回复

没做文字库,显示出来乱码很正常   详情 回复 发表于 2023-6-24 21:30
点赞 关注
 
 

回复
举报

1703

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

没做文字库,显示出来乱码很正常

点评

是的,但是文字库也很大,放在flash中也不能放其他库了,两难。。。。  详情 回复 发表于 2023-6-26 01:04
 
 
 

回复

188

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
火辣西米秀 发表于 2023-6-24 21:30 没做文字库,显示出来乱码很正常

是的,但是文字库也很大,放在flash中也不能放其他库了,两难。。。。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表