4. LoRa Multipunto – HELTEC CubeCell SemiDuplex.ino con direcciones

Aunque se reciben todos los mensajes en el radio, se requiere discriminar los mensajes que son dirigidos hacia el dispositivo local.

Se modifica las intrucciones de recepción añadiendo un bloque para discriminar si el mensaje es para el dispositivo local. Esto implica descomponer la trama enviada en sus partes y convertir al tipo de dato a usar.

Las operaciones se realizan por caracter o byte con el objetivo de establecer el mecanismo a usar cuando se usa LoRaWan

Resultados obtenidos en puerto serial

TX Paquete "312159" , tamano 6 bytes , proximo en 9341 ms 
    RX Paquete "213169" , tamanio 6, Rssi -20 
    Lee mensaje enviado por: 21 valor mensaje: 69
TX Paquete "312160" , tamano 6 bytes , proximo en 8062 ms 
    RX Paquete "213170" , tamanio 6, Rssi -20 
    Lee mensaje enviado por: 21 valor mensaje: 70

Procedimiento de recepción de paquete LoRa

void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) {
  turnOnRGB(COLOR_RECEIVED,0);
  Rssi = rssi;     // nivel de recepcion
  rxSize = size;
  memcpy(rxpacket, payload, size );
  rxpacket[size]='\0';  //añade fin de cadena

  Radio.Sleep( );

  Serial.printf("\r    RX Paquete \"%s\" , tamanio %d, Rssi %d \r\n",
                rxpacket,rxSize,Rssi);
                
  //revisa direcciones
  char envia[4];  byte dir_envia;
  char recibe[4]; byte dir_recibe;
  char msj[4];    byte msj_valor;
  envia[0] = rxpacket[0];
  envia[1] = rxpacket[1];
  envia[2] = '\0';  //añade fin de cadena
  recibe[0] = rxpacket[2];
  recibe[1] = rxpacket[3];
  recibe[2] = '\0';  //añade fin de cadena
  msj[0] = rxpacket[4];
  msj[1] = rxpacket[5];
  msj[2] = '\0';  //añade fin de cadena
  
  //convierte a tipo de datos
  dir_envia  = byte(atoi(envia));
  dir_recibe = byte(atoi(recibe));
  msj_valor  = byte(atoi(msj));
  
  // Muestra o discrimina mensaje en Serial-USB/Pantalla
  if (dir_recibe = dir_local){
    Serial.print("    -- Lee mensaje enviado por: ");
    Serial.print(dir_envia);
    Serial.print(" valor mensaje: ");
    Serial.println(msj_valor);
  }
}