Wio Tracker - GPS, BT3.0, GSM, Arduino Compatible

Introduction

What is Wio Tracker? Wio Tracker is an Arduino compatible development board that helps you to track any moving things on the planet. By integrating GSM&GPRS as well as GPS&BeiDou in one board, it provides an all-in-one solution for your out-door IoT project.

If you are following the latest news about Low-Power Wide-Area Network(LPWAN), you may know that 2016 is a special year because there are new technology like LoRa and Sigfox came out, which remarkably pushed the development of WAN. The Wio Tracker has similarities as LoRa and Sigfox but also quite different. It is more suitable for out-door moving tracking and situations that has high frequency customer interaction and medium volume of data, for example sharing bicycle, logistics location, pet tracking.

Comparing to traditional GPS tracking solution, Seeed’s Wio Tracker is much more easier to use and customize for the fast changing IOT market. As a user-friendly Grove development board, the look of Wio Tracker may remind you of Wio Link, another started product of Seeed. So you can also find 6 grove connector on the board. As an Arduino compatible board, users can use the Wio Tracker with Arduino IDE directly.

Why do we call the Wio Tracker a solution, because it is really not just a board. At SeeedStudio, we have the ability to help customer customize the Wio Tracker for their own project and finish the project all the way to mass production. As Wio Tracker uses standard module that is mass production, we are ready to mass production even when customer is at their prototyping stage.

We have prepared everything, the last thing we need is your creative projects, so if you are making an out-door IOT tracking project, please don’t hesitate to use the Wio Tracker!

Features

  • Multi-GNSS engine for combined GPS and BeiDou, higher precision location
  • EPO™ Technology, providing predicted Extended Prediction Orbit to speed up TTFF without need of extra server
  • Based on EPO™ data, QuecFastFix™ Online function further reduces TTFF in cold start, making cold start TTFF comparable to that in hot start
  • GLP(GNSS Low Power) Mode, 40% power consumption for normal mode and slightly lower precision
  • Period Mode, also reduce power consumption by controlling the sleep time
  • Always Locate™ Technology, an intelligent algorithm for power saving
  • Easy™(Embedded Assist System) Technology, self-generated orbit prediction for instant positioning fix, reducing the Time To First Fix(TTFF)
  • LOCUS™ Technology, innate navigation data logger solution with no need for host and external flash
  • AT Command: GSM 07.07, 07.05 and enhanced AT Command
  • Bluetooth 3.0 with SPP and HFP-AG
  • 6 Grove Connectors
  • Nano SIM and TF card 2 in 1 socket
  • Arduino IDE compatible
  • Low power and small size

Quectel MC20 Module

  • Ultra compact size: 18.7 × 16.0 × 2.1mm
  • Multi navigation constellation: GPS/ BeiDou/ QZSS
  • GNSS receiver channels: 99 acquisition/ 33 tracking channels
  • Powerful AGPS functions: Autonomous AGPS EASY™/ Offline AGPS EPO™/ Online AGPS QuecFastFix
  • Built-in LNA for better GNSS sensitivity (-167dBm@Tracking): able to use passive GNSS antenna without the need of any extra LNA
  • Enhanced GNSS features: SDK command/ AIC/ LOCUS/ GLP
  • GSM quad-band: 850/900/1800/1900MHz
  • Multi internet protocols: TCP/ UDP/ PPP/ HTTP/ FTP/ SSL
  • Support Voice, SMS, QuecFOTATM, DSSS, OpenCPU
  • Support Bluetooth V3.0: SPP & HFP-AG profiles

Warning

Unlike most Arduino & Genuino boards, the Wio Tracker runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Applying voltages higher than 3.3V to any I/O pin could damage the board.

Specification

Item Function Value
Microcontroller Processor ATSAMD21G18A-MU, ARM Cortex-M0+, 48MHz
Flash Memory 256KB
SRAM 32KB
Operating Voltage 3.3V
DC Current per I/O Pin 7 mA
Clock Speed 48 MHz
GSM/GPRS GSM 850/900/1800/1900MHz, Class 4 (2W @850/900MHz), Class 1 (1W @1800/1900MHz)
AT Command: GSM 07.07, 07.05 and enhanced AT Command
Low Power Consumption: 1.2mA@DRX=5
GPRS GPRS Multi-slot Class 12: Down to 85.6kbps, Up to 85.6kbps
Protocol: TCP/UDP/FTP/HTTP/PPP/SSL
SMS Peer to Peer Message, SMS broadcast, Text and PDU mode
Audio Echo cancellation, Noise elimination
Bluetooth Bluetooth 3.0: SPP, HFP-AG
GNSS System GPS L1 1575.42MHz, BeiDou B1 1561.10MHz
Precision <2.5 m CEP
Technology EASY/LOCUS/AlwaysLocate/EPO/GLP/AIC
Peripheral Grove 2 x Grove Digital Port
2 x Analog Port
1 x UART
1 x I2C
Antenna GSM Antenna
Bluetooth Antenna
GNSS Antenna
Others USB: Power supply and upload program
JST 1.0 connecter for battery
3.5mm Audio Jack
GSM Power Button, Reset Button
1 x User RGB LED SK6812
Speaker Interface
Nano SIM and TF card 2 in 1 socket
Size Length 54.7mm
Width 48.2mm
Weight

Application Ideas

  • Intelligent Transportation
  • Pet Tracker
  • Outdoor sports equipments
  • Driving recorder
  • Wearable device
  • Property Security

Tip

Use Grove modules to expand your application

There are 6 Grove connects on board. If this is your first time to hear about Grove, please put had on Grove System for more details. In brief, Groves is hundreds of sensor that in standard style, which is consist of sensors, actuators, displays as well as communication.

Hardware Overview

Tip

If you want to use the on-board Grove connector, please use digitalWrite(12, HIGH) to open 3V3_B. Otherwise you can’t provide power to Grove modules.

Pin Map

Pin Name External Interrupt PWM Analog In Analog Out Function
RX YES YES Grove UART
TX YES YES Grove UART
D2 YES YES Grove Digital
D3 YES YES Grove Digital
D4 YES Grove Digital
D5 YES YES Grove Digital
D6 YES User LED Control
D7 YES Power of MC20
D10 YES YES User LED
D11 YES YES Check Earphone
D12 YES YES Grove Power Control
D13 YES YES GSM Power Button
SDA YES Grove I2C
SCL YES Grove I2C
A0 YES YES YES Grove Analog
A1 YES YES YES Grove Analog
A2 YES YES YES Grove Analog
A3 YES YES YES Grove Analog
A4 YES YES Check battery

Note

All pins can act as Digital Input and Output

Getting Started - Arduino IDE

Note

This chapter is based on Win10 and Arduino IDE v1.6.0

First you need to install the latest Arduino IDE, and ADD Seeeduino SAMD to your Arduino IDE.

Install the Driver (For Windows)

When the first time to insert the board, you should get a USB COM device name Wio Tracker that need to install a driver. Click here to download driver for the board.

To make sure the driver was installed successful, open your Device Manager to see if Wio Tracker exists.

Install the library of Wio Tracker(For Windows, Linux and Mac)

Click here to download the library(zip file) of Wio Tracker and import the zip library into your Arduino IDE. If you are new to this, please click here for more information.

Different from other boards, there is an User LED SK6812 on Wio Tracker, which is an intelligent control LED light source and similar to ws2812b. Now we are going to upload our first demo - Blink to Wio Tracker, which will introduce how to use the User LED.

First, we have to install Adafruit NeoPixel Library(for ws2812b LED) and import it into Arduino IDE.

Then open your Arduino IDE and click on File > Examples > MC20_GPS_Traker > Blink to open the sketch or copy the blow code:

#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);
}

And Then,

  • Click on Tools > Board > Wio Tracker
  • Click on Tools > Port to select a right port number. (Don’t choose COM1)

Then click on the Upload button on the left-top of Arduino IDE, seconds later the sketch was uploaded successful.

If the uploading is success, you should the some info in red and you will see the User LED, it’s blinking in blue.

Check battery

Wio Tracker is designed for tracking moving things outdoor. So you can power the board via a 3.7V Lipo battery with JST1.0 connector and check the voltage of your battery easily.

Warning

Make sure the positive and negative end of your battery is connected right, otherwise the board may be damaged.

Battery status pin had beed connect to A4, which allow you to measure voltage of the battery via coding.

Open your Arduino IDE and click on File > Examples > MC20_GPS_Traker > Check_Battery to open the sketch or copy the blow code:

#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);
}

Use Grove modules to expand your application

To use 6 Grove connectors on Wio Tracker, we have to use digitalWrite(12, HIGH) to open 3V3_B to power the Grove modules(D12 defaults to LOW in order to reduce consumption).

The following code shows how to use Analog and Digital Grove modules:

Open your Arduino IDE and click on File > Examples > MC20_GPS_Traker > Button_LightSensor to open the sketch or copy the blow code:

#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);
}   

GNSS

MC20 module provides the AT Commands Set for MCU to communicate with its GSM/GPRS, GNSS and Bluetooth modules.

And we have installed a well written library for the Wio GPS, for simple applications you even don’t need to know much about how to use the AT commands, which is complex and hard to read.

The following example shows how to read longitude and latitude and print them out in Serial Monitor. Please note that Wio Tracker should be placed outdoor to get GPS signal. And this example needs a SIM card in Wio Tracker, the following pictures show how to install/uninstall a SIM card:

Open your Arduino IDE and click on File > Examples > MC20_GPS_Traker > MC20_GNSS > GNSS_Show_Coordinate to open the sketch or copy the blow code:

#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);
}

SMS Message Read

The following example shows how to read sms messages on Wio Tracker. Nano SIM card is needed in this example.

Open your Arduino IDE and click on File > Examples > MC20_GPS_Traker > MC20_SMSRead to open the sketch or copy the blow code:

#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;
  }

}

Bluetooth Connection

It is also very easy to connect to your Bluetooth device on Wio Tracker. Open your Arduino IDE and click on File > Examples > MC20_GPS_Traker > MC20_BlueTooth > BT_FastConnect to open the sketch or copy the blow code.

Then change the deviceName of your Bluetooth device, Wio Tracker will connect it automatically.

#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());
  }
}

Resources

Help us make it better

Welcome to the new documentation system of Seeed Studio. We have made a lot of progress comparing to the old wiki system and will continue to improve it to make it more user friendly and helpful. The improvement can't be done without your kindly feedback. If you have any suggestions or findings, you are most welcome to submit the amended version as our contributor via Github or give us suggestions in the survey below, it would be more appreciated if you could leave your email so that we can reply to you. Happy Hacking!