Skip to main content

Wio Tracker - GPS、BT3.0、GSM、Arduino兼容

什么是Wio Tracker?Wio Tracker是一款Arduino兼容的开发板,可以帮助您追踪地球上任何移动的物体。通过在一块板上集成GSM&GPRS以及GPS&北斗,它为您的户外物联网项目提供了一体化解决方案。

如果您关注低功耗广域网络(LPWAN)的最新消息,您可能知道2016年是特殊的一年,因为出现了LoRa和Sigfox等新技术,显著推动了WAN的发展。Wio Tracker与LoRa和Sigfox有相似之处,但也有很大不同。它更适合户外移动追踪和具有高频客户交互和中等数据量的场景,例如共享单车、物流定位、宠物追踪。

与传统的GPS追踪解决方案相比,Seeed的Wio Tracker在快速变化的物联网市场中更易于使用和定制。作为一款用户友好的Grove开发板,Wio Tracker的外观可能会让您想起Wio Link,这是Seeed的另一款明星产品。因此您也可以在板上找到6个grove连接器。作为Arduino兼容板,用户可以直接在Arduino IDE中使用Wio Tracker。

为什么我们称Wio Tracker为解决方案,因为它真的不仅仅是一块板。在SeeedStudio,我们有能力帮助客户为他们自己的项目定制Wio Tracker,并完成从项目到批量生产的全过程。由于Wio Tracker使用的是批量生产的标准模块,即使客户还在原型阶段,我们也已经准备好批量生产。

我们已经准备好了一切,最后需要的就是您的创意项目,所以如果您正在制作户外物联网追踪项目,请不要犹豫使用Wio Tracker!

caution

请始终插入3.7V锂电池,以防USB电源供应不足。

特性

  • 多GNSS引擎,结合GPS和北斗,更高精度定位
  • EPO™技术,提供预测的扩展预测轨道,无需额外服务器即可加速TTFF
  • 基于EPO™数据,QuecFastFix™在线功能进一步减少冷启动TTFF,使冷启动TTFF与热启动相当
  • GLP(GNSS低功耗)模式,正常模式40%功耗,精度略低
  • 周期模式,通过控制睡眠时间也可降低功耗
  • Always Locate™技术,节能智能算法
  • Easy™(嵌入式辅助系统)技术,自生成轨道预测用于即时定位修复,减少首次定位时间(TTFF)
  • LOCUS™技术,无需主机和外部闪存的内置导航数据记录器解决方案
  • AT命令:GSM 07.07、07.05和增强AT命令
  • 蓝牙3.0,支持SPP和HFP-AG
  • 6个Grove连接器
  • Nano SIM和TF卡二合一插槽
  • Arduino IDE兼容
  • 低功耗和小尺寸

Quectel MC20模块

  • 超紧凑尺寸:18.7 × 16.0 × 2.1mm
  • 多导航星座:GPS/北斗/QZSS
  • GNSS接收器通道:99个捕获/33个跟踪通道
  • 强大的AGPS功能:自主AGPS EASY™/离线AGPS EPO™/在线AGPS QuecFastFix
  • 内置LNA,提供更好的GNSS灵敏度(-167dBm@跟踪):能够使用无源GNSS天线,无需任何额外LNA
  • 增强的GNSS功能:SDK命令/AIC/LOCUS/GLP
  • GSM四频:850/900/1800/1900MHz
  • 多种互联网协议:TCP/UDP/PPP/HTTP/FTP/SSL
  • 支持语音、短信、QuecFOTATM、DSSS、OpenCPU
  • 支持蓝牙V3.0:SPP和HFP-AG配置文件
caution

与大多数Arduino和Genuino板不同,Wio Tracker运行在3.3V。I/O引脚能承受的最大电压是3.3V。对任何I/O引脚施加高于3.3V的电压可能会损坏板子。

规格参数

项目功能数值
微控制器处理器ATSAMD21G18A-MU, ARM Cortex-M0+, 48MHz
闪存256KB
SRAM32KB
工作电压3.3V
每个I/O引脚直流电流7 mA
时钟速度48 MHz
GSM/GPRSGSM850/900/1800/1900MHz, Class 4 (2W @850/900MHz), Class 1 (1W @1800/1900MHz)
AT命令: GSM 07.07, 07.05 和增强AT命令
低功耗: 1.2mA@DRX=5
GPRSGPRS多时隙Class 12: 下行85.6kbps, 上行85.6kbps
协议: TCP/UDP/FTP/HTTP/PPP/SSL
SMS点对点消息, SMS广播, 文本和PDU模式
音频回声消除, 噪声消除
蓝牙蓝牙 3.0: SPP, HFP-AG
GNSS系统GPS L1 1575.42MHz, 北斗 B1 1561.10MHz
精度<2.5 m CEP
技术EASY/LOCUS/AlwaysLocate/EPO/GLP/AIC
外设Grove2 x Grove 数字端口
2 x 模拟端口
1 x UART
1 x I2C
天线GSM天线
蓝牙天线
GNSS天线
其他USB: 电源供应和程序上传
JST 1.0连接器用于电池
3.5mm音频插孔
GSM电源按钮, 复位按钮
1 x 用户RGB LED SK6812
扬声器接口
Nano SIM和TF卡二合一插槽
尺寸长度54.7mm
宽度48.2mm
重量

应用场景

  • 智能交通
  • 宠物追踪器
  • 户外运动设备
  • 行车记录仪
  • 可穿戴设备
  • 财产安全
tip

使用Grove模块扩展您的应用

板载有6个Grove连接器。如果这是您第一次听说Grove,请查看Grove系统了解更多详情。 简而言之,Grove是数百种标准化传感器,包括传感器、执行器、显示器以及通信模块。

硬件概览

tip

如果您想使用板载Grove连接器,请使用digitalWrite(12, HIGH)来开启3V3_B。否则您无法为Grove模块供电。

引脚映射

引脚名称外部中断PWM模拟输入模拟输出功能
RXYESYESGrove UART
TXYESYESGrove UART
D2YESYESGrove 数字
D3YESYESGrove 数字
D4YESGrove 数字
D5YESYESGrove 数字
D6YES用户LED控制
D7YESMC20电源
D10YESYES用户LED
D11YESYES检测耳机
D12YESYESGrove电源控制
D13YESYESGSM电源按钮
SDAYESGrove I2C
SCLYESGrove I2C
A0YESYESYESGrove 模拟
A1YESYESYESGrove 模拟
A2YESYESYESGrove 模拟
A3YESYESYESGrove 模拟
A4YESYES检测电池
note

所有引脚都可以作为数字输入和输出

开始使用 - Arduino IDE

note

本章基于 Win10 和 Arduino IDE v1.6.0

首先您需要安装最新的 Arduino IDE,并将 Seeeduino SAMD 添加到您的 Arduino IDE

安装驱动程序(适用于 Windows)

第一次插入开发板时,您应该会看到一个名为 Wio Tracker 的 USB COM 设备,需要安装驱动程序。点击这里下载开发板的驱动程序。

为了确保驱动程序安装成功,请打开设备管理器查看是否存在 Wio Tracker

安装 Wio Tracker 库(适用于 Windows、Linux 和 Mac)

点击这里下载 Wio Tracker 的库文件(zip 文件),并将 zip 库导入到您的 Arduino IDE 中。如果您是新手,请点击这里获取更多信息。

闪烁

与其他开发板不同,Wio Tracker 上有一个用户 LED SK6812,这是一个智能控制 LED 光源,类似于 ws2812b。现在我们将上传第一个演示程序 - Blink 到 Wio Tracker,这将介绍如何使用用户 LED。

首先,我们必须安装 Adafruit NeoPixel Library(用于 ws2812b LED)并将其导入到 Arduino IDE 中。

然后打开您的 Arduino IDE,点击 File > Examples > MC20_GPS_Traker > Blink 打开示例程序,或复制以下代码:

#include "MC20_Arduino_Interface.h"
#include <Adafruit_NeoPixel.h>

#define RGBPOWER 6 //To use User LED, D6 should be HIGH.
#define RGBPIN 10
#define LED_NUM 1

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LED_NUM, RGBPIN, NEO_GRB + NEO_KHZ800);

void setup() {
pinMode(RGBPOWER, OUTPUT);
digitalWrite(RGBPOWER, HIGH);
pixels.begin(); // This initializes the NeoPixel library.
}

void loop() {

// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(0, pixels.Color(0,0,100)); // Moderately bright blue color.
pixels.show(); // This sends the updated pixel color to the hardware.
delay(1000); // Wait for 1 second
pixels.setPixelColor(0, pixels.Color(0,0,0)); // Turn off the led.
pixels.show();
delay(1000);
}

然后,

  • 点击 Tools > Board > Wio Tracker
  • 点击 Tools > Port 选择正确的端口号。(不要选择 COM1

然后点击 Arduino IDE 左上角的 Upload 按钮,几秒钟后示例程序就会上传成功。

如果上传成功,您应该会看到一些红色信息,并且您会看到用户 LED 以蓝色闪烁。

检查电池

Wio Tracker 专为户外移动物体跟踪而设计。因此您可以通过带有 JST1.0 连接器的 3.7V 锂电池为开发板供电,并轻松检查电池电压。

caution

确保电池的正负极连接正确,否则开发板可能会损坏。

电池状态引脚已连接到 A4,这允许您通过编程测量电池电压。

打开您的 Arduino IDE,点击 File > Examples > MC20_GPS_Traker > Check_Battery 打开示例程序,或复制以下代码:

#include "MC20_Arduino_Interface.h"

const int pin_battery_voltage = A4;

void setup() {
SerialUSB.begin(115200);
}

void loop() {

int a = analogRead(pin_battery_voltage);
float v = a/1023.0*3.3*2.0; // there's an 10M and 10M resistor divider
SerialUSB.print("The voltage of battery is ");
SerialUSB.print(v, 2);
SerialUSB.println(" V");
delay(1000);
}

使用 Grove 模块扩展您的应用

要使用 Wio Tracker 上的 6 个 Grove 连接器,我们必须使用 digitalWrite(12, HIGH) 打开 3V3_B 为 Grove 模块供电(D12 默认为 LOW 以减少功耗)。

  • 以下代码显示如何使用模拟和数字 Grove 模块:

打开您的 Arduino IDE,点击 File > Examples > MC20_GPS_Traker > Button_LightSensor 打开示例程序,或复制以下代码:

#include "MC20_Arduino_Interface.h"

#define GrovePowerPin 12
#define LightSensorPin A0
#define ButtonPin 2


void setup() {
SerialUSB.begin(115200);
pinMode(ButtonPin, INPUT);
pinMode(GrovePowerPin, OUTPUT);
// write high to grove power pin to enable all the Grove ports,
// or only Grove D2 port is usable.
digitalWrite(GrovePowerPin, HIGH);
}

void loop() {
// print analog data when the button is pressed
if (digitalRead(ButtonPin)) {
SerialUSB.print("The value of light sensor:");
SerialUSB.println(analogRead(LightSensorPin));
}
delay(500);
}
  • 以下代码显示如何使用 Grove UART 端口:
#define GrovePowerPin   12

void setup() {
pinMode(GrovePowerPin, OUTPUT);
digitalWrite(GrovePowerPin, HIGH); //power Grove
//SerialUSB.begin(115200);
SerialDBG.begin(115200); //set Grove UART baud rate 115200
}

void loop() {
//SerialUSB.println("Grove UART is sending message");
SerialDBG.println("This is Grove UART");
delay(1000);
}

请使用 USB To Uart 读取 Grove UART 端口数据。

caution

如果代码中同时使用了 SerialUSB 和 SerialDBG,请在使用时打开 SerialUSB 的 com 端口,否则 SerialDBG 将无法工作。

GNSS

MC20 模块为 MCU 提供 AT 命令集,用于与其 GSM/GPRS、GNSS 和蓝牙模块通信。

我们已经为 Wio GPS 安装了一个编写良好的库,对于简单的应用,您甚至不需要了解太多关于如何使用 AT 命令的知识,因为 AT 命令复杂且难以阅读。

以下示例展示了如何读取经度和纬度并在串口监视器中打印出来。请注意,Wio Tracker 应该放置在室外以获取 GPS 信号。此示例需要在 Wio Tracker 中插入 SIM 卡,以下图片展示了如何安装/卸载 SIM 卡:

打开您的 Arduino IDE,点击 File > Examples > MC20_GPS_Traker > MC20_GNSS > GNSS_Show_Coordinate 打开示例代码,或复制以下代码:

#include "MC20_Common.h"
#include "MC20_Arduino_Interface.h"
#include "MC20_GNSS.h"


GNSS gnss = GNSS();

void setup() {
SerialUSB.begin(115200);
// while(!SerialUSB);

gnss.Power_On();
SerialUSB.println("\n\rPower On!");

while(!gnss.open_GNSS()){
delay(1000);
}

SerialUSB.println("Open GNSS OK.");
}

void loop() {
// gnss.dataFlowMode();

if(gnss.getCoordinate()){
SerialUSB.print("GNSS: ");
SerialUSB.print(gnss.longitude, 6);
SerialUSB.print(",");
SerialUSB.println(gnss.latitude, 6);
} else{
SerialUSB.println("Error!");
}

delay(1000);
}

短信读取

以下示例展示了如何在 Wio Tracker 上读取短信。此示例需要 Nano SIM 卡。

打开您的 Arduino IDE,点击 File > Examples > MC20_GPS_Traker > MC20_SMSRead 打开示例代码,或复制以下代码:

#include "MC20_Common.h"
#include "MC20_Arduino_Interface.h"

#define RGBPIN 10

char phone[32];
char dateTime[32];
char buffer[64];
int i = 0;
char *s = NULL;
int inComing = 0;

GPSTracker gpsTracker = GPSTracker();

void setup() {
// MC20_init();
pinMode(RGBPIN, OUTPUT);
digitalWrite(RGBPIN, LOW);
SerialUSB.begin(115200);
// while(!SerialUSB);

gpsTracker.Power_On();
SerialUSB.println("Power On!");

// gpsTracker.deleteSMS(1);

}

void loop() {

if(MC20_check_readable()){
inComing = 1;
}else{
delay(1000);
}

if(1 == inComing){
MC20_read_buffer(buffer, 64);
SerialUSB.println(buffer);

if(NULL != (s = strstr(buffer,"+CMTI: \"SM\""))) { //SMS: $$+CMTI: "SM",24$$
char message[128];
int messageIndex = atoi(s+12);
gpsTracker.readSMS(messageIndex, message,128);
SerialUSB.print("Recv SMS: ");
SerialUSB.println(message);
}
MC20_clean_buffer(buffer,64);
inComing = 0;
}

}

蓝牙连接

在 Wio Tracker 上连接蓝牙设备也非常简单。打开您的 Arduino IDE,点击 File > Examples > MC20_GPS_Traker > MC20_BlueTooth > BT_FastConnect 打开示例代码,或复制以下代码。

然后更改您蓝牙设备的 deviceName,Wio Tracker 将自动连接它。

#include "MC20_Common.h"
#include "MC20_BT.h"

// GPSTracker gpsTracker = GPSTracker();
BlueTooth bt = BlueTooth();
int bt_state = -1;
char *deviceName = "N-612";


void setup() {
SerialUSB.begin(115200);
while(!SerialUSB);

bt.Power_On();
SerialUSB.println("\n\rMC20 power On!");
bt.BTPowerOn();
SerialUSB.println("\n\rBT power On!");

while(IDLE != (bt_state = bt.getBTState())){
SerialUSB.print("State: ");
SerialUSB.println(bt_state);
delay(1000);
}

bt.BTFastConnect(deviceName, HFG_PROFILE);
}

void loop() {
/* Debug */
if(SerialUSB.available()){
serialMC20.write(SerialUSB.read());
}
if(serialMC20.available()){
SerialUSB.write(serialMC20.read());
}
}

SD 卡

  • 步骤 1. 将 SD 卡插入 Wio GPS 板。
  • 步骤 2. 使用 USB 线将 Wio GPS 板连接到 PC。
  • 步骤 3. 打开您的 Arduino IDE,选择 Tools -> Board -> Wio GPS board
  • 步骤 4. 点击 File > Examples > Seeed_Wio_GPS_Board\SD_Card_Test_DumpFile 打开示例代码,或复制以下代码。
  • 步骤 5. 将代码上传到 Wio GPS 板,它展示了如何使用 SD 库从 SD 卡读取文件并通过串口发送。
/*
SD card file dump

This example shows how to read a file from the SD card using the
SD library and send it over the serial port.

The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4 (for MKRZero SD: SDCARD_SS_PIN)

created 22 December 2010
by Limor Fried
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/

#include <SPI.h>
#include <SD.h>

const int chipSelect = 4;
char* fileName = "gps.txt";

void setup() {
// Open serial communications and wait for port to open:
SerialUSB.begin(115200);
while (!SerialUSB) {
; // wait for serialUSB port to connect. Needed for native USB port only
}


SerialUSB.print("Initializing SD card...");

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
SerialUSB.println("Card failed, or not present");
// don't do anything more:
return;
}
SerialUSB.println("card initialized.");

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open(fileName);

// if the file is available, write to it:
if (dataFile) {
while (dataFile.available()) {
SerialUSB.write(dataFile.read());
}
dataFile.close();
}
// if the file isn't open, pop up an error:
else {
SerialUSB.println("error opening datalog.txt");
}
}

void loop() {
}

原理图在线查看器

资源

技术支持与产品讨论

如果您有任何技术问题,请将问题提交到我们的论坛。 感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...