差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
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() | ||
+ | |||
+ | |||