Благодаря большой дальности и простоте использования протокол беспроводной передачи данных LoRa обрел большую популярность, как у профессиональных разработчиков, так и у радиолюбителей. В связи с этим на рынке стало появляться все больше и больше модулей LoRa, и сегодня мы рассмотрим один из недавних продуктов – RYLR998 компании Reyax.

Модуль RYLR998 представляет собой модуль антенного приемопередатчика LoRa, который работает в диапазоне 868/915 МГц. Он оснащен модемом дальнего действия LoRa, который обеспечивает сверхдальнюю связь с расширенным спектром и высокую помехоустойчивость при минимальном потреблении тока.

Модули RYLR998 имеют интерфейс UART и могут легко управляться любым микроконтроллером с помощью AT-команд. Важным примечанием здесь является то, что модули не совместимы с 5 В, поэтому вам нужно будет использовать их при напряжении 3,3 В.

Итак, для работы с данными модулями мы будем использовать две платы Arduino Pro Mini 3.3V, при этом одна будет использоваться для передатчика, другая для приемника. К 7-му цифровому выводу передатчика будет подключена кнопка. Также для индикации к шестому цифровому выводу обеих плат Arduino подключим светодиод. Схемы подключения для передатчика и приемника представлены далее.


Следующий код предназначен для передатчика. Он отправляет приемнику состояние кнопки.
int PushButton=7;
int LED=5;
int LED_state=LOW;
int Button_state=LOW;
int Button_newstate;
void setup() {
Serial.begin(57600);
pinMode(PushButton, INPUT);
pinMode(LED, OUTPUT);
Button_state=digitalRead(PushButton);
}
void loop() {
Button_newstate=digitalRead(PushButton);
if (Button_newstate > Button_state) {
if (LED_state==LOW){
digitalWrite(LED, HIGH);
LED_state=HIGH;
Serial.println("AT+SEND=2,1,H");
}
else {
digitalWrite(LED, LOW);
LED_state=LOW;
Serial.println("AT+SEND=2,1,L");
}
}
Button_state=Button_newstate;
}
Далее приведен код приемника. Он принимает поступаемое от передатчика состояние кнопки и активирует светодиод в случае, если кнопка нажата.
#define LEDPin 6
String incomingstring;
void setup() {
pinMode(LEDPin,OUTPUT);
Serial.begin(115200);
}
void loop() {
if(Serial.available()){
incomingstring= Serial.readString();
if (incomingstring.indexOf("H") >0) {
digitalWrite(LEDPin, HIGH);
}
else if (incomingstring.indexOf("L") >0) {
digitalWrite(LEDPin, LOW);
}
}
}
© digitrode.ru