Skip to main content

用于 SeeedStudio XIAO 的 L76K GNSS 模块入门

介绍

SeeedStudio XIAO的L76K GNSS模块是一款多GNSS(全球导航卫星系统)模块,兼容所有XIAO开发板,支持GPS、北斗(BDS)、GLONASS和QZSS系统,支持多系统组合或单系统独立定位。它还支持AGNSS功能,内置低噪声放大器和表面声波滤波器,提供快速、精确、高性能的良好定位体验。

该模块配备了一款高性能的主动GNSS天线,旨在覆盖GPS L1 C/A、北斗B1和GLONASS L1频段。设计中还包含了一颗亮绿色LED,用于指示固定时的1PPS输出。

特点

  • 增强接收性能: 内置低噪声放大器和表面声波滤波器,提升灵敏度并减少噪声
  • 高精度: 32/72个通道,-162dBm跟踪,-160dBm重新获取灵敏度
  • 能效: 41mA跟踪/获取,360µA待机
  • 多GNSS系统: 采用Quectel L76K,支持GPS、北斗、GLONASS和QZSS
  • 陶瓷天线: 增强信号接收,优于传统天线。

规格

项目详细信息
GNSS频段GPS L1 C/A: 1575.42MHz
GLONASS L1: 1602MHz
北斗B1: 1561.098MHz
通道数32个跟踪通道/72个获取通道
TTFF(首次定位时间)冷启动:30秒(无AGNSS),5.5秒(有GNSS)
热启动:5.5秒(无AGNSS),2秒(有AGNSS)
灵敏度自动获取:-148dBm
跟踪:-162dBm
重新获取:-160dBm
精度定位:2.0m CEP
速度:0.1m/s
加速度:0.1m/s²
定时:30ns
UART接口波特率:9600~115200bps(默认9600bps)
更新率:1Hz(默认),5Hz(最大)
协议:NMEA 0183,CASIC专有协议
天线类型:主动天线
工作频率:1559–1606MHz
同轴电缆:RF1.13,长度=10cm
电缆连接器:U.FL接头RA
功耗(带主动天线)自动获取:41mA
跟踪:41mA
待机:360µA
尺寸18mm x 21mm

硬件概述

在开始之前,我们可以参考以下图片,了解SeeedStudio XIAO的L76K GNSS模块的引脚设计,帮助我们理解该模块的功能。

入门指南

硬件准备

为了充分体验L76K GNSS模块的功能,我们建议将其与XIAO系列的主板配合使用。以下任意型号的XIAO都可以与L76K GNSS模块兼容:

Seeed Studio XIAO SAMD21Seeed Studio XIAO RP2040Seeed Studio XIAO nRF52840 (Sense)Seeed Studio XIAO ESP32C3Seeed Studio XIAO ESP32S3 (Sense)

在使用此模块与XIAO主板配合之前,您需要在模块上安装引脚座,并将主动GNSS天线连接到模块上。在连接到XIAO时,请特别注意模块的安装方向,请勿反向插入,否则可能会烧毁模块或XIAO。

caution

请特别注意模块的安装方向,请勿反向插入,否则可能会烧毁模块或XIAO。

软件准备

要使用SeeedStudio XIAO的L76K GNSS模块,我们需要对XIAO系列进行编程。推荐的编程工具是Arduino IDE,您需要为XIAO配置Arduino环境并添加板载软件包。

tip

如果这是您第一次使用Arduino,强烈建议您参考Arduino入门指南

步骤1:根据您的操作系统下载并安装Arduino IDE的稳定版本

步骤2:启动Arduino应用程序

步骤3:为您使用的XIAO配置Arduino IDE

  • 如果您想使用Seeed Studio XIAO SAMD21进行后续程序,请参考此教程完成添加。

  • 如果您想使用Seeed Studio XIAO RP2040进行后续程序,请参考此教程完成添加。

  • 如果您想使用Seeed Studio XIAO nRF52840进行后续程序,请参考此教程完成添加。

  • 如果您想使用Seeed Studio XIAO ESP32C3进行后续程序,请参考此教程完成添加。

  • 如果您想使用Seeed Studio XIAO ESP32S3进行后续程序,请参考此教程完成添加。

步骤4:将TinyGPSPlus库添加到Arduino

首先,您需要在Arduino IDE中搜索并下载最新版本的TinyGPSPlus库。

应用示例

示例1:读取并显示GNSS数据

硬件和软件准备好之后,我们可以开始上传第一个示例程序。L76K GNSS模块在上电后每秒通过串口输出一次GNSS信息。在此示例中,我们将使用TinyGPSPlus库解析从模块接收到的NMEA句子,并将结果(包括纬度、经度和时间)打印到Arduino IDE的串口监视器。

以下是源代码:

#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
/*
这个示例代码演示了如何在SeeedStudio XIAO上使用L76K GNSS模块。
*/
static const int RXPin = D7, TXPin = D6;
static const uint32_t GPSBaud = 9600;

// TinyGPSPlus对象
TinyGPSPlus gps;

// 与GNSS模块的串口连接
SoftwareSerial ss(RXPin, TXPin);

void setup() {
Serial.begin(115200);
#ifdef ARDUINO_SEEED_XIAO_RP2040
pinMode(D10,OUTPUT);
digitalWrite(D10,1);
pinMode(D0,OUTPUT);
digitalWrite(D0,1);
#endif
ss.begin(GPSBaud);

Serial.println(F("DeviceExample.ino"));
Serial.println(F("一个使用TinyGPSPlus与L76K GNSS模块的简单示范"));
Serial.print(F("测试TinyGPSPlus库版本:"));
Serial.println(TinyGPSPlus::libraryVersion());
Serial.println(F("由Mikal Hart提供"));
Serial.println();
}

void loop() {
// 每次正确编码一个新的句子时,显示信息
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10) {
Serial.println(F("没有检测到GPS:请检查连接。"));
while (true);
}
}

void displayInfo() {
Serial.print(F("Location: "));
if (gps.location.isValid()) {
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
} else {
Serial.print(F("INVALID"));
}

Serial.print(F(" Date/Time: "));
if (gps.date.isValid()) {
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
} else {
Serial.print(F("INVALID"));
}

Serial.print(F(" "));
if (gps.time.isValid()) {
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
} else {
Serial.print(F("INVALID"));
}

Serial.println();
}

只需选择您使用的XIAO板和XIAO所在的端口号,编译并上传代码。

确保L76K GNSS模块放置在可以接收到良好GNSS信号的户外环境中。上传代码到您的XIAO并等待几分钟,您应该会在串口监视器中看到显示的信息。

此代码使用TinyGPSPlus库通过串口连接从L76K GNSS模块读取数据,并在串口监视器上显示有效的位置信息和日期/时间。

配置

示例1:改变LED的行为

本节演示了如何通过串口通信发送特定的十六进制命令来控制一个绿色LED。下面的示例展示了如何关闭LED,然后将其恢复到正常的闪烁状态。

static const int RXPin = D7, TXPin = D6;
static const uint32_t GPSBaud = 9600;
SoftwareSerial SerialGNSS(RXPin, TXPin);

void setup() {
SerialGNSS.begin(GPSBaud);

// 定义关闭LED的字节数组
byte OffState[] = {0xBA, 0xCE, 0x10, 0x00, 0x06, 0x03, 0x40,
0x42, 0x0F, 0x00, 0xA0, 0x86, 0x01, 0x00,
0x00,
0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00,
0xF0,
0xC8, 0x17, 0x08};

// 定义恢复LED闪烁状态的字节数组
byte RecoverState[] = {0xBA, 0xCE, 0x10, 0x00, 0x06, 0x03, 0x40,
0x42, 0x0F, 0x00, 0xA0, 0x86, 0x01, 0x00,
0x03,
0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00,
0xF3,
0xC8, 0x17, 0x08};

// 发送关闭LED的命令
SerialGNSS.write(OffState, sizeof(OffState));
// 等待5秒
delay(5000);
// 发送恢复LED闪烁状态的命令
SerialGNSS.write(RecoverState, sizeof(RecoverState));
}

void loop() {}
info

有关详细信息,请参阅 Quectel_L76K_GNSS 的 CASIC 协议消息。

struct CASIC_Messages {  
uint16_t header; // 0xBA, 0xCE
uint16_t len; // 0x10, 0x00
uint8_t class; // 0x06
uint8_t id; // 0x03
uint8_t* payload; // 0x40, 0x42, 0x0F, 0x00, 0xA0, 0x86, 0x01, 0x00, ->8
// 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, ->8
uint8_t checksum; // 0xF0,0xC8, 0x17, 0x08
} L76KStruct;

资源

故障排除

可充电电池能为 XIAO 供电吗?
不能,本文中的可充电电池仅用于实时时钟(RTC)和维持 L76K GNSS 模块的热启动状态。它不能作为 XIAO 或 GNSS 模块的一般操作的主要电源。
为什么 GNSS 信息不显示在串口监视器上?

确保将 L76K GNSS 模块放置在户外,确保可以接收到良好的 GNSS 信号。

为什么设备的绿色指示灯在插入 XIAO RP2040 后一直亮着?
为了解决此问题,您需要将 D0 和 D10 拉高。绿色指示灯持续亮起表示设备已进入异常工作状态。
pinMode(D10,OUTPUT);
digitalWrite(D10,1);
pinMode(D0,OUTPUT);
digitalWrite(D0,1);

技术支持和产品讨论

感谢您选择我们的产品!我们致力于为您提供不同的支持,以确保您对我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...