差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
gps [2023/07/23 20:34]
lijiran [4. 主要的GPS供应商]
gps [2023/07/25 09:40] (当前版本)
lijiran [5. 参考案例]
行 6: 行 6:
 --- ---
 {{ :​wiki:​lalalalala.png?​300 |}} {{ :​wiki:​lalalalala.png?​300 |}}
 +
 GPS模块是一种在手机或者机器的主板上结合的无线芯片模块,可以和GPS联络,从而实现定位和导航。 GPS模块是一种在手机或者机器的主板上结合的无线芯片模块,可以和GPS联络,从而实现定位和导航。
  
 --- ---
-{{ :wiki:​图片2.png?300 |}}+{{ :gps模块.jpg?300 |}
 +}
 ### 2. GPS是如何工作的? ### 2. GPS是如何工作的?
  
行 20: 行 22:
 未知:设备的空间坐标x2,y2,z2,时间t2 未知:设备的空间坐标x2,y2,z2,时间t2
  
 +---
 {{ ::​屏幕截图_2023-07-14_171837.png?​300 |}} {{ ::​屏幕截图_2023-07-14_171837.png?​300 |}}
  
行 25: 行 28:
 实际上,卫星定位的误差还是较大,因为信号在大气中传输速度会有损耗,一般会使用差分GPS技术来减小误差。 实际上,卫星定位的误差还是较大,因为信号在大气中传输速度会有损耗,一般会使用差分GPS技术来减小误差。
  
 +--- 
 +{{ :​0530-4.jpg?​300 |}}
  
 差分GPS技术: 差分GPS技术:
 在地面上建立位置已知的GPS基站,当定位时,基站也可以接收到为我们提供位置信息的4颗卫星的信号,根据位置信号测出坐标值,与已知坐标比较,得出偏差量,将偏差量或者实时测得的载波相位,通过数传链路或者移动通信网络发送给终端设备,然后终端设备根据这个信息进行修正位置,得出比较精准的位置信息。 在地面上建立位置已知的GPS基站,当定位时,基站也可以接收到为我们提供位置信息的4颗卫星的信号,根据位置信号测出坐标值,与已知坐标比较,得出偏差量,将偏差量或者实时测得的载波相位,通过数传链路或者移动通信网络发送给终端设备,然后终端设备根据这个信息进行修正位置,得出比较精准的位置信息。
  
 +--- 
 +{{ :​oip.jpg?​300 |}}
  
  
行 79: 行 84:
  
   - [[https://​github.com/​traccar/​traccar|https://​github.com/​traccar/​traccar]]   - [[https://​github.com/​traccar/​traccar|https://​github.com/​traccar/​traccar]]
-  ​[[https://mc.dfrobot.com.cn/​thread-304709-1-1.html|GPS开发板]] + 
-  - [[https://hackaday.com/blog/?s=GPS|GPS相关技术文章]]+ 
 +下面是一项使用RP2040作为主控芯片,驱动中科微电子的ATGM336H型号的传感器的参考案例,通过UART进行传感器与主控之间的数据通信,当有数据回传回来时,将数据按照指定的流程分割好,找到其中的GPS坐标,并且通过ssd1306芯片驱动的OLED屏幕打印出来,主控芯片与OLED屏幕通过SPI协议进行数据通信。 
 + 
 + 
 +--- 
 +效果如图所示: 
 +{{ :微信图片_20230725093622.jpg?300 |}} 
 + 
 + 
 +代码如下 
 +    from machine import UART,​Pin,​SPI 
 +    import time 
 +    import uasyncio 
 +    from ssd1306 import SSD1306_SPI 
 +    import framebuf 
 +    from utime import sleep_ms 
 +    spi1_mosi = 11 
 +    spi1_sck = 10 
 +    spi1_dc = 9 
 +    spi1_rstn = 8 
 +    spi1_cs = 16 
 +    spi = SPI(1, 100000, mosi=Pin(spi1_mosi),​ sck=Pin(spi1_sck)) 
 +    oled = SSD1306_SPI(128,​ 64, spi, Pin(spi1_dc),​Pin(spi1_rstn),​ Pin(spi1_cs)) 
 +    uart1 = UART(1, baudrate=9600,​ tx=Pin(4), rx=Pin(5)) 
 +    flag = 0 
 +    class GPS(): 
 +        buff = bytearray(270) 
 +        def __init__(self):​ 
 +            self.a = 0 
 +            self.b = 0 
 +            self.array2 = “” 
 +        def read_and_process(self):​ 
 +            buff = uart1.read(1
 +            if buff == None: 
 +                self.b = 0 
 +            else: 
 +                if buff == b'​\n':​ 
 +                    self.a = 1 
 +                if self.a == 1: 
 +                    buff = uart1.read(270) 
 +                    if buff != None: 
 +                        self.array2 = buff[0:6] 
 +                    if self.array2 == b'​GNGGA,':​ 
 +                        self.array2 = buff[7:44
 +                        if self.array2[-1] == 44: ##ascii value ','​  
 +                            flag = 1 
 +                            print(flag) 
 +                            oled.fill(0) 
 +                            oled.show() 
 +                            oled.text(self.array2[10:​22],​0,​0) 
 +                            oled.text(self.array2[23:-1],0,32) 
 +                            oled.show() 
 +    gps = GPS() 
 +    while 1: 
 +        gps.read_and_process() 
 + 
 +