{"id":2160,"date":"2020-02-06T11:21:06","date_gmt":"2020-02-06T16:21:06","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/edelros\/?p=2160"},"modified":"2026-08-04T22:18:44","modified_gmt":"2026-08-05T03:18:44","slug":"lora-multipunto-dispositivo-ino","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/lora-multipunto-dispositivo-ino\/","title":{"rendered":"2. LoRa Multipunto - Dispositivo.ino Lora-ESP32"},"content":{"rendered":"\n<p><em><strong>Referencia<\/strong><\/em>: <a href=\"https:\/\/github.com\/Heltec-Aaron-Lee\/WiFi_Kit_series\">https:\/\/github.com\/Heltec-Aaron-Lee\/WiFi_Kit_series<\/a><\/p>\n\n\n\n<p>Para prueba del concepto, se implementa un dispositivo simplificado, un dispositivo que emite un \"parpadeo\" binario como estado de sensor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estado del sensor<\/h2>\n\n\n\n<p>El estado del sensor se indica con los valores <code>\"ON\"<\/code> encendido y <code>\"OFF\"<\/code> para apagado. El parpadeo se realiza a intervalos de tiempo de duraci\u00f3n aleatoria entre 1 a 3 segundos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Direccionamiento<\/h2>\n\n\n\n<p>El direccionamiento se realiza usando un n\u00famero hexadecimal almacenado en un byte. Por facilidad de identificaci\u00f3n, se usa como direcci\u00f3n :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>D<\/strong>ispositivo usa <code>\"<strong>D<\/strong>1\"<\/code> por la inicial, los otros dispositivos ser\u00e1n <code>\"D2\"<\/code>,<code>\"D3\"<\/code>, etc.<\/li>\n\n\n\n<li>gateway usa la direcci\u00f3n <code>\"<strong>C<\/strong>1\"<\/code> cuya inicial es de <strong>C<\/strong>oncentrador o coordinador, nombre tambi\u00e9n usado en otras tecnolog\u00edas.<\/li>\n<\/ul>\n\n\n\n<p>El algoritmo esta realizado para una placa de desarrollo LoRa, la disponible es de marca Heltec LoRa ESP32 que ofrece librer\u00edas simplificadas. Un siguiente paso de desarrollo consiste en usar un m\u00f3dulo LoRa y un Arduino Uno por ejemplo, realizado con librer\u00edas m\u00e1s generales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instrucciones<\/h2>\n\n\n\n<p>Las instrucciones de dividen en el bloque principal, el procedimiento de sensor, y los procedimientos LoRa para env\u00edo y recepci\u00f3n, separados en cada pesta\u00f1a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bloque principal<\/h3>\n\n\n\n<p>Declara las librer\u00edas para el m\u00f3dulo o placa de desarrollo Heltec, se indica los par\u00e1metros LoRa como la Banda ISM que para Ecuador es US915, tambi\u00e9n se establecen las variables para el manejo de los mensajes de <strong>env\u00edo<\/strong> y <strong>recepci\u00f3n<\/strong>, tiempo de lecturas del sensor \"simulado\" para la prueba.<\/p>\n\n\n\n<p>El bucle de configuraci\u00f3n <code>setup()<\/code> inicializa el m\u00f3dulo y el de operaci\u00f3n <code>loop()<\/code> revisa los tiempos en los que se debe realizar la lectura del sensor y el env\u00edo del mensaje LoRa. Luego revisa si se ha recibido un mensaje LoRa para mostrarlo en la ventana del \"<em>monitor serie\"<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"616\" height=\"131\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_01.png\" alt=\"\" class=\"wp-image-3687\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_01.png 616w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_01-300x64.png 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/* Dispositivo Sensor Blink Parpadeo ON\/OFF\n * http:\/\/blog.espol.edu.ec\/girni\/lora-multipunto-esquema\/\n * Referencia: Ejemplos de Aaron.Lee www.heltec.cn\n*\/\n#include &quot;heltec.h&quot;\n\n\/\/ LoRa Banda ISM en Regi\u00f3n 915Mhz\n#define BAND \u00a0915E6 \u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 433E6,868E6,915E6\nbyte spread_factor = 8; \u00a0\/\/ rango 6-12,default 7\n\n\/\/ Mensaje LoRa a enviar por direcciones\nbyte dir_local \u00a0\u00a0= 0xD1; \/\/ Dispositivo 1\nbyte dir_destino = 0xC1; \/\/ Dispositivo 2\nbyte id_msjLoRa \u00a0= 0; \u00a0\u00a0\u00a0\/\/ cuenta mensaje\nString paqueteEnv= &quot;&quot;;   \/\/ mensaje\n\n\/\/ Mensaje LoRa recibido\nbyte dir_envio \u00a0= 0xD1; \/\/ receptor\nbyte dir_remite = 0xC1; \/\/ emisor\nString paqueteRcb = &quot;&quot;; \/\/ mensaje LoRa\nbyte \u00a0\u00a0paqRcb_ID \u00a0= 0;\nbyte \u00a0\u00a0paqRcb_Estado = 0;\n \u00a0\/\/ 0:vacio, 1: nuevo, 2:incompleto\n \u00a0\/\/ 3:otro destinatario, 4:Broadcast\n\n\/\/ Mensajes por Puerto Serial activa\nboolean serial_msj = true;\n\n\/\/ SENSOR Parpadeo\nString sensorEstado = &quot;ON&quot;; \/\/ ON\/OFF: 1\/0\n\/\/ tiempo entre lecturas\nlong tiempo_antes \u00a0\u00a0\u00a0\u00a0= 0;\nlong tiempo_intervalo = 6000;\nlong tiempo_espera = tiempo_intervalo + random(3000);\n\nvoid setup(){\n \u00a0Heltec.begin(false \/*DisplayEnable Enable*\/,\n \u00a0\u00a0\u00a0true \/*Heltec.Heltec.Heltec.LoRa Disable*\/,\n \u00a0\u00a0\u00a0serial_msj \/*Serial Enable*\/,\n \u00a0\u00a0\u00a0true \/*PABOOST Enable*\/,\n \u00a0\u00a0\u00a0BAND \/*long BAND*\/);\n \u00a0LoRa.setSpreadingFactor(spread_factor);\n\n \u00a0\/\/LoRa.onReceive(cbk);\n \u00a0LoRa.receive();\n}\n\nvoid loop(){\n \u00a0int rssi_lora = 0; \/\/ nivel de se\u00f1al\n \u00a0int snr_lora \u00a0= 0;\n \u00a0\n \u00a0\/\/ Enviar mensajes entre intervalos\n \u00a0long tiempo_ahora \u00a0\u00a0= millis();\n \u00a0long t_transcurrido = tiempo_ahora - tiempo_antes;\n \u00a0\n \u00a0if (t_transcurrido &gt;= tiempo_espera){\n\n \u00a0\u00a0\u00a0sensor_revisa(); \/\/actualiza sensor\n \u00a0\u00a0\u00a0\n \u00a0\u00a0\u00a0paqueteEnv = String(sensorEstado).c_str() ;\n \u00a0\u00a0\u00a0envia_lora(dir_destino, dir_local,\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0id_msjLoRa, paqueteEnv);\n \u00a0\u00a0\u00a0id_msjLoRa = id_msjLoRa + 1;\n \u00a0\u00a0\u00a0\u00a0\n \u00a0\u00a0\u00a0\/\/ mensaje a serial monitor\n \u00a0\u00a0\u00a0if (serial_msj == true){\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;Enviado: \u00a0&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(String(dir_local,HEX));\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(String(dir_destino,HEX));\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(id_msjLoRa-1); \n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.println(paqueteEnv);\n \u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0\n \u00a0\u00a0\u00a0tiempo_antes = millis();\n \u00a0\u00a0\u00a0tiempo_espera = tiempo_intervalo + random(3000);\n \u00a0\u00a0\u00a0\n \u00a0\u00a0\u00a0\/\/ LED parpadea. Envio LoRa\n \u00a0\u00a0\u00a0digitalWrite(LED, HIGH); delay(100);\n \u00a0\u00a0\u00a0digitalWrite(LED, LOW ); delay(100);\n \u00a0}\n\n \u00a0\/\/ Revisar mensajes LoRa entrantes\n \u00a0int msjRcbLoRa = LoRa.parsePacket();\n \u00a0if (msjRcbLoRa !=0){\n \u00a0\u00a0\u00a0recibe_lora(msjRcbLoRa);\n \u00a0\u00a0\u00a0rssi_lora = LoRa.packetRssi();\n \u00a0\u00a0\u00a0snr_lora \u00a0= LoRa.packetSnr();\n \u00a0\u00a0\u00a0\n \u00a0\u00a0\u00a0if (serial_msj == true){\n \u00a0\u00a0\u00a0\u00a0\u00a0if (paqRcb_Estado == 1){\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;Recibido: &quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(String(dir_remite,HEX)); \n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(String(dir_envio,HEX));\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(paqRcb_ID); \u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(paqueteRcb); Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(rssi_lora); \u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(snr_lora); \u00a0\u00a0Serial.print(&quot;,&quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.println();\n \u00a0\u00a0\u00a0\u00a0\u00a0}else{\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.print(&quot;Paquete recibido Estado: &quot;);\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial.println(paqRcb_Estado);\n \u00a0\u00a0\u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0\n \u00a0\u00a0\u00a0\/\/ LED parpadea Rebibido Lora\n \u00a0\u00a0\u00a0digitalWrite(LED, HIGH); delay(50);\n \u00a0\u00a0\u00a0digitalWrite(LED, LOW ); delay(50);\n \u00a0\u00a0\u00a0digitalWrite(LED, HIGH); delay(50);\n \u00a0\u00a0\u00a0digitalWrite(LED, LOW );\n \u00a0}\n \u00a0delay(100);\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Procedimiento de env\u00edo de paquete LoRa<\/h3>\n\n\n\n<p>Se toman los valores para destino, remitente, identificador de paquete y el mensaje o paquete a enviar, para realizar el paso de envio del mensaje con la instrucci\u00f3n <code>LoRa.write()<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"128\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_02.png\" alt=\"\" class=\"wp-image-3688\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_02.png 613w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_02-300x63.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nvoid envia_lora(byte destino, byte remite,\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0byte paqueteID, String paquete){\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n \u00a0\/\/ espera radio para enviar un paquete\n \u00a0while(LoRa.beginPacket() == 0){\n \u00a0\u00a0\u00a0if (serial_msj==true){\n \u00a0\u00a0\u00a0\u00a0\u00a0Serial.println(&quot;Esperando radio disponible...&quot;);\n \u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0delay(100);\n \u00a0}\n \u00a0\n \u00a0\/\/ envio del mensaje LoRa\n \u00a0LoRa.beginPacket();\n \u00a0LoRa.write(destino);\n \u00a0LoRa.write(remite);\n \u00a0LoRa.write(paqueteID);\n \u00a0LoRa.write(paquete.length());\n \u00a0LoRa.print(paquete);\n \u00a0LoRa.endPacket();\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Procedimiento de recepci\u00f3n de paquete LoRa<\/h3>\n\n\n\n<p>Para recibir un paquete LoRa se procede en el mismo orden realizado para el env\u00edo, es decir primero se recibe la direcci\u00f3n de env\u00edo, la direcci\u00f3n del remitente, el identificador del mensaje, tama\u00f1o del mensaje en bytes, todo lo que viene luego es el mensaje transmitido.<\/p>\n\n\n\n<p>Luego se revisa el tama\u00f1o del paquete recibido y se compara con el valor de la variable de tama\u00f1o del mensaje. Esto permite validar si el mensaje se ha recibido completo o requiere alguna retransmisi\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_03.png\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"126\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_03.png\" alt=\"\" class=\"wp-image-3689\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_03.png 615w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_03-300x61.png 300w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nvoid recibe_lora(int tamano){\n \u00a0if (tamano == 0){ \n \u00a0\u00a0\u00a0paqRcb_Estado = 0; \/\/vacio\n \u00a0\u00a0\u00a0return;\n \u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0\n \u00a0\/\/ lectura de paquete\n \u00a0paqueteRcb = &quot;&quot;;\n \u00a0dir_envio \u00a0= LoRa.read();\n \u00a0dir_remite = LoRa.read();\n \u00a0paqRcb_ID \u00a0= LoRa.read();\n \u00a0\n \u00a0byte paqRcb_Tamano = LoRa.read();\n \u00a0while(LoRa.available()){\n \u00a0\u00a0\u00a0paqueteRcb += (char)LoRa.read();\n \u00a0}\n \u00a0\n \u00a0if (paqRcb_Tamano != paqueteRcb.length()){\n \u00a0\u00a0\u00a0paqRcb_Estado = 2; \/\/ Tama\u00f1o incompleto\n \u00a0\u00a0\u00a0return;\n \u00a0}\n \u00a0if (dir_envio != dir_local){\n \u00a0\u00a0\u00a0paqRcb_Estado = 3; \/\/ otro destino\n \u00a0\u00a0\u00a0return;\n \u00a0}\n \u00a0if (dir_envio == 0xFF) {\n \u00a0\u00a0\u00a0paqRcb_Estado = 4; \/\/Broadcast, difusion\n \u00a0\u00a0\u00a0return;\n \u00a0}\n \u00a0paqRcb_Estado = 1; \u00a0\u00a0\/\/ mensaje Nuevo\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Procedimiento para el sensor<\/h3>\n\n\n\n<p>En el ejercicio el procedimiento para el sensor consiste en altenar los valores entre encendido y apagado, el valor cambia cada vez que se use el procedimiento sensor_revisa()<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_04.png\"><img loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"129\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_04.png\" alt=\"\" class=\"wp-image-3690\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_04.png 613w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_04-300x63.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/\/ Sensor Simulado\nvoid sensor_revisa(){\n \u00a0\u00a0\u00a0if (sensorEstado == &quot;ON&quot;){\n \u00a0\u00a0\u00a0\u00a0\u00a0sensorEstado = &quot;OFF&quot;;\n \u00a0\u00a0\u00a0}else{\n \u00a0\u00a0\u00a0\u00a0\u00a0sensorEstado = &quot;ON&quot;;\n \u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p>Para subir todas las instrucciones recuerde primero seleccionar la placa de desarrollo correspondiente y verificar el <code>puerto com<\/code> al que se conecta<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Resultados en monitor serie<\/h3>\n\n\n\n<p>El resultado observable en monitor serie es semejante al mostrado:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2019\/08\/Mqtt_inicia07.png\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"64\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2019\/08\/Mqtt_inicia07.png\" alt=\"\" class=\"wp-image-3561\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2019\/08\/Mqtt_inicia07.png 680w, https:\/\/blog.espol.edu.ec\/girni\/files\/2019\/08\/Mqtt_inicia07-300x28.png 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>Serial initial done\nLoRa Initial success!\nEnviado:  d1,c1,0,OFF\nEnviado:  d1,c1,1,ON\nEnviado:  d1,c1,2,OFF\nEnviado:  d1,c1,3,ON<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Pruebas punto a punto<\/h2>\n\n\n\n<p>Para realizar pruebas punto a punto, es necesario usar todas las instrucciones anteriores y cambiar solamente la direcci\u00f3n local y destino del mensaje y&nbsp; en el bloque principal siguiendo el esquema:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/Lora_PuntoAPunto01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1045\" height=\"295\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/Lora_PuntoAPunto01.png\" alt=\"\" class=\"wp-image-2153\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/Lora_PuntoAPunto01.png 1045w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/Lora_PuntoAPunto01-300x85.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/Lora_PuntoAPunto01-768x217.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/Lora_PuntoAPunto01-1024x289.png 1024w\" sizes=\"auto, (max-width: 1045px) 100vw, 1045px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #434f54\">\/\/ LoRa envia paquete, direccion, contador<\/span>\n<span style=\"color: #00979c\">byte<\/span> <span style=\"color: #000000\">dir_local<\/span> &nbsp;&nbsp;&nbsp;<span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0xC1<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/ Dispositivo 1<\/span>\n<span style=\"color: #00979c\">byte<\/span> <span style=\"color: #000000\">dir_destino<\/span> &nbsp;<span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0xD1<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/ Dispositivo 2<\/span><\/code><\/pre>\n\n\n\n<p>En el caso de recepci\u00f3n, los valores se actualizan en el procedimiento, dado que las direcciones son parte de la trama de datos, por lo que los valores declarados son solo referenciales.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #434f54\">\/\/ LoRa recibe paquete<\/span>\n<span style=\"color: #00979c\">byte<\/span> <span style=\"color: #000000\">dir_envio<\/span> &nbsp;<span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0xC1<\/span><span style=\"color: #000000\">;<\/span> &nbsp;<span style=\"color: #434f54\">\/\/ receptor<\/span>\n<span style=\"color: #00979c\">byte<\/span> <span style=\"color: #000000\">dir_remite<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0xD1<\/span><span style=\"color: #000000\">;<\/span> &nbsp;<span style=\"color: #434f54\">\/\/ emisor<\/span><\/code><\/pre>\n\n\n\n<p>Con lo que se pueden intercambiar mensajes entre dispositivos, modalidad punto a punto, obteniendo el siguiente resultado si est\u00e1n conectados las dos placas de desarrollo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_05.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1305\" height=\"543\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_05.png\" alt=\"\" class=\"wp-image-3700\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_05.png 1305w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_05-300x125.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_05-768x320.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/02\/LoRaMultipuntoDispositivo_05-1024x426.png 1024w\" sizes=\"auto, (max-width: 1305px) 100vw, 1305px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Referencia: https:\/\/github.com\/Heltec-Aaron-Lee\/WiFi_Kit_series Para prueba del concepto, se implementa un dispositivo simplificado, un dispositivo que emite un \"parpadeo\" binario como estado de sensor. Estado del sensor El estado del sensor se indica con los valores \"ON\" encendido y \"OFF\" para apagado. El parpadeo se realiza a intervalos de tiempo de duraci\u00f3n aleatoria entre 1 a 3 [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1436897],"tags":[602214,1457738],"class_list":["post-2160","post","type-post","status-publish","format-standard","hentry","category-lora-multipunto","tag-iot","tag-lora"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=2160"}],"version-history":[{"count":29,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2160\/revisions"}],"predecessor-version":[{"id":4888,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2160\/revisions\/4888"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=2160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=2160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=2160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}