В данной статье мы рассмотрим взаимодействие двух плат Arduino на расстоянии 3 км с помощью беспроводных радиочастотных передатчиков Lora E32. Этот проект можно использовать, к примеру, в системах телеметрии. Также на нашем сайте вы можете прочитать более подробную статью про подключение модулей Lora к платам Arduino.
Необходимые компоненты
- Плата Arduino Uno – 2 шт (купить на AliExpress).
- Lora E32 module (модуль беспроводного радиочастотного передатчика) (купить на AliExpress) – 2 шт.
- Digilent WS2812 Addressable LED Strip (адресная светодиодная лента) (купить на AliExpress).
- Соединительные провода.
- Перфорированная или печатная плата – 2 шт.
Что такое LoRa
Технология модуляции LoRa (Long Range) представляет собой метод модуляции, который обеспечивает значительно бóльшую дальность связи (зону покрытия), чем другие конкурирующие с ним способы и при этом отличается низким потреблением энергии. Метод основывается на технологии модуляции с расширенным спектром и вариации линейной частотной модуляции (Chirp Spread Spectrum, CSS) с интегрированной прямой коррекцией ошибок (Forward Error Correction, FEC). Технология LoRa значительно повышает чувствительность приемника и, аналогично другим методам модуляции с расширенным спектром, использует всю ширину полосы пропускания канала для передачи сигнала, что делает его устойчивым к канальным шумам и нечувствительным к смещениям, вызванным неточностями в настройке частот при использовании недорогих опорных кварцевых резонаторов. Технология LoRa позволяет осуществлять демодуляцию сигналов с уровнями на 19,5 дБ ниже уровня шумов, притом что для правильной демодуляции большинству систем с частотной манипуляцией (Frequency Shift Keying, FSK) нужна мощность сигнала как минимум на 8-10 дБ выше уровня шума. Модуляция LoRa определяет тот физический уровень (Physical Layer, PHY, иногда его называют слой), который может быть использован с различными протоколами и в различных вариантах сетевой архитектуры, таких как сетка (Mesh), звезда (Star), точка-к-точке (point-to-point) и т. п.
Все эти перечисленные факторы делают технологию LoRa отличным решением для проектов в сфере интернета вещей (IoT - Internet of Things). В этой статье мы рассмотрим использование данной технологии вместе с платами Arduino, позволяя им взаимодействовать между собой на больших расстояниях.
Модули LoRa 433MHz
Модули LoRa 433MHz работают с другими подключенными устройствами по последовательному порту связи используя для этого контакты TX и RX. В связи с этим их подключение к платам Arduino не вызовет никаких проблем.
Дальность связи в нашем проекте может достигать 3 километров и будет зависеть от используемых антенн, условий окружающей среды и уровня электромагнитных помех в месте развертывания системы.
Эти модули имеют 4 возможных режима работы. Мы в нашем проекте будем использовать самый простой режим - Normal Mode. В этом режиме контакты M0 и M1 модуля должны быть замкнуты на землю (GND). Другие возможные режимы работы модулей LoRa – это режим энергосбережения (Power Saving), спящий режим (Sleep) и режим пробуждения (Wake-up Mode).
Назначение контактов (распиновка) модуля Lora E32 представлено на следующем рисунке (если кому нужно, могу перевести таблицу с этого рисунка).
Схема проекта
Схема передающей части проекта представлена на следующем рисунке.
Как видите, она очень проста – достаточно всего лишь замкнуть необходимые контакты на землю, а вход и выход последовательного порта подключить к соответствующим контактам платы Arduino.
Схема приемной части проекта представлена на следующем рисунке.
В приемной части проекта соединения те же, что и в передающей части, но в ней мы дополнительно добавили светодиодную ленту (LED strip) для индикации приема данных. Когда светодиодная лента будет мигать это будет означать что приемная часть проекта принимает пакеты данных от передающей части. Для индикации работы приемной части вместо светодиодной ленты вы можете использовать обычный светодиод, зуммер, ЖК дисплей и т.д.
Печатная плата для проекта
Представленный проект можно собрать на макетной или перфорированной плате, однако желающие могут собрать его и на печатной плате. Вы можете скачать Gerber файлы для изготовления печатной платы для данного проекта по следующей ссылке.
Изготовить печатную плату можно, к примеру, с помощью сервиса https://jlcpcb.com/.
Исходный код программы (скетча)
Код программы для передающей части
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <SoftwareSerial.h> SoftwareSerial loraSerial(2, 3); // TX, RX контакты для подключения модуля lora e32 void setup() { Serial.begin(9600); loraSerial.begin(9600); // инициализация последовательной связи с модулем lora e32 } void loop() { loraSerial.println("Hello RX"); Serial.println("Sending"); delay(1000); } |
Код программы для приемной части
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <SoftwareSerial.h> #include <Adafruit_NeoPixel.h> // библиотека для работы со светодиодной лентой Adafruit_NeoPixel pixels(6, 5, NEO_GRB + NEO_KHZ800); // количество светодиодов и пин-код управления SoftwareSerial loraSerial(2, 3); // TX, RX контакты для подключения модуля lora e32 void setup() { Serial.begin(9600); loraSerial.begin(9600); // инициализация последовательной связи с модулем lora e32 pixels.begin(); } void loop() { while (loraSerial.available()) { Serial.write(loraSerial.read());// считываем данные с модуля lora e32 for (int i = 0; i < 6; i++) { //перебираем все светодиоды ленты pixels.setPixelColor(i, pixels.Color(0, 255, 0)); pixels.show(); } } pixels.clear(); // очищаем светодиоды ленты } |
Вот бы найти нормальный пример кода, просто включать и выключать светодиод
Так представленный же в этом проекте код легко переделать под это.