Эксперименты с модулями технологии LoRa
Николай Большаков, RA3TOX
Совсем недавно узнал из Интернета о технологии беспроводной передачи данных - LoRa. Для реалзации этой технологии выпускаются миниатюрные трансиверы, стоимость которых около 4$. Метод модуляции, применяемый в этой технологии, позволяет передавать короткие порции данных на большие расстояния. Кроме того, у него высокая стойкость к помехам и пониженное энергопотребление. Большая дальность действия и энергоэффективность делают LoRa идеальной для работы с различными датчиками, питаемыми от батареи, и прочих ситуаций, требующих пониженного энергопотребления: охранные системы, «умный дом», автономные метеостанции и т.п. Дальность действия даже со штатной антенной (небольшая спиралька) по различным источникам информации колеблется от нескольких сотен метров (в городской застройке) до нескольких километров (при прямой видимости).LoRa использует нелицензированные частоты, доступные во всем мире. Вот чаще всего используемые частоты:
868 МГц - для Европы
915 МГц - для Северной Америки
433 МГц - для Азии и РоссииРекомендую в России использовать частоты 868 МГц или 869 МГц, так как они решением ГКРЧ от 07.05.2007 №07-20-03-001 разрешены в России для систем передачи телеметрии и радиоохраных устройств. При этом необходимо соблюдать дополнительные условия использования (выходная мощность передатчика и соотношение времени работы передача/прием).
Вывод информации приемника на LCD
Как ни странно, но в Интернете не нашёл код для вывода информации приемника на LCD дисплей. Видео есть, а код не приводят! Программисту изменить несколько строк в скетче из библиотеки труда не составляет, а вот несведущему человеку это не всегда удается. Поэтому ниже привожу код для приемника с выводом информации на LCD-дисплей.
Схема включения для приёмника и передатчика одинаковая. Рекомендуется использовать преобразователи уровней т.к. модули LoRa питаются от напяжения не выше 3,3 вольта. Но практика показывает, что прямое подключение к портам Arduino вполне работоспособно и безопасно Естественно, что сам модуль LoRa запитывается от 3,3 В!
- -
Код приемника:============================================================================ /* Приёмник 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.
Для желающих выполнить этот вариант прикладываю HEX-файл передатчика для частот 915 и 868 МГц:
LoRaSender915.hex
LoRaSender868.hexФьюзы для Atmega8 с внутренней синхронизацией 8 МГц в программе AVRDUDE_PROG:
Так как схема довольно простая, конструкцию передатчика я собрал на макетной плате. На плате установил стабилизатор на 3,3В (AMS1117-3.3) и USB-разъем, чтобы можно было запитать от источника 5B. Антенну желательно подключать через SMA-разъем, чтобы можно было поэкспериментировать. Схематическое изображение ниже показано со стороны модуля LoRa (процессор с обратной стороны платы).
- -
Этот проект предназначен в основном для знакомства с модулями LORA и позволяет провести эксперименты по определению радиуса действия комплекта приемник/передатчик.В следующей статье я постараюсь добавить датчик температуры и влажности в передатчик для практического применения в теплице или метеостанции.
Удачи и творческих успехов.
Декабрь 2019 г.
Публикация в других источниках разрешена со ссылкой на автора и сайт "Радиофанат" - http://rfanat.ru