carlosvolt
Published © LGPL

Turn on Light with Reyax RYLR896 LoRa Modules with Acknowled

In this tutorial, you will learn how to use the Reyax RYLR896 LoRa modules to wirelessly and reliably control lights. We will take advantage

IntermediateProtip61
Turn on Light with Reyax RYLR896 LoRa Modules with Acknowled

Things used in this project

Story

Read more

Code

Source code Emisor

C/C++
Source code emisor
#include <U8glib.h>
// Inicializa el display SH1106
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
// Define el pin del botón
const int pinBoton = 12;
bool botonPresionado = false;
bool mensajeEnviado = false;
// Variables para los mensajes a mostrar en el display
String mensajeDisplay = "Presiona la tecla";
// Configuración inicial
void setup() {
  // Configura el pin del botón como entrada con resistencia pull-up interna
  pinMode(pinBoton, INPUT_PULLUP);
  // Inicializa la comunicación serial
  Serial.begin(9600);
  // Dibuja el mensaje inicial en el display
  dibujar();
}
// Función para dibujar en el display
void dibujar() {
  u8g.firstPage();
  do {
    u8g.setFont(u8g_font_unifont);
    u8g.drawStr(0, 22, mensajeDisplay.c_str());
  } while (u8g.nextPage());
}
// Loop principal
void loop() {
  // Lee el estado del botón (inverso porque estamos usando pull-up)
  if (digitalRead(pinBoton) == LOW) {
    if (!botonPresionado) {
      botonPresionado = true;
      mensajeEnviado = true;      
      // Envía el mensaje por el puerto serial con retorno de carro y nueva línea
      Serial.print("AT+SEND=0,5,HELLO\r\n");      
      // Cambia el mensaje del display
      mensajeDisplay = "Mensaje enviado!";      
      // Dibuja en el display
      dibujar();      
      // Espera para evitar rebotes del botón
      delay(200);
    }
  } else {
    botonPresionado = false;
  }  
  // Revisa si hay datos disponibles en el puerto serial
  if (Serial.available() > 0) {
    // Lee la entrada serial
    String entrada = Serial.readStringUntil('\n');    
    // Procesa el mensaje recibido utilizando indexOf para buscar las palabras clave
    if (entrada.indexOf("luzon") != -1) {
      mensajeDisplay = "Luz encendida";
      dibujar();
    } else if (entrada.indexOf("luzoff") != -1) {
      mensajeDisplay = "Luz apagada";
      dibujar();
    }
  }
  // Si no se ha enviado ningún mensaje aún, mantiene el mensaje inicial
  if (!mensajeEnviado) {
    dibujar();
  }
}

Source code receiver

C/C++
source code receiver
const int pinLed = 12;  // Pin digital al que está conectado el LED
bool estadoLed = false;  // Variable para rastrear el estado del LED
void setup() {
  // Configura el pin digital como salida
  pinMode(pinLed, OUTPUT);
  // Inicia la comunicación serial a 9600 baudios
  Serial.begin(9600);
}
void loop() {
  // Verifica si hay datos disponibles en el puerto serial
  if (Serial.available() > 0) {
    // Lee la cadena entrante
    String entrada = Serial.readStringUntil('\n');
    // Busca la palabra "HELLO" en la cadena
    int indiceHello = entrada.indexOf("HELLO");
    // Si "HELLO" está presente, cambia el estado del LED
    if (indiceHello != -1) {
      estadoLed = !estadoLed;  // Cambia el estado del LED
      digitalWrite(pinLed, estadoLed ? HIGH : LOW);  // Enciende o apaga el LED según el nuevo estado
      // Envía el mensaje por el puerto serie según el estado del LED
      if (estadoLed) {
        Serial.println("AT+SEND=0,5,luzon\r\n");
      } else {
        Serial.println("AT+SEND=0,6,luzoff\r\n");
      }
    }
  }
}

Credits

carlosvolt

carlosvolt

33 projects • 3 followers

Comments