Обзор Wio Tracker с GPS, Bluetooth 3.0 и GSM-подключением

Wio GPS – также известный как Wio Tracker – представляет собой совместимую с Arduino плату на базе микроконтроллера Microchip Atmel SAMD21, оснащенную модулями GPS, Bluetooth, GSM/GPRS, а также несколькими Grove-разъемами для подключения сенсоров и модулей в IoT-проектах. Компания SeeedStudio предоставила образец для оценки; было проведено тестирование, результаты которого представлены ниже на основе проверки нескольких Arduino-скетчей.

Распаковка Wio Tracker

В комплект входила только плата Wio GPS Tracker v1.1. На лицевой стороне расположены: микроконтроллер Atmel, RGB-светодиод, микрофон и разъем 3.5 мм для телефонных звонков, пользовательская и питающая кнопки, порт micro USB для питания и программирования, двухконтактный разъем для аккумулятора и 6 Grove-разъемов для цифровых, последовательных, I2C и аналоговых модулей.

Нажмите для увеличения

На обратной стороне платы установлен модуль Quectel MC20, отвечающий за Bluetooth, GPS и GSM, слот двойного назначения для micro SD и nano-SIM, а также антенны GPS, 2G и Bluetooth. Также видны контактные площадки +/- рядом с логотипом OSHW для подключения динамиков.

Нажмите для увеличения

Начало работы с Wio GPS Tracker в Arduino IDE

Для этой части обзора использовалось руководство Wio GPS Board Wiki ; как выяснилось, опыт оказался неоднозначным.

Сначала потребуется кабель micro USB — USB для подключения платы к компьютеру под Windows/Linux/Mac. Вывод ядра в Ubuntu 16.04:

[27730.518478] usb 5-3: new full-speed USB device number 3 using ohci-pci
[27730.720494] usb 5-3: New USB device found, idVendor=2886, idProduct=800e
[27730.720497] usb 5-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[27730.720499] usb 5-3: Product: Wio GPS Board
[27730.720501] usb 5-3: Manufacturer: Seeed Studio
[27730.723714] cdc_acm 5-3:1.0: ttyACM0: USB ACM device

После установки Arduino IDE для вашей ОС можно добавить платы Seeduino через Файл→Настройки , вставив ссылку  https://raw.githubusercontent.com/Seeed-Studio/Seeed_Platform/master/package_seeeduino_boards_index.json в поле Дополнительные ссылки для менеджера плат и нажав OK. Затем в Инструменты→Платы→Менеджер плат следует найти «wio» и установить Seeeduino SAMD by Seeed Studio.

Дополнительно можно установить Adafruit Neopixel через Скетч→Подключить библиотеку→Управлять библиотеками или импортировать zip-архив . После этого в списке плат, вопреки указаниям в Wiki, «Wio Tracker» обнаружено не было, поэтому была выбрана Wio GPS Board и порт /dev/ttyACM0 (Wio GPS Board) .

Затем были проверены примеры скетчей в Примеры→Seeed_Wio_GPS_Board , охватывающие все ключевые функции платы. Протестированы скетчи для RGB_LED, Bluetooth, GNSS (GPS) и GSM (Send SMS), но работоспособным оказался только Bluetooth.

Нажмите для увеличенияПри повторном обращении к Wiki выяснилось, что требуется дополнительно импортировать библиотеку Wio Tracker , что и было сделано. Появился схожий набор примеров для MC20_GPS_Traker-master.

Причины дублирования функционально идентичных примеров неясны, поэтому тестирование продолжилось с образцами из папки MC20_GPS_Tracker-master.

Скетч Blink.ino должен мигать RGB-светодиодом синим цветом:

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

#define RGBPIN       10
#define LED_NUM      1

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

void setup() {

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

Программа загрузилась на плату со следующими предупреждениями:

WARNING: Spurious .github folder in 'Adafruit NeoPixel' library
WARNING: Category '' in library FlashStorage is not valid. Setting to 'Uncategorized'
WARNING: Spurious .github folder in 'Adafruit NeoPixel' library
Multiple libraries were found for "MC20_Arduino_Interface.h"
 Used: /home/jaufranc/Arduino/libraries/MC20_GPS_Tracker-master
 Not used: /home/jaufranc/.arduino15/packages/Seeeduino/hardware/Seeeduino_SAMD/1.1.2/libraries/Seeed_Wio_GPS_Boardl

RGB-светодиод не сработал. После удаления библиотеки Adafruit Neopixel результат сохранился. Проверка схемы подтвердила подключение светодиода к D10; добавление отладочных println-выводов показало корректное выполнение кода, но индикация отсутствовала. Обращение в компанию не дало оперативного результата из-за выходных.

Тестирование продолжилось скетчем BT_CLientHandle.ino для сопряжения платы со смартфоном. Код достаточно прост:

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

// GPSTracker gpsTracker = GPSTracker();
BlueTooth bt = BlueTooth();
int bt_state = -1;
int device_id;

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

  SerialUSB.println("Waitting for connecting...");
  int result = bt.loopHandle();
  SerialUSB.print("Connect result: ");
  result != 0? SerialUSB.println("Failed!"):SerialUSB.println("Success!");
  
}

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

Устройство QUECTEL-BT успешно обнаружено и сопряжено с Android-смартфоном.

Вывод последовательного порта при сопряжении и отключении демонстрирует используемые AT-команды:

+QBTIND: "pair","Apollo Lite",9471BC2FEFAD,446331 
 
Connect result: Success! 
 
AT 
+QBTPAIRCNF: 1,1,0,"Apollo Lite",9471BC2FEFAD 
 
+QBTCONN: 1,0,"Apollo Lite",9471BC2FEFAD,"HF_PROFILE" 
 
+QBTIND: "disc",0,1,"Apollo Lite",9471BC2FEFAD,"HF_PROFILE"

Попытка использовать плату как Bluetooth-колонку через AUX-разъем не удалась — динамик издавал звуки, напоминающие модемные. Для реализации функционала, вероятно, требуется дополнительный код и профиль A2DP (не HF_PROFILE). Тест Bluetooth признан успешным.

Тест GPS. Скетч GNSS_Show_Coordinate.ino должен выводить широту и долготу в последовательный порт:

#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(EPO_QUICK_MODE)){
    delay(1000);
  }

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

void loop() {
  char buffer[64];
  if(gnss.getCoordinate()){
    SerialUSB.print("GNSS: ");
    SerialUSB.print(gnss.longitude, 6);
    SerialUSB.print(",");
    SerialUSB.println(gnss.latitude, 6);
    SerialUSB.print(gnss.str_longitude);
    SerialUSB.print(",");
    SerialUSB.println(gnss.str_latitude);
  } else{
    SerialUSB.println("Error!");
  }
 
  delay(1000);
}

Однако в выводе наблюдалось только повторяющееся сообщение:

Power On!

RDY

+CFUN: 1

+CPIN: NOT INSERTED
IFGCNT=2
OK
AT+CREG?                                                                        
+CREG: 0,4                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,0                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,0                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,0                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,0                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,0

+CREG: 0,0. Документация AT-команд (и схемы EAGLE) доступны в папке ресурсов на Github . Согласно документации, AT+CREG? запрашивает статус регистрации в сети; значения 0,0 означают:

  1. Отключение автоматического уведомления о статусе регистрации
  2. Не зарегистрирован, устройство не ищет сеть для регистрации

Первоначальное тестирование проводилось в помещении. Учитывая предыдущий опыт получения сигнала в здании с платой NavSpark mini , тест был повторен на улице, но результат не изменился. Возможная причина — отсутствие SIM-карты. После принудительного переключения Android-смартфона на 2G (подтверждено значком «E»), успешной отправки SMS и звонка SIM-карта была извлечена.

Поскольку карта имела формат micro-SIM, а плата требует nano-SIM, использовался переходник (доступны на eBay дешевле $1 ).

Нажмите для увеличенияПосле обрезки SIM-карты и вставки nano-SIM (совместно с micro SD, как показано на фото) GPS-тест был повторен. Вывод изменился, но координаты отсутствовали:

+QGNSSC:1 указывает на включенный модуль GNSS. +CREG:0,2 означает регистрацию в домашней сети, сменяющуюся +CREG:0,5 (регистрация в роуминге).

RDY                                                                             
                                                                                
+CFUN: 1                                                                        
                                                                                
+CPIN: READY                                                                    
AT+CREG?                                                                        
+CREG: 0,2                                                                      
                                                                                
OK                                                                              
                                                                                
Call Ready                                                                      
AT+CREG?                                                                        
+CREG: 0,2                                                                      
                                                                                
OK                                                                              
                                                                                
SMS Ready                                                                       
AT+CREG?                                                                        
+CREG: 0,5                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,5                                                                      
                                                                                
OK                                                                              
AT+QGNSSC?                                                                      
+QGNSSC: 0                                                                      
                                                                                
OK                                                                              
AT+QGNSSC=1                                                                     
OK                                                                              
                                                                                
AT+QGNSSC?                                                                      
+QGNSSC: 1                                                                      
                                                                                
                                                                                
OK                                                                              
AT+CREG?NT=2                                                                    
OK                                                                              
                                                                                
+CREG: 0,5                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,5                                                                      
                                                                                
OK                                                                              
AT+CREG?                                                                        
+CREG: 0,5                                                                      
                                                                                
OK

Более сложный скетч GNSS_Google_KML.ino должен выводить координаты на OLED-дисплей и сохранять сырые данные в gps.txt на SD-карте для генерации KML-файла Google. Скетч GoogleMapDemo.ino загружает координаты на сайт ziladuo.com. Учитывая неработоспособность базового примера GNSS, тестирование GPS/GNSS прекращено.

Последняя попытка — отправка SMS через скетч GSM (MC20_SMSSend.ino), рассылающий сообщение «Hello MC20!!» на указанный номер:

Отправка не удалась из-за ошибки функции waitForNetworkRegister:

Тестирование завершено. Извлечение nano-SIM потребовало использования пинцета для нажатия на фиксаторы слота.

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

#define RGBPIN 10

const char message[128] = "Hello MC20!";

GPSTracker gpsTracker = GPSTracker();

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

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

  if(!gpsTracker.waitForNetworkRegister())
  {
    SerialUSB.println("Network error!");
    return;
  }

  gpsTracker.sendSMS("xxxxxxxxxxx", "Hello MC20!"); /* replace xxxxxx with destination phone number */

}

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

}

Итоговый опыт оказался крайне негативным: функционировал только Bluetooth, тогда как GPS, 2G GSM и даже пример с RGB-светодиодом не работали. Дополнительные сложности возникали при загрузке кода с ошибками:

Power On!                                                                       
Network error!                                                                  
ATE1 E0                                                                         
OK

или (после длительного простоя последовательного порта):

Требовались многократные попытки загрузки. Возможная причина — использование Ubuntu 16.04 вместо Windows.

No device found on ttyACM0

При условии работоспособности плата обладает значительным потенциалом: простое программирование GPS, Bluetooth, 2G (данные, SMS, звонки) и поддержка Grove-сенсоров для IoT-проектов. Компания предоставляет практичный пример

Caused by: processing.app.SerialException: Error touching serial port '/dev/ttyACM0'.
    at processing.app.Serial.touchForCDCReset(Serial.java:87)
    at cc.arduino.packages.uploaders.SerialUploader.uploadUsingPreferences(SerialUploader.java:130)
    ... 6 more
Caused by: jssc.SerialPortException: Port name - /dev/ttyACM0; Method name - openPort(); Exception type - Port busy.
    at jssc.SerialPort.openPort(SerialPort.java:164)
    at processing.app.Serial.touchForCDCReset(Serial.java:81)

«Wild Adventure Tracker»

, отправляющий GPS-координаты по SMS при обнаружении удара. Исходный код доступен на Github с демонстрационным видео.

Анонсирована 4G-версия устройства для будущего тестирования. Текущую модель Wio GPS Tracker можно предзаказать за $24.95 (включая три антенны).

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments