В данной статье мы рассмотрим взаимодействие двух плат 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 представлено на следующем рисунке (если кому нужно, могу перевести таблицу с этого рисунка).
Схема проекта
Схема передающей части проекта представлена на следующем рисунке.
Схема приемной части проекта представлена на следующем рисунке.
Печатная плата для проекта
Представленный проект можно собрать на макетной или перфорированной плате, однако желающие могут собрать его и на печатной плате. Вы можете скачать 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(); // очищаем светодиоды ленты } |