差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
gps [2023/07/23 20:18]
lijiran
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 |}}
  
  
行 52: 行 57:
 ### 4. 主要的GPS供应商 ### 4. 主要的GPS供应商
  
-  ​- [[https://​www.garmin.com.cn/​|Garmin]] + **- [[https://​www.garmin.com.cn/​|Garmin]]** 
-  - [[https://​www.u-blox.com/​zh/​|UBlox]] + 
-  - [[https://​www.motorolasolutions.com/zh_cn.html|Motorola]] +Garmin是一家总部位于美国的跨国科技公司,成立于1989年。该公司专注于设计、制造和销售各种全球定位系统(GPS)产品,包括手持式导航设备、智能手表、运动追踪器、航空设备和汽车导航系统等。 
-  - [[https://www.nxp.com|NXP]]+Garmin的产品广泛应用于航空、航海、汽车、户外运动和健身等领域。公司的产品以其高精度、可靠性和创新性而闻名,被广泛使用于个人消费者、专业人士和军事领域。 
 + 
 + ​** ​- [[https://​www.u-blox.com/​zh/​|UBlox]]** 
 + 
 +UBlox是一家瑞士的全球领先的无线通信和定位技术提供商。该公司成立于1997年,总部位于瑞士的蒙特勒。UBlox专注于提供高精度、高可靠性的定位和导航解决方案,包括全球卫星导航系统(GNSS)接收器、芯片组和软件。 
 +UBlox的产品广泛应用于汽车导航、智能交通系统、物联网、航空航天、农业、测绘、无人机等领域。公司的产品包括GNSS接收器、GNSS芯片组、GNSS模块、GNSS天线、数据链路模块、无线通信模块等。 
 + 
 + 
 + **- [[https://​www.nxp.com|NXP]]** 
 + 
 +NXP公司全称为恩智浦半导体公司,它成立于2006年,其前身是荷兰飞利浦公司于1953年成立的半导体事业部。恩智浦总部位于荷兰埃因霍温,并在全球30个国家和地区设有办事处,员工人数超过30000人。 
 +恩智浦提供低成本、便携式GPS设备完整解决方案,包括软件和硬件方面。通过swGPS Personal软件实现GPS计算,从而取代了一个GPS基带处理器,降低了材料清单成本并支持现场升级。 
 + 
 + 
 + **- [[https://sirf.ngo/|SiRF]]** 
 + 
 +SiRF公司是一家全球领先的定位芯片供应商,成立于1995年,总部位于美国加州的圣荷西市。SiRF专注于研发、制造和销售GPS芯片和软件产品,其GPS芯片和软件产品广泛应用于移动设备、汽车、个人电脑、服务器和其他嵌入式设备中。SiRF公司在全球拥有众多客户和合作伙伴,包括GPS模块厂商、移动设备制造商、汽车制造商等。
  
  
行 63: 行 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() 
 + 
 +