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

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1852 статей для сайта.

Контакты:

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


Ambox content.png Черновик


Seeeduino LoRaWAN[1]

Seeeduino LoRaWAN cover 1.png

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 – это сотни стандартизированных устройств вроде коммуникационных плат, датчиков, кнопок, регуляторов, светодиодов, зуммеров, дисплеев и пр.

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

Hw LoRa 2.png
  • 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». Если она существует, то драйвер установлен успешно.

Device manager 3.png

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

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

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

  1. //  код в блоке setup() запускается только один раз –
  2. //  когда вы нажимаете на кнопку сброса
  3. //  или подключаете к плате питание:
  4. void setup() {
  5.   //  выставляем 13-ый цифровой контакт на вывод данных (OUTPUT):
  6.   pinMode(13, OUTPUT);
  7. }
  8.  
  9. //  код в блоке loop() работает бесконечно:
  10. void loop() {
  11.   digitalWrite(13, HIGH);   //  включаем светодиод, давая сигнал HIGH
  12.   delay(1000);              //  ждем секунду
  13.   digitalWrite(13, LOW);    //  выключаем светодиод, давая сигнал LOW
  14.   delay(1000);              //  ждем секунду
  15. }

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

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

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


Seeeduino LoRaWAN blink2.png

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

Seeeduino LoRaWAN blink3 6.png

Батарея

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

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

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

  1. //  определение статуса зарядки и напряжения батареи,
  2. //  подключенной к плате Seeeduino LoRaWAN
  3.  
  4. const int pin_battery_status  = A5;
  5. const int pin_battery_voltage = A4;
  6.  
  7. void setup() {
  8.     SerialUSB.begin(115200);
  9.     pinMode(pin_battery_status, INPUT);
  10. }
  11.  
  12. void loop() {
  13.  
  14.     int a = analogRead(pin_battery_voltage);
  15.     float v = a/1023.0*3.3*11.0;  //  в цепи используется
  16.                                   //  делитель напряжения
  17.                                   //  с резисторами на 1 МОм и 100 кОм
  18.     SerialUSB.print(v, 2);
  19.     SerialUSB.print('\t');
  20.     SerialUSB.println(digitalRead(pin_battery_status));
  21.  
  22.     delay(1000);
  23. }

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

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

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

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

Отправка

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

  1. // Демо-скетч для отправки данных с помощью Seeeduino LoRaWAN
  2.  
  3. #include <LoRaWan.h>
  4.  
  5. void setup(void)
  6. {
  7.     SerialUSB.begin(115200);
  8.     lora.init();
  9.     lora.initP2PMode(433, SF12, BW125, 8, 8, 20);
  10. }
  11.  
  12. void loop(void)
  13. {
  14.     lora.transferPacketP2PMode("Hello World!");  //  "Привет, мир!"
  15.     SerialUSB.println("Send string.");  //  "Строка отправлена."
  16.     delay(3000);
  17. }

Прием

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

  1. // Демо-скетч для приема данных с помощью Seeeduino LoRaWAN
  2.  
  3. #include <LoRaWan.h>
  4.  
  5. unsigned char buffer[128] = {0, };
  6.  
  7. void setup(void)
  8. {
  9.     SerialUSB.begin(115200);
  10.     lora.init();
  11.     lora.initP2PMode(433, SF12, BW125, 8, 8, 20);
  12. }
  13.  
  14. void loop(void)
  15. {
  16.     short length = 0;
  17.     short rssi = 0;
  18.  
  19.     memset(buffer, 0, 128);
  20.     length = lora.receivePacketP2PMode(buffer, 128,  &rssi, 1);
  21.  
  22.     if(length)
  23.     {
  24.         SerialUSB.print("Length is: ");  //  "Объем данных: "
  25.         SerialUSB.println(length);
  26.         SerialUSB.print("RSSI is: ");  //  "RSSI: "
  27.         SerialUSB.println(rssi);
  28.         SerialUSB.print("Data is: ");  //  "Присланная строчка: "
  29.         for(unsigned char i = 0; i < length; i ++)
  30.         {
  31.             SerialUSB.print("0x");
  32.             SerialUSB.print(buffer[i], HEX);
  33.             SerialUSB.print(" ");
  34.         }
  35.         SerialUSB.println();
  36.     }
  37. }

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

Seeeduino LoRaWAN monitor rx 7.png

Примечание: По этой ссылке можно почитать о наборе для сборки 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:

  1. void setup()
  2. {
  3.     Serial.begin(9600);
  4.     SerialUSB.begin(115200);
  5. }
  6.  
  7. void loop()
  8. {
  9.     while(Serial.available())
  10.     {
  11.         SerialUSB.write(Serial.read());
  12.     }
  13.     while(SerialUSB.available())
  14.     {
  15.         Serial.write(SerialUSB.read());
  16.     }
  17. }

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

Seeeduino LoRaWAN gps 8.png

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

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

  1. Снимите светодиод PWR (если его не снять, энергопотребление будет выше 2 мА)
  2. Снимите светодиод CHG
  3. Загрузите на вашу плату код, показанный ниже:
  1. #include <LoRaWan.h>
  2. #include <EnergySaving.h>
  3.  
  4. EnergySaving nrgSave;
  5.  
  6. void blink()
  7. {
  8.     for(unsigned char i = 0; i < 5; i ++)
  9.     {
  10.         digitalWrite(13,HIGH);
  11.         delay(500);
  12.         digitalWrite(13,LOW);
  13.         delay(500);
  14.     }
  15. }
  16.  
  17. void setup()
  18. {
  19.     for(unsigned char i = 0; i < 26; i ++)  //  для экономии энергии
  20.                                             //  важно выставить все
  21.                                             //  контакты на HIGH
  22.     {
  23.         pinMode(i, OUTPUT);
  24.         digitalWrite(i, HIGH);
  25.     }
  26.  
  27.     lora.init();
  28.     blink();    
  29.     lora.setDeviceLowPower();
  30.     blink();  
  31.     //  кнопка на контакте D7 используется для пробуждения платы:
  32.     nrgSave.begin(WAKE_EXT_INTERRUPT, 7, dummy);
  33.     nrgSave.standby();
  34. }
  35.  
  36. void loop()
  37. {
  38.     blink();
  39.     nrgSave.standby();
  40. }
  41.  
  42. void dummy(void)
  43. {
  44.     // ничего не делаем
  45. }
  46.  
  47. // конец файла

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

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

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

  1. void setup()
  2. {
  3.     Serial1.begin(9600);
  4.     SerialUSB.begin(115200);
  5. }
  6.  
  7. void loop()
  8. {
  9.     while(Serial1.available())
  10.     {
  11.         SerialUSB.write(Serial1.read());
  12.     }
  13.     while(SerialUSB.available())
  14.     {
  15.         Serial1.write(SerialUSB.read());
  16.     }
  17. }

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

AT+VER

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

Seeeduino LoRaWAN VER 9.png

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

  1. // Обновление прошивки модуля HF76-052AM
  2.  
  3. #include <Arduino.h>
  4.  
  5. void setup()
  6. {
  7.     SerialDBG.begin(115200);
  8.     SerialUSB.begin(115200);
  9. }
  10.  
  11. void loop()
  12. {
  13.     while(SerialDBG.available())
  14.     {
  15.         SerialUSB.write(SerialDBG.read());
  16.     }
  17.     while(SerialUSB.available())
  18.     {
  19.         SerialDBG.write(SerialUSB.read());
  20.     }
  21. }

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

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

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

Seeeduino LoRaWAN firmware 1.png

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

Seeeduino LoRaWAN firmware 4.png

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

См.также

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

  1. wiki.seeed.cc - Seeeduino LoRaWAN