致力于提升旅行体验,这一解决方案作为指导灯塔,照亮路线和目的地,增强探索的信心。
A
A
硬件概览
它是如何工作的?
GPS Click 基于来自 u-blox 的高性能定位引擎模块 LEA-6S。这款多功能的独立接收器 LEA-6S 结合了广泛的功能和灵活的连接选项。其易于集成的特性使得各种汽车和工业应用能快速上市。定位引擎包括冷启动导航、AssistNow Autonomous 以加快定位获取、可配置的电源管理、混合 GPS/SBAS 引擎(WAAS、EGNOS、MSAS)以及抗干扰技术。GPS 模块需要一个 SMA GPS 天线用于 GPS 应用,可以单独从 Mikroe 购买。不同的电源模式(最大性能、Eco、省电模式)允许您控制获取和跟踪引擎,以平衡性能和功耗。在冷启动期间,处于最大性能模式的接收器会持续部署获取引擎来搜索所有卫星。一旦接收器获得位置修正(或者如果有预定位信息可用),获取引擎将继续搜索所有未被跟踪的可见卫星。在 Eco 模式下
的冷启动过程与最大性能模式完全相同。一旦能够计 算出位置并跟踪到足够数量的卫星,获取引擎就会关闭,从而显著节省电力。跟踪引擎将持续跟踪已获取的卫星并获取其他可用或新出现的卫星。即使获取引擎关闭,卫星仍将继续被获取。省电模式通过选择性地开启和关闭接收器部分来减少系统功耗。GPS Click 可以同时跟踪多达 16 颗卫星,同时搜索新的卫星。LEA-6S 模块的 TTFF(首次定位时间)少于一秒——这是 GPS 接收器获取卫星信号和导航数据,并基于这些信息计算位置(修正)所需的时间。GPS Click 配备了一个 TIME PULSE LED 作为 1PPS LED 来实现此功能。Time Pulse 的准确性为 99%,其频率范围可从 0.25Hz 调整至 1kHz。Time Pulse 也可以通过 mikroBUS™ 插座的 TP 引脚进行跟踪。GPS
Click 默认与主机 MCU 通信使用标准的 2 线 UART 接口,常用 UART RX 和 TX 支持 4800 和 9600bps,具体取决于设置。还可以使用与 I2C 兼容的显示数据通道(DDC)与主机 MCU 接口。它是符合标准模式的,最大带宽为 100kbps。另一方面,GPS Click 支持 1.2Mbps 的全速 USB 2.0。如果出现这种情况,您可以通过 RST 引脚重置模块。此 Click 板™ 只能在 3.3V 逻辑电压水平下操作。在使用具有不同逻辑水平的 MCU 之前,板必须执行适当的逻辑电压水平转换。此外,这款 Click 板™ 配备了一个包含易于使用的功能和示例代码的库,可用作进一步开发的参考。
功能概述
开发板
Arduino UNO 是围绕 ATmega328P 芯片构建的多功能微控制器板。它为各种项目提供了广泛的连接选项,具有 14 个数字输入/输出引脚,其中六个支持 PWM 输出,以及六个模拟输入。其核心组件包括一个 16MHz 的陶瓷谐振器、一个 USB 连接器、一个电
源插孔、一个 ICSP 头和一个复位按钮,提供了为板 子供电和编程所需的一切。UNO 可以通过 USB 连接到计算机,也可以通过 AC-to-DC 适配器或电池供电。作为第一个 USB Arduino 板,它成为 Arduino 平台的基准,"Uno" 符号化其作为系列首款产品的地
位。这个名称选择,意为意大利语中的 "一",是为了 纪念 Arduino Software(IDE)1.0 的推出。最初与 Arduino Software(IDE)版本1.0 同时推出,Uno 自此成为后续 Arduino 发布的基础模型,体现了该平台的演进。
微控制器概述
MCU卡片 / MCU
建筑
AVR
MCU 内存 (KB)
32
硅供应商
Microchip
引脚数
32
RAM (字节)
2048
你完善了我!
配件
Arduino Mega 的 Click Shield 配备了四个 mikroBUS™ 插槽,其中两个是 Shuttle 连接器,允许所有的 Click board™ 设备与 Arduino Mega 板轻松连接。Arduino Mega 板采用了AVR 8位微控制器,具有先进的RISC架构,54个数字 I/O 引脚,并且兼容 Arduino™,为原型设计和创建多样化应用提供了无限的可能性。该板通过 USB 连接方便地进行控制和供电,以便在开箱即用时高效地对 Arduino Mega 板进行编程和调试,另外还需要将额外的 USB 电缆连接到板上的 USB B 端口。通过集成的 ATmega16U2 程序器简化项目开发,并利用丰富的 I/O 选项和扩展功能释放创造力。有八个开关,您可以将其用作输入,并有八个 LED,可用作 MEGA2560 的输出。此外,该 shield 还具有来自 Microchip 的高精度缓冲电压参考 MCP1501。该参考电压默认通过板底部的 EXT REF 跳线选择。您可以像通常在 Arduino Mega 板上那样选择外部参考电压。还有一个用于测试目的的 GND 钩子。另外,还有四个额外的 LED,分别是 PWR、LED(标准引脚 D13)、RX 和 TX LED,连接到 UART1(mikroBUS™ 1 插槽)。此 Click Shield 还具有几个开关,执行诸如选择 mikroBUS™ 插槽上模拟信号的逻辑电平以及选择 mikroBUS™ 插槽本身的逻辑电压级别等功能。此外,用户还可以使用现有的双向电平转换器,无论 Click board™ 是否以3.3V或5V逻辑电压级别运行,都可以使用任何 Click board™。一旦您将 Arduino Mega 板与 Click Shield for Arduino Mega 连接,就可以访问数百个使用3.3V或5V逻辑电压级别工作的 Click board™。
主动 GPS 天线旨在提升您的 GPS 和 GNSS Click 板™的性能。这款外部天线拥有坚固的构造,非常适合各种天气条件。其频率范围为 1575.42MHz,阻抗为 50Ohm,确保了可靠的信号接收。天线在广泛的角度范围内提供高于 -4dBic 的增益,确保超过 75% 的覆盖范围。其 +/- 5MHz 的带宽进一步保证了精确的数据获取。天线采用右旋圆极化(RHCP),提供稳定的信号接收。其紧凑的尺寸为 48.53915mm,配备 2 米长的电缆,便于安装。磁性天线类型配有 SMA 男性连接器,确保了安全方便的连接。如果您需要一款可靠的外部天线来配合您的定位设备,我们的主动 GPS 天线是完美的解决方案。
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
原理图
一步一步来
项目组装
实时跟踪您的结果
通过调试模式的应用程序输出
1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。
2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。
软件支持
库描述
此库包含 GPS Click 驱动程序的 API。
关键功能:
gps_generic_parser
- 通用解析函数gps_generic_read
- 通用读取函数gps_module_wakeup
- 唤醒模块函数
开源
代码示例
这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。
/*!
* \file
* \brief Gps Click example
*
* # Description
* This example reads and processes data from GPS clicks.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes driver and wake-up module.
*
* ## Application Task
* Reads the received data and parses it.
*
* ## Additional Function
* - gps_process ( ) - The general process of collecting data the module sends.
*
*
* \author MikroE Team
*
*/
// ------------------------------------------------------------------- INCLUDES
#include "board.h"
#include "log.h"
#include "gps.h"
#include "string.h"
#define PROCESS_COUNTER 15
#define PROCESS_RX_BUFFER_SIZE 600
#define PROCESS_PARSER_BUFFER_SIZE 600
// ------------------------------------------------------------------ VARIABLES
static gps_t gps;
static log_t logger;
static char current_parser_buf[ PROCESS_PARSER_BUFFER_SIZE ];
// ------------------------------------------------------- ADDITIONAL FUNCTIONS
static void gps_process ( void )
{
int32_t rsp_size;
uint16_t rsp_cnt = 0;
char uart_rx_buffer[ PROCESS_RX_BUFFER_SIZE ] = { 0 };
uint16_t check_buf_cnt;
uint8_t process_cnt = PROCESS_COUNTER;
// Clear parser buffer
memset( current_parser_buf, 0 , PROCESS_PARSER_BUFFER_SIZE );
while( process_cnt != 0 )
{
rsp_size = gps_generic_read( &gps, &uart_rx_buffer, PROCESS_RX_BUFFER_SIZE );
if ( rsp_size > 0 )
{
// Validation of the received data
for ( check_buf_cnt = 0; check_buf_cnt < rsp_size; check_buf_cnt++ )
{
if ( uart_rx_buffer[ check_buf_cnt ] == 0 )
{
uart_rx_buffer[ check_buf_cnt ] = 13;
}
}
// Storages data in parser buffer
rsp_cnt += rsp_size;
if ( rsp_cnt < PROCESS_PARSER_BUFFER_SIZE )
{
strncat( current_parser_buf, uart_rx_buffer, rsp_size );
}
// Clear RX buffer
memset( uart_rx_buffer, 0, PROCESS_RX_BUFFER_SIZE );
}
else
{
process_cnt--;
// Process delay
Delay_100ms( );
}
}
}
static void parser_application ( char *rsp )
{
char element_buf[ 200 ] = { 0 };
log_printf( &logger, "\r\n-----------------------\r\n" );
gps_generic_parser( rsp, GPS_NEMA_GPGGA, GPS_GPGGA_LATITUDE, element_buf );
if ( strlen( element_buf ) > 0 )
{
log_printf( &logger, "Latitude: %.2s degrees, %s minutes \r\n", element_buf, &element_buf[ 2 ] );
gps_generic_parser( rsp, GPS_NEMA_GPGGA, GPS_GPGGA_LONGITUDE, element_buf );
log_printf( &logger, "Longitude: %.3s degrees, %s minutes \r\n", element_buf, &element_buf[ 3 ] );
memset( element_buf, 0, sizeof( element_buf ) );
gps_generic_parser( rsp, GPS_NEMA_GPGGA, GPS_GPGGA_ALTITUDE, element_buf );
log_printf( &logger, "Altitude: %s m", element_buf );
}
else
{
log_printf( &logger, "Waiting for the position fix..." );
}
}
// ------------------------------------------------------ APPLICATION FUNCTIONS
void application_init ( void )
{
log_cfg_t log_cfg;
gps_cfg_t cfg;
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, "---- Application Init ----" );
// Click initialization.
gps_cfg_setup( &cfg );
GPS_MAP_MIKROBUS( cfg, MIKROBUS_1 );
gps_init( &gps, &cfg );
gps_module_wakeup( &gps );
Delay_ms( 5000 );
}
void application_task ( void )
{
gps_process( );
parser_application( current_parser_buf );
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END