Электронный компонент:Seeeduino LoRaWAN

Материал из Онлайн справочника
Версия от 21:09, 27 сентября 2017; Myagkij (обсуждение | вклад) (→‎Обновление прошивки)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Черновик


Seeeduino LoRaWAN[1]

Seeeduino LoRaWAN – это микроконтроллерная Arduino-плата на базе процессора ATSAMD21G18 и модуля RHF76-052AM. Она коммуницирует через протокол LoRaWAN, который часто используется в области интернета вещей. Seeeduino LoRaWAN поддерживает два диапазона частот, а также совместима с LoRaWAN-устройствами классов A и C.

Кроме того, плата оснащена четырьмя Grove-коннекторами, с помощью которых ее можно подключать к различным Grove-модулям. Благодаря этому, как пишут разработчики, пользователь может сосредоточиться на самом проекте, не беспокоясь о совместимости между разными модулями. Seeeduino LoRaWAN также имеет встроенный чип для управления литиевой батареей, благодаря которому ее можно заряжать через USB-интерфейс. Если переключить плату в режим низкого энергопотребления, одна полностью заряженная литиевая батарея, как пишут разработчики, cможет обеспечить Seeeduino LoRaWAN питанием в течение нескольких месяцев.

Версии Seeeduino LoRaWAN:

Внимание! Перед первым использованием Seeeduino LoRaWAN рекомендуем обновить прошивку до последней версии.

Примечание: Версия Seeeduino LoRaWAN с GPS оснащена GPS-модулем.

Функционал

  • Минимальное энергопотребление (от 3.7-вольтовой литий-полимерной батареи) – 2 мА
  • Минимальное энергопотребление (от 3.7-вольтовой литий-полимерной батареи, без светодиода PWR) – 80 мкА

Процессор ATSAMD21G18 (Arduino)

  • Тактовая частота – 48 МГц (при питании / вольтовой логике в 3.3 вольта)
  • Совместимость с Arduino (используется загрузчик Arduino Zero)
  • Чип управления литиевой батареей и светодиодный индикатор
  • 20 GPIO-контактов
  • 4 встроенных Grove-коннектора
  • 18 контактов с поддержкой ШИМ
  • 6 входных аналоговых контактов
  • 1 выходной аналоговый контакт (A0)
  • 3.3-вольтовый регулятор напряжения, выдающий 200 мА
  • Кнопка сброса

LoRaWAN-модуль RHF76-052

  • Энергопотребление в режиме WOR (от «wake on radio», что можно перевести как «пробуждение при наличии радиосигнала») – 1.45 мкА (это характеристики модуля, но не платы)
  • Бюджет канала связи – 160 децибел
  • Чувствительность приемника – около -140 дБм
  • Мощность передатчика – до 19 дБм
  • Два диапазона связи – 434/470 МГц (19 дБм) и 868/915 МГц (14 дБм)
  • Протокол связиLoRaWAN, классы A и C
  • Высокая дальность связи
  • Низкое энергопотребление
  • Возможность обновлять прошивку
  • Маленький размер – 23 мм х 28 мм
  • SMT-выводы (от «surface-mount technology», что значит «технология монтирования на поверхность») – 33 шт.

Внимание! Плата Seeeduino LoRaWAN работает на 3.3 вольтах. Следовательно, максимальное напряжение, которое могут выдержать ее I/O контакты – это 3.3 вольта. Если подать на них больше 3.3 вольт, это может повредить плату.

Характеристики

  • МикроконтроллерATSAMD21G18, 32 бита, ARM Cortex M0+
  • Рабочее напряжение – 3.3 вольта
  • Цифровые I/O контакты – 20 шт.
  • Контакты ШИМ – все, кроме 2 и 7
  • Порты UART – 2 шт. (штатный и для программирования)
  • Входные аналоговые контакты – 6 шт. (12-битные АЦП-каналы)
  • Входные аналоговые контакты – 1 шт. (10-битный ЦАП-канал)
  • Внешние прерывания – все контакты, кроме 4
  • Сила (постоянного) тока на одном I/O контакте – 7 мА
  • Flash-память – 256 Кб
  • SRAM – 32 Кб
  • EEPROM – нет
  • Тактовая частота – 48 МГц
  • Длина – 68 мм
  • Ширина – 53 мм
  • Вес – 19.6 г (без GPS) или 19.9 г (с GPS)

Области применения

  • Интернет вещей
  • «Умный» дом
  • Безопасность
  • «Умные» энергосистемы
  • «Умное» сельское хозяйство
  • «Умная» парковка

Для расширения проекта используйте Grove-модули – Seeeduino LoRaWAN оснащена 4 коннекторами для подключения таких модулей. Если вы в первый раз слышите о системе Grove, то более подробно о ней можно почитать тут. Если вкратце, то Grove – это сотни стандартизированных устройств вроде коммуникационных плат, датчиков, кнопок, регуляторов, светодиодов, зуммеров, дисплеев и пр.

Описание компонентов

  • 1разъем MicroUSB (для программирования и питания платы)
  • 2Grove-коннекторы
  • 3 – входной порт JST2.0 (для 3.7-вольтовой литий-полимерной батареи) и статусный светодиод
  • 4 – кнопка DFU (от «device firmware update», что значит «обновление прошивки на устройстве») для перехода в режим апдейта прошивки
  • 5 – кнопка сброса
  • 6 – цифровые и аналоговые контакты (как на Arduino)
  • 7ICSP-контакты
  • 8 – светодиод, сообщающий о переходе в режим прошивки
  • 9 – проводная антенна
  • A – антенна с разъемом U.FL
  • B – радиочастотный модуль RHF76-052AM
  • C – процессор ARM Cortex M0 (ATSAMD21G18)
  • Dсветодиоды
    • RX/TX – мигают при UART-коммуникации (т.е. при приеме/передаче данных по USB-порту)
    • L – светодиод, подключенный к 13-ому контакту
    • PWRсветодиодный индикатор питания

Подсказка: Чтобы работать с Grove-коннекторами, нужно пустить питание через контакт VCC. Это делается с помощью строчки digitalWrite(38, HIGH). В противном случае Grove-коннекторы просто не получат питание.

Распиновка

Номер контакта GPIO-номер контакта Внешние прерывания ШИМ Ввод аналоговых данных Вывод аналоговых данных Функция
0 #0 Да Да RX(Serial)
1 #1 Да Да TX(Serial)
2 #2 Да
3 #3 Да Да
4 #4 Да
5 #5 Да Да
6 #6 Да Да
7 #7 Да
8 #8 Да Да
9 #9 Да Да
10 #10 Да Да
11 #11 Да Да SPI_MOSI
12 #12 Да Да SPI_MISO
13 #13 Да Да SPI_SCK
SDA #20 Да Да
SCL #21 Да Да
A0 #A0 Да Да Да Да
A1 #A1 Да Да Да
A2 #A2 Да Да Да
A3 #A3 Да Да Да
A4 #A4 Да Да Да Напряжение батареи
A5 #A5 Да Да Да Статус зарядки

Примечание: Все контакты могут действовать как цифровые I/O контакты.

С чего начать

Эта глава написана с использованием Windows 10 и IDE Arduino версии 1.6.0.

Во-первых, вам нужно установить последнюю версию IDE Arduino, а затем установить в IDE Arduino аддон для плат Seeeduino.

Установка драйвера (на Windows)

Если это первый раз, когда вы подключаете Seeeduino LoRaWAN к своему ПК, то для нее нужно установить драйвер. Загрузить его можно по этой ссылке.

Чтобы убедиться в том, что драйвер был установлен успешно, откройте «Диспетчер устройств». Найдите пункт «Порты (COM и LPT, а в нем – запись «Seeeduino LoRaWAN». Если она существует, то драйвер установлен успешно.

Первый скетч – «Blink»

Теперь давайте загрузим на Seeeduino LoRaWAN первый демо-скетч, который называется «Blink» (т.е. «Мигание»).

Откройте IDE Arduino и кликните на Файл > Примеры > 01.Basics > Blink (File > Examples > 01.Basics > Blink). В результате в IDE Arduino откроется демо-скетч «Blink». Или можно просто скопировать в рабочую область IDE Arduino код, показанный ниже:

//  код в блоке setup() запускается только один раз – 
//  когда вы нажимаете на кнопку сброса
//  или подключаете к плате питание:
void setup() {
  //  выставляем 13-ый цифровой контакт на вывод данных (OUTPUT):
  pinMode(13, OUTPUT);
}

//  код в блоке loop() работает бесконечно:
void loop() {
  digitalWrite(13, HIGH);   //  включаем светодиод, давая сигнал HIGH 
  delay(1000);              //  ждем секунду
  digitalWrite(13, LOW);    //  выключаем светодиод, давая сигнал LOW 
  delay(1000);              //  ждем секунду
}

После этого проделайте следующее:

  • Нажмите в IDE Arduino на Инструменты > Плата > Seeeduino LoRaWAN (Tools > Board > Seeeduino LoRaWAN)
  • Нажмите в IDE Arduino на Инструменты > Порт (Tools > Port) и выберите номер порта, к которому подключена плата (это не COM1)

Теперь кликните по кнопке «Загрузка» («Upload»), которая находится в левом верхнем углу IDE Arduino. Спустя несколько секунд код должен загрузиться на Seeeduino LoRaWAN:


Если загрузка прошла успешно, на Seeeduino должен замигать светодиод, а в нижней части IDE Arduino должен появиться примерно такой текст:

Батарея

Плату можно питать не только от USB, но и от 3.7-вольтовой литий-полимерной батареи. В комплекте с Seeeduino LoRaWAN идет кабель JST2.0 – используйте его, если у вашей батареи не будет коннектора JST2.0.

Внимание! Обязательно убедитесь, что отрицательный и положительный полюса батареи подключены правильно. В противном случае можно повредить плату.

Для Seeeduino LoRaWAN можно написать код, позволяющий узнавать статус зарядки и измерять напряжение батареи. Для этого контакт статуса зарядки и положительный контакт батареи должны быть подключены к контактам A4 и A5 на Seeeduino LoRaWAN. Пример такого кода смотрите ниже:

//  определение статуса зарядки и напряжения батареи,
//  подключенной к плате Seeeduino LoRaWAN

const int pin_battery_status  = A5;
const int pin_battery_voltage = A4;

void setup() {
    SerialUSB.begin(115200);
    pinMode(pin_battery_status, INPUT);
}

void loop() {

    int a = analogRead(pin_battery_voltage);
    float v = a/1023.0*3.3*11.0;  //  в цепи используется 
                                  //  делитель напряжения 
                                  //  с резисторами на 1 МОм и 100 кОм
    SerialUSB.print(v, 2);
    SerialUSB.print('\t');
    SerialUSB.println(digitalRead(pin_battery_status));

    delay(1000);
}

Примечание: Если этот скетч вернет «0», то это значит, что зарядка еще не выполнена, а если «1», то это значит, что зарядка завершена или батарея не подключена.

Отправка и получение данных

Для LoRaWAN-модулей существует хорошая библиотека, которая позволяет делать простые проекты, не зная совершенно ничего о протоколе LoRa (он сложен для понимания). Эта библиотека называется «LoRaWAN». Конечно, если вы хотите сделать более продвинутый проект, то такие знания обязательно понадобятся. Библиотеку устанавливать не нужно, она идет в комплекте с аддоном для платы Seeeduino LoRaWAN, который вы установили выше, в разделе «С чего начать».

Для этого примера понадобятся две платы Seeeduino LoRaWAN. Одна будет использоваться для отправки, а другая – для приема данных.

Отправка

Откройте IDE Arduino и кликните на Файл > Примеры > LoRaWAN > p2p_tx (File > Examples > LoRaWAN > p2p_tx), в результате чего откроется скетч, превращающий плату в устройство для отправки данных. Или можно просто скопировать в рабочую область IDE Arduino код, показанный ниже (это тот же самый код). Этот скетч каждые 3000 мс отправляет принимающей плате строчку «Hello, World!»

// Демо-скетч для отправки данных с помощью Seeeduino LoRaWAN

#include <LoRaWan.h>

void setup(void)
{
    SerialUSB.begin(115200);
    lora.init();
    lora.initP2PMode(433, SF12, BW125, 8, 8, 20);
}

void loop(void)
{
    lora.transferPacketP2PMode("Hello World!");  //  "Привет, мир!"
    SerialUSB.println("Send string.");  //  "Строка отправлена."
    delay(3000);
}

Прием

Откройте IDE Arduino и кликните на Файл > Примеры > LoRaWAN > p2p_rx (File > Examples > LoRaWAN > p2p_rx), в результате чего откроется скетч, превращающий плату в устройство для приема данных. Или можно просто скопировать в рабочую область IDE Arduino код, показанный ниже:

// Демо-скетч для приема данных с помощью Seeeduino LoRaWAN

#include <LoRaWan.h>

unsigned char buffer[128] = {0, };

void setup(void)
{
    SerialUSB.begin(115200);
    lora.init();
    lora.initP2PMode(433, SF12, BW125, 8, 8, 20);
}

void loop(void)
{
    short length = 0;
    short rssi = 0;

    memset(buffer, 0, 128);
    length = lora.receivePacketP2PMode(buffer, 128,  &rssi, 1);

    if(length)
    {
        SerialUSB.print("Length is: ");  //  "Объем данных: "
        SerialUSB.println(length);
        SerialUSB.print("RSSI is: ");  //  "RSSI: "
        SerialUSB.println(rssi);
        SerialUSB.print("Data is: ");  //  "Присланная строчка: "
        for(unsigned char i = 0; i < length; i ++)
        {
            SerialUSB.print("0x");
            SerialUSB.print(buffer[i], HEX);
            SerialUSB.print(" ");
        }
        SerialUSB.println();
    }
}

Загрузив оба скетча, откройте монитор порта IDE Arduino на принимающей плате и проверьте, приходят ли какие-нибудь данные. Они должны выглядеть примерно так:

Примечание: По этой ссылке можно почитать о наборе для сборки LoRaWAN-шлюза. В скором будущем разработчики обещают добавить в него описание режимов OTAA (от «over-the-air activation», что значит «беспроводная активация») и ABP (от «activation by personalization», что значит «активация путем записи в устройство персональных настроек»).

Другие демо-скетчи

В библиотеке «LoRaWAN» есть и другие скетчи-примеры для работы с Seeeduino LoRaWAN. Их можно посмотреть, кликнув в IDE Arduino по Файл > Примеры > LoRaWAN (File > Examples > LoRaWAN). Там будет четыре скетча-примера (последние два были описаны выше):

  • ABP
  • OTAA
  • p2p_rx
  • p2p_tx

Вы также можете попробовать на Seeeduino LoRaWAN вот эти демо-скетчи:

Передача данных по GPS

Этот скетч работает только на Seeeduino LoRaWAN с функцией GPS:

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

void loop()
{
    while(Serial.available())
    {
        SerialUSB.write(Serial.read());
    }
    while(SerialUSB.available())
    {
        Serial.write(SerialUSB.read());
    }
}

Загрузив код, откройте монитор порта IDE Arduino. Там должны появиться данные, полученные по GPS:

Низкое энергопотребление

Согласно нашим тестам, самое низкое энергопотребление Seeeduino LoRaWAN – это 80 мкА. Чтобы добиться такого же результата, проделайте следующее:

  1. Снимите светодиод PWR (если его не снять, энергопотребление будет выше 2 мА)
  2. Снимите светодиод CHG
  3. Загрузите на вашу плату код, показанный ниже:
#include <LoRaWan.h>
#include <EnergySaving.h>

EnergySaving nrgSave;

void blink()
{
    for(unsigned char i = 0; i < 5; i ++)
    {
        digitalWrite(13,HIGH);
        delay(500);
        digitalWrite(13,LOW);
        delay(500);
    }
}

void setup()
{
    for(unsigned char i = 0; i < 26; i ++)  //  для экономии энергии 
                                            //  важно выставить все 
                                            //  контакты на HIGH
    {
        pinMode(i, OUTPUT);
        digitalWrite(i, HIGH);
    }

    lora.init();
    blink();    
    lora.setDeviceLowPower();
    blink();  
    //  кнопка на контакте D7 используется для пробуждения платы:
    nrgSave.begin(WAKE_EXT_INTERRUPT, 7, dummy);
    nrgSave.standby();
}

void loop()
{
    blink();
    nrgSave.standby();
}

void dummy(void)
{
    // ничего не делаем
}

// конец файла

Обновление прошивки

На данный момент самая последняя версия прошивки – это 2.0.10, и если вы хотите обновиться до этой версии, следуйте инструкциям ниже:

1. Проверьте версию прошивки. Для этого загрузите на плату вот такой код:

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

void loop()
{
    while(Serial1.available())
    {
        SerialUSB.write(Serial1.read());
    }
    while(SerialUSB.available())
    {
        Serial1.write(SerialUSB.read());
    }
}

Затем откройте монитор порта IDE Arduino и введите:

AT+VER

После этого монитор порта должен сообщить версию прошивки:

2. Скопируйте и загрузите на Seeeduino LoRaWAN код ниже:

// Обновление прошивки модуля HF76-052AM

#include <Arduino.h>

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

void loop()
{
    while(SerialDBG.available())
    {
        SerialUSB.write(SerialDBG.read());
    }
    while(SerialUSB.available())
    {
        SerialDBG.write(SerialUSB.read());
    }
}

3. Отключите плату от USB-порта, а затем снова подключите и нажмите на кнопку DFU. В результате должен мигнуть светодиод, сообщающий о переходе в режим прошивки. Если мигнул, переходим к следующему шагу

4. Кликните здесь, чтобы скачать последнюю версию прошивки (это файл формата «*.bin»)

5. Откройте PuTTy и подключитесь к плате (последнюю версию PuTTy можно скачать отсюда):

6. Когда вы успешно подключите плату к PuTTy, в рабочем окне программы начнет постоянно печататься символ «C». Нажмите на Files Transfer > Ymodem > Send, а затем выберите файл «*.bin», который вы загрузили в шаге 4. Это должно запустить обновление

Полезные ссылки

См.также

Внешние ссылки