简介
这是一款支持多卫星系统,可多系统联合定位和单系统独立定位的GNSS定位模块。能快速获取经纬度、时间、高度等数据。多系统联合定位相比于传统单一的GPS定位,可见和可用卫星数目大幅增加,能够提高定位精度和定位速度,即使是在复杂城市环境中也能实现稳定的高精度定位。
Gravity: GNSS定位模块,具有I2C和UART两种数据输出类型,兼容Arduino、ESP32、树莓派等主流的主控设备。可用于车载导航、手持定位、物品追踪、气象站等室外定位场景。
注:室内收不到卫星信号,请在户外开阔场地测试,天线陶瓷面朝天放置,首次测试需要几分钟时间搜星。
产品参数
-
工作电压: 3.3~5.5V DC
-
输出信号: I2C/UART
-
定位精度:2.0m CEP
-
首次定位时间:冷启动30S 热启动2S
-
功耗:40mA
-
天线接口:IPEX1
-
天线频率:1561-1575.42MHz±3MHz
-
产品尺寸:27mm*37mm
引脚说明
标号 | 名称 | 功能描述 |
---|---|---|
1 | D/T | I2C数据线SDA/UART数据传输-TX |
2 | C/R | I2C时钟线SCL/UART数据接收-RX |
3 | - | GND电源负极 |
4 | + | 电源正极 |
Arduino使用教程
软硬件准备
- 硬件
- DFRuino UNO R3 x1
- TEL0157 Gravity: GNSS定位模块 x1
- 软件
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_GNSS库。如何安装库?
使用I2C读取数据
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,可以更方便、更快速的完成项目原型搭建。
- 将传感器上的选择开关,拨到I2C一侧。
- 下载并安装DFRobot_GNSS库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。
#include "DFRobot_GNSS.h"
DFRobot_GNSS_I2C gnss(&Wire ,GNSS_DEVICE_ADDR);
/*
#ifdef ESP_PLATFORM
// ESP32 user hardware uart
// RX io16
// TX io17
DFRobot_GNSS_UART gnss(&Serial2 ,9600);
#else
// Arduino user software uart
// RX io10
// TX io11
SoftwareSerial mySerial(10 ,11);
DFRobot_GNSS_UART gnss(&mySerial ,9600);
#endif
*/
void setup()
{
Serial.begin(115200);
while(!gnss.begin()){
Serial.println("NO Deivces !");
delay(1000);
}
gnss.enablePower(); // 使能gnss电源
/** 设置使用的星系
* eGPS 使用 gps
* eBeiDou 使用 beidou
* eGPS_BeiDou 使用 gps + beidou
* eGLONASS 使用 glonass
* eGPS_GLONASS 使用 gps + glonass
* eBeiDou_GLONASS 使用 beidou +glonass
* eGPS_BeiDou_GLONASS 使用 gps + beidou + glonass
*/
gnss.setGnss(eGPS_BeiDou_GLONASS);
// gnss.setRgbOff();
gnss.setRgbOn();
// gnss.disablePower(); // 失能gnss电源,失能后数据不会刷新
}
void loop()
{
sTim_t utc = gnss.getUTC();
sTim_t date = gnss.getDate();
sLonLat_t lat = gnss.getLat();
sLonLat_t lon = gnss.getLon();
double high = gnss.getAlt();
uint8_t starUserd = gnss.getNumSatUsed();
double sog = gnss.getSog();
double cog = gnss.getCog();
Serial.println("");
Serial.print(date.year);
Serial.print("/");
Serial.print(date.month);
Serial.print("/");
Serial.print(date.date);
Serial.print("/");
Serial.print(utc.hour);
Serial.print(":");
Serial.print(utc.minute);
Serial.print(":");
Serial.print(utc.second);
Serial.println();
Serial.println((char)lat.latDirection);
Serial.println((char)lon.lonDirection);
// Serial.print("lat DDMM.MMMMM = ");
// Serial.println(lat.latitude, 5);
// Serial.print(" lon DDDMM.MMMMM = ");
// Serial.println(lon.lonitude, 5);
Serial.print("lat degree = ");
Serial.println(lat.latitudeDegree,6);
Serial.print("lon degree = ");
Serial.println(lon.lonitudeDegree,6);
Serial.print("star userd = ");
Serial.println(starUserd);
Serial.print("alt high = ");
Serial.println(high);
Serial.print("sog = ");
Serial.println(sog);
Serial.print("cog = ");
Serial.println(cog);
Serial.print("gnss mode = ");
Serial.println(gnss.getGnssMode());
delay(1000);
}
结果
打开串口监视器,得到最终的数据。
使用UART读取数据
接线图
样例代码
- 将模块与Arduino按照上方的连线图相连,当然你也可以配合Gravity I/O扩展板使用,可以更方便、更快速的完成项目原型搭建。
- 将传感器上的选择开关,拨到UART一侧。
- 下载并安装DFRobot_GNSS库。如何安装库?
- 打开Arduino IDE,将下面的代码上传到Arduino UNO。
- 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。
/*!
* @file getGNSS.ino
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author ZhixinLiu(zhixin.liu@dfrobot.com)
* @version V0.1
* @date 2022-08-15
* @url https://github.com/dfrobot/DFRobot_GNSS
*/
#include "DFRobot_GNSS.h"
//SoftwareSerial库仅兼容Arduino/ESP8266,如需使用SoftwareSerial,请确保宏定义ARDUINO_AVR_UNO或者ESP8266打开
#define ARDUINO_AVR_UNO
//#define ESP8266
//ESP32需使用HardwareSerial库。如正在使用ESP32,请打开ESP_PLATFORM宏定义以确保以下的if判断宏能够正确进入。
//#define ESP_PLATFORM
#ifdef ESP_PLATFORM
// ESP32 user hardware uart
// RX io16
// TX io17
DFRobot_GNSS_UART gnss(&Serial2 ,9600);
#else
// Arduino user software uart
// RX io10
// TX io11
SoftwareSerial mySerial(10 ,11);
DFRobot_GNSS_UART gnss(&mySerial ,9600);
#endif
void setup()
{
Serial.begin(115200);
while(!gnss.begin()){
Serial.println("NO Deivces !");
delay(1000);
}
gnss.enablePower(); // 使能gnss电源
/** 设置使用的星系
* eGPS 使用 gps
* eBeiDou 使用 beidou
* eGPS_BeiDou 使用 gps + beidou
* eGLONASS 使用 glonass
* eGPS_GLONASS 使用 gps + glonass
* eBeiDou_GLONASS 使用 beidou +glonass
* eGPS_BeiDou_GLONASS 使用 gps + beidou + glonass
*/
gnss.setGnss(eGPS_BeiDou_GLONASS);
// gnss.setRgbOff();
gnss.setRgbOn();
// gnss.disablePower(); // 失能gnss电源,失能后数据不会刷新
}
void loop()
{
sTim_t utc = gnss.getUTC();
sTim_t date = gnss.getDate();
sLonLat_t lat = gnss.getLat();
sLonLat_t lon = gnss.getLon();
double high = gnss.getAlt();
uint8_t starUserd = gnss.getNumSatUsed();
double sog = gnss.getSog();
double cog = gnss.getCog();
Serial.println("");
Serial.print(date.year);
Serial.print("/");
Serial.print(date.month);
Serial.print("/");
Serial.print(date.date);
Serial.print("/");
Serial.print(utc.hour);
Serial.print(":");
Serial.print(utc.minute);
Serial.print(":");
Serial.print(utc.second);
Serial.println();
Serial.println((char)lat.latDirection);
Serial.println((char)lon.lonDirection);
// Serial.print("lat DDMM.MMMMM = ");
// Serial.println(lat.latitude, 5);
// Serial.print(" lon DDDMM.MMMMM = ");
// Serial.println(lon.lonitude, 5);
Serial.print("lat degree = ");
Serial.println(lat.latitudeDegree,6);
Serial.print("lon degree = ");
Serial.println(lon.lonitudeDegree,6);
Serial.print("star userd = ");
Serial.println(starUserd);
Serial.print("alt high = ");
Serial.println(high);
Serial.print("sog = ");
Serial.println(sog);
Serial.print("cog = ");
Serial.println(cog);
Serial.print("gnss mode = ");
Serial.println(gnss.getGnssMode());
delay(1000);
}
结果
打开串口监视器,得到最终的数据。
Mind+使用教程
说明
Mind+1.7.3及以上版本,GNSS北斗定位模块的积木库。
注:室内收不到卫星信号,请在户外开阔场地测试,天线陶瓷面朝天放置,首次测试需要几分钟时间搜星。
- 加载Mind+用户库:https://gitee.com/liliang9693/ext-gravitygnss
积木
-
arduinoC模式arduino uno:
-
Python模式行空板:
程序实例
- Python模式:
常见问题(FAQ)
1.为什么无法获取数据?
答:模块附送了一根天线,把天线接上,然后去阳台或者把模块放到窗户外,天线白色一面朝天空,等待模块上的指示灯由红色变绿色,代表模块搜星成功。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。