Эксперименты с модулями технологии LoRa


Николай Большаков, RA3TOX
          Совсем недавно узнал из Интернета о технологии беспроводной передачи данных - LoRa. Для реалзации этой технологии выпускаются миниатюрные трансиверы, стоимость которых около 4$. Метод модуляции, применяемый в этой технологии, позволяет передавать короткие порции данных на большие расстояния. Кроме того, у него высокая стойкость к помехам и пониженное энергопотребление. Большая дальность действия и энергоэффективность делают LoRa идеальной для работы с различными датчиками, питаемыми от батареи, и прочих ситуаций, требующих пониженного энергопотребления: охранные системы, «умный дом», автономные метеостанции и т.п. Дальность действия даже со штатной антенной (небольшая спиралька) по различным источникам информации колеблется от нескольких сотен метров (в городской застройке) до нескольких километров (при прямой видимости).

ora-rfm95.jpg

          LoRa использует нелицензированные частоты, доступные во всем мире. Вот чаще всего используемые частоты:

868 МГц - для Европы
915 МГц - для Северной Америки
433 МГц - для Азии и России

          Рекомендую в России использовать частоты 868 МГц или 869 МГц, так как они решением ГКРЧ от 07.05.2007 №07-20-03-001 разрешены в России для систем передачи телеметрии и радиоохраных устройств. При этом необходимо соблюдать дополнительные условия использования (выходная мощность передатчика и соотношение времени работы передача/прием).

freq1.jpg - freq2.jpg

Вывод информации приемника на LCD

          Как ни странно, но в Интернете не нашёл код для вывода информации приемника на LCD дисплей. Видео есть, а код не приводят! Программисту изменить несколько строк в скетче из библиотеки труда не составляет, а вот несведущему человеку это не всегда удается. Поэтому ниже привожу код для приемника с выводом информации на LCD-дисплей.

           Схема включения для приёмника и передатчика одинаковая. Рекомендуется использовать преобразователи уровней т.к. модули LoRa питаются от напяжения не выше 3,3 вольта. Но практика показывает, что прямое подключение к портам Arduino вполне работоспособно и безопасно Естественно, что сам модуль LoRa запитывается от 3,3 В!

lora_ra3tox_cx- - ora-rsv-ra3tox

Код приемника:

============================================================================
/* Приёмник LORA с LCD-дисплеем
 * Cкетч из стандартной библиотеки
 * The circuit LCD:
 * LCD RS pin to digital pin 7
 * LCD Enable pin to digital pin 8
 * LCD D4 pin to digital pin 3
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 5
 * LCD D7 pin to digital pin 6
 */

 // используем три библиотеки
#include <SPI.h>
#include <LoRa.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 3, 4, 5, 6);  // инициализация библиотеки и определение выводов (RS,E,D4,D5,D6,D7)

void setup() {
  Serial.begin(9600);
  while (!Serial);

  lcd.begin(16, 2);   // установка количества символоа (16) и строк (2) на LCD

  Serial.println("LoRa_Receiver...by RA3TOX");

     lcd.print("LoRa Receiver"); // Вывод приветствия на LCD
     lcd.setCursor(0, 1);
     lcd.print("by RA3TOX 2019");

  if (!LoRa.begin(868E6)) {      // Запуск LoRa на частоте 868 МГц
    Serial.println("Starting LoRa failed!");
    while (1);
  }
 delay(5000);
 lcd.clear(); // очистка дисплея
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
  // received a packet

    lcd.setCursor(0, 0);   // Установка курсора на первый знак первой строки
    lcd.print("Pack: ");

    while (LoRa.available()) {    // чтение пакета

    lcd.print((char)LoRa.read());   // Вывод количества пакетов на LCD
   }

    Serial.print("' with RSSI ");   // print RSSI of packet

    lcd.setCursor(0, 1);     // Установка курсора на первый знак второй строки
    lcd.print("RSSI:  ");

    Serial.println(LoRa.packetRssi());
    lcd.print(LoRa.packetRssi());    // Вывод уровня сигнала RSSI на LCD
    lcd.print(" dBm");
  }
}
==============================================================================

          Скачать код - LoRaReceiver_lcd.ino

          Если вы хотите уменьшить количество выводов для подключения LCD-дисплея, то можно применить плату конвертора для шины I2C. При этом на Arduino будут задействованы только два вывода - SCL(A5) и SDA(A4). В скетче измениться только библиотека (LiquidCrystal_I2C.h) и атрибуты для её инициализации:


   #include <LiquidCrystal_I2C.h>     // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
   LiquidCrystal_I2C lcd(0x27,16,2);  // адрес I2C=0x27 (см.для вашей платы), количество столбцов = 16, количество строк = 2

          Вместо LCD дисплея можно применить более компактный OLED-дисплей. Конечно, для этого надо переписать программу.

          При компиляции скетча видно, что объём занимаемой памяти в микроконтроллере Atmega328 очень незначителен. А значит, можно попытаться использовать более дешевый микропроцессор.

          Я вообще отказался от платы Arduino и попытался скомпилировать скетч передатчика из библиотеки Arduino-LoRa-master для микроконтроллере Atmega8 с внутренней синхронизацией. Это позволило отказаться от кварца, а также запитать всю схему от источника 3,3В (один литиевый аккумулятор). Даже с этим микроконтроллером объём занимаемой памяти в микроконтроллере сотавил 60%. Поэтому для оставшейся памяти можно задействовать другие функции (например - датчик температуры и/или датчик срабатывании сигнализации в гараже).

Схема включения модуля LoRa для Atmega8.

LoRa_Atm8_cx.jpg

          Для желающих выполнить этот вариант прикладываю HEX-файл передатчика для частот 915 и 868 МГц:

LoRaSender915.hex
LoRaSender868.hex

          Фьюзы для Atmega8 с внутренней синхронизацией 8 МГц в программе AVRDUDE_PROG:

fuze_atm8_int_osc-8mhz.jpg

          Так как схема довольно простая, конструкцию передатчика я собрал на макетной плате. На плате установил стабилизатор на 3,3В (AMS1117-3.3) и USB-разъем, чтобы можно было запитать от источника 5B. Антенну желательно подключать через SMA-разъем, чтобы можно было поэкспериментировать. Схематическое изображение ниже показано со стороны модуля LoRa (процессор с обратной стороны платы).

LoRa_Atm8_cx2.jpg- LoRa_Atm8_cx3.jpg- LoRa_Atm8_cx4.jpg

          Этот проект предназначен в основном для знакомства с модулями LORA и позволяет провести эксперименты по определению радиуса действия комплекта приемник/передатчик.

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

Удачи и творческих успехов.
Декабрь 2019 г.

[ на главную ]


Публикация в других источниках разрешена со ссылкой на автора и сайт "Радиофанат" - http://rfanat.ru