UBloxGPS.swift

一个用于搭载 u-Blox 6/7/8 系列 A-GPS 接收器并使用 UART 串行连接的开发板的 Swift 库。

Linux-only Swift 4 compatible License: MIT

摘要

该库接口连接基于 u-Blox 6/7/8 A-GPS 接收器的开发板,这些开发板使用 NMEA0183 协议通过 UART 串行连接提供 GPS 数据(对于低成本选项,可以搜索通常花费约 20 美元的基于 NEO6M 的开发板)。目前不支持 UBX 配置命令和通过 I2C 的连接。

您将能够检索您当前的location、海拔、速度、当前可连接卫星的状态数据等。

首次使用接收器时,它需要几分钟才能找到一些卫星并提供位置,但在此之后,只需几秒钟即可获得有效位置。

NEO6M board

支持的开发板

所有 SwiftyGPIO 支持且支持 UART 接口的开发板。

要使用此库,您需要一个运行 Swift 3.x 的 Linux ARM 开发板。

下面的示例将使用 RaspberryPi 2 开发板,但您可以轻松修改示例以使用其他支持的开发板之一。在 Examples 目录中提供了一个适用于 RaspberryPi 2 的完整工作演示项目。

用法

如果您使用的是 RaspberryPi,请运行 raspi-config 并启用串行端口,但禁用 Interfacing Options > Serial 中的 Linux 登录支持。

我们需要做的第一件事是从 SwiftyGPIO 获取 UARTInterface 的实例,并使用它来初始化 UBloxGPS 对象

import SwiftyGPIO
import UBloxGPS

let uarts = SwiftyGPIO.UARTs(for:.RaspberryPi2)!
var uart = uarts[0]

let gps = UBloxGPS(uart)

然后我们必须启动后台线程,该线程将通过调用 startUpdating 来更新 GPS 位置和其他信息。该库允许使用 printStatus 打印所有可用数据的快速概览

gps.startUpdating()

// We'll simply clear the screen and print a recap of the current gps data
while true {
   system("clear")
   gps.printStatus()
   sleep(2)
}

UBloxGPS 对象有一些可访问的属性,您可以使用它们来检索您需要的特定数据

属性 描述
isDataValid 当前 GPS 数据是否有效?当获得有效位置时为 True
datetime 日期和时间,字符串格式
latitude 纬度,以度为单位
longitude 经度,以度为单位
satellitesNum 可见卫星数量
satellitesActiveNum 活动卫星数量(可见且信号强度足以使用的卫星)
altitude 海拔高度,相对于海平面
altitudeUnit 海拔高度单位
satellites 有关当前在视线范围内的卫星的信息(最多 12 颗),该结构包含:数字 ID、仰角(0..60 度)、方位角(0..360 度)和 snr(dB) 值,用于指示影响信号的噪声

当您不再需要更新位置数据或暂停更新时,只需调用 stopUpdating()

安装

有关 Swift 安装说明,请参阅 SwiftyGPIO 的 readme 文件。

一旦您的开发板运行 Swift,如果您的版本支持 Swift Package Manager,您可以简单地将此库添加为项目的依赖项,并使用 swift build 进行编译

  let package = Package(
      name: "MyProject",
      dependencies: [
    .Package(url: "https://github.com/uraimo/UBloxGPS.swift.git", majorVersion: 1),
    ...
      ]
      ...
  ) 

Examples 目录包含使用 SPM 的示例项目,编译它并使用 ./.build/debug/TestNEO6M 运行示例。

如果不支持 SPM,您需要手动下载该库及其依赖项

wget https://raw.githubusercontent.com/uraimo/UBloxGPS.swift/master/Sources/UBloxGPS.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SwiftyGPIO.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/Presets.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/UART.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SunXi.swift  

一旦所有文件都已下载,创建一个额外的文件,其中将包含您的应用程序代码(例如 main.swift)。当您的代码准备就绪后,使用以下命令编译它

swiftc *.swift

编译器将创建一个 main 可执行文件。