В этом проекте мы узнаем, как использовать модуль Reyax RYLR890 LoRa с платой Arduino. Модуль приемопередатчика RYLR890/RYLR896 оснащен модемом дальнего действия Lora, который обеспечивает сверхдальнюю связь с расширенным спектром и высокую помехоустойчивость при минимизации потребления тока. Этот модуль UART LoRa можно использовать с любым микроконтроллером, используя всего 4 контакта.
Модуль Lora RYLR890/RYLR896 поддерживает связь на расстоянии до 10-15 км. Он разработан с использованием лучшей технологии шумоподавления. Модуль LoRa можно легко соединить с платой Arduino, микроконтроллерами ESP8266, ESP32 или STM32. Потребляемая мощность модуля очень низкая: около 43 мА во время передачи и 16,5 мА во время приема. Перевод модуля в спящий режим еще больше снижает потребляемый ток - до 0,5 мкА.
В этом уроке мы сначала создадим простую схему передатчика/приемника Arduino LoRa RYLR890 и выполним связь точка-точка, например, для управления яркостью светодиода по беспроводной связи с помощью потенциометра. Во втором примере мы отправим данные датчика по беспроводной связи с передатчика на приемник. Датчик, который мы будем использовать, — это датчик BME280, который может измерять температуру окружающей среды, влажность, давление и высоту.
Также ранее на нашем сайте мы рассматривали подключение к плате Arduino и других модулей LoRa:
- модуля LoRa HPD13A (SX1276);
- модуля LoRa SX1278 (Ra-02) (очень популярная статья на сайте).
Также можете прочитать про то, как работают технологии LoRa и LoRaWAN.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- Модуль LoRa RYLR890/RYLR896.
- Датчик BME280 (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Резистор 4,7 и 10 кОм (купить на AliExpress).
- Светодиод 5 мм любого цвета (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Reyax LoRa RYLR890/RYLR896
Модуль LoRa RYLR890/RYLR896 от Reyax Technologies основан на чипе Semtech LoRa SX1276 и микроконтроллере STM32L151C8T6. Чипы SX1276 работают на частоте 868/915 МГц и подключаются к STM32L151C8T6 через контакты SPI.
Модуль Reyax RYLR890/RYLR896 LoRa можно легко подключить к Arduino с помощью контактов UART. Существует список AT-команд, которые можно использовать для выполнения любой задачи, например, отправки или получения данных или перевода устройства в спящий режим. Вы можете узнать больше об AT-командах из этой технической документации по AT-командам: RYLR890/RYLR896
Характеристики модуля
1. Микросхема Semtech SX1276.
2. Отличная помехоустойчивость.
3. Рабочее напряжение: 2,8 В – 3,3 В.
4. Низкое потребление тока (43 мА при передаче, 16,5 при приеме, 0,5 мкА в спящем режиме).
5. Дальность связи: 4,5 км типичная и 15 км максимальная.
6. Высокая чувствительность ВЧ: -148 дБм.
7. Простое управление с помощью AT-команд.
8. Динамический диапазон RSSI 127 дБ.
9. Небольшая интегрированная антенна на печатной плате.
10. Шифрование данных AES128.
Распиновка
Взаимодействие модуля LoRa RYLR890/RYLR896 с Arduino
Теперь давайте узнаем, как мы можем соединить модуль LoRa RYLR890/RYLR896 с платой Arduino. В этом первом примере мы создадим схему передатчика и приемника и будем управлять яркостью светодиода с помощью потенциометра по беспроводной связи.
Схема передатчика
Схема передатчика содержит потенциометр, подключенный к выводу A0 Arduino для генерации переменного аналогового напряжения при вращении потенциометра. Модуль LoRa работает при 3,3 В, поэтому нам нужен делитель напряжения для выводов UART, поскольку цифровые выводы Arduino могут генерировать 5 В. Поэтому резисторы 4,7 кОм и 10 кОм используются для формирования делителя напряжения, который преобразует логическое напряжение 5 В почти в 3,4 В. Соберите схему, как показано на рисунке.
Схема приемника
В схеме приемника имеется светодиод, подключенный к выводу D5 платы Arduino, яркость которого можно регулировать во время отправки сигнала от передатчика.
Исходный код программы
Код программ для схемы передатчика и приемника приведен ниже. Вы можете загрузить эти коды в схемы передатчика и приемника после их сборки.
Код передатчика
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 27 28 29 |
#include <SoftwareSerial.h> SoftwareSerial lora(2,3); int pot = A0; void setup() { // put your setup code here, to run once: Serial.begin(115200); lora.begin(115200); pinMode(pot, INPUT); } void loop() { int val = map(analogRead(pot),0,1024,0,255); Serial.println(val); String potval = String(val); String cmd = "AT+SEND=0,"+String(potval.length()) +","+ String(val)+"\r"; //Serial.println("AT+SEND=0,3,val"); lora.println(cmd); while(lora.available()){ Serial.write(lora.read()); } Serial.println(); Serial.println(cmd); delay(50); } |
Код приемника
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 27 28 29 30 31 32 33 34 35 36 37 |
#include <SoftwareSerial.h> SoftwareSerial lora(2,3); int LED = 5; //String inString = ""; // string to hold input int val = 0; void setup() { // put your setup code here, to run once: Serial.begin(115200); lora.begin(115200); pinMode(LED, OUTPUT); } void loop() { //char ch; String inString; while (lora.available()) { if(lora.available()){ inString += String(char(lora.read())); } } if(inString.length()>0) { //Serial.println(inString); String potval; potval= inString.substring(9,12); Serial.println(potval); analogWrite(LED,potval.toInt()); } //delay(100); } |
После загрузки кода на обе платы Arduino можно приступать к тестированию всей схемы. На стороне передатчика нужно вращать потенциометр так, чтобы яркость светодиода приемника увеличивалась или уменьшалась.
Отправка данных датчиков по беспроводной сети с помощью LoRa RYLR890/RYLR896 и Arduino
В этом втором примере мы отправим данные датчика барометрического давления BME280 по беспроводной связи на приемник LoRa. Датчик барометрического давления BME280 измеряет температуру, давление, влажность и высоту.
Схема передатчика
Схема передатчика имеет датчик BME280, подключенный к контактам I2C Arduino. Модуль LoRa работает при напряжении 3,3 В, поэтому нам нужна сеть делителя напряжения для контактов UART, поскольку цифровые контакты Arduino могут генерировать 5 В. Поэтому резисторы 4,7 кОм и 10 кОм используются для создания делителя напряжения, который преобразует логическое напряжение 5 В почти в 3,4 В. Соберите схему, как показано на рисунке.
Схема приемника
В схеме приемника нет ничего, кроме модуля LoRa, подключенного к выводу UART платы Arduino.
Исходный код программы
Код программы для схемы передатчика и приемника приведена ниже. После сборки всего проекта вы можете загрузить код в схемы передатчика и приемника.
Код передатчика
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include <SoftwareSerial.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> SoftwareSerial lora(2,3); #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; void setup() { // put your setup code here, to run once: Serial.begin(115200); lora.begin(115200); if (!bme.begin(0x76)) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } } void loop() { float temperature = bme.readTemperature(); float pressure = bme.readPressure() / 100.0F; float altitude = bme.readAltitude(SEALEVELPRESSURE_HPA); float humidity = bme.readHumidity(); Serial.print(F("Temperature = ")); Serial.print(temperature); Serial.println(F("*C")); Serial.print(F("Pressure = ")); Serial.print(pressure); Serial.println(F("hPa")); Serial.print(F("Approx. Altitude = ")); Serial.print(altitude); Serial.println(F("m")); Serial.print(F("Humidity = ")); Serial.print(humidity); Serial.println(F("%")); String temp = String(temperature); String pres = String(pressure); String alt = String(altitude); String hum = String(humidity); String values = String(temp)+","+ String(pres)+","+ String(alt)+","+ String(hum); String cmd = "AT+SEND=0,"+String(values.length())+","+values; lora.println(cmd); while(lora.available()) { Serial.write(lora.read()); } Serial.println(); Serial.println(cmd); delay(5000); } |
Код приемника
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 27 |
#include <SoftwareSerial.h> SoftwareSerial lora(2,3); void setup() { // put your setup code here, to run once: Serial.begin(115200); lora.begin(115200); } void loop() { String inString; while (lora.available()) { if(lora.available()){ inString += String(char(lora.read())); } } if(inString.length()>0) { Serial.println(inString); inString.remove(0); } } |
После загрузки кода вы можете открыть последовательный монитор (Serial Monitor) для обеих частей: передатчика и приемника. Схема отправителя/передатчика будет считывать данные датчика BME280 и отправлять их по беспроводной сети на приемник. Приемник будет получать данные и отображать их в окне монитора последовательной связи вместе с сигналом RSSI.
Таким образом мы можем организовать связь точка-точка между Reyax LoRa RYLR890 или RYLR896 и Arduino.
Видео, демонстрирующее работу проекта
Некоторые другие продукты компании Reyax Technology, такие как RYS8830 и RYB080I, могут быть полезны в некоторых других беспроводных приложениях.