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); } }