{"id":4076,"date":"2023-06-24T17:26:43","date_gmt":"2023-06-24T22:26:43","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=4076"},"modified":"2026-08-04T22:47:36","modified_gmt":"2026-08-05T03:47:36","slug":"lorawan-parametros-up-down-pantalla-archivo-ino","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/lorawan-parametros-up-down-pantalla-archivo-ino\/","title":{"rendered":"LoRaWan - Par\u00e1metros Up\/Down: Pantalla Archivo.ino"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Pantalla OLED con parametros RSSI UP\/DOWN<\/h2>\n\n\n\n<p>Probador de Rssi de subida y bajada<\/p>\n\n\n\n<p>Hardware: Heltec cubecell AB02, con pantalla OLED incorporada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OLED_pantalla.ino<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nvoid displayconectando(){\n\tdisplay2.setFont(ArialMT_Plain_16);\n\tdisplay2.setTextAlignment(TEXT_ALIGN_CENTER);\n\tdisplay2.clear();\n\tdisplay2.drawString(58, 22, &quot;Joining...&quot;);\n\tdisplay2.display();\n}\nvoid displayConectado(){\n\tdisplay2.clear();\n\tdisplay2.drawString(64, 22, &quot;Conectado_OK&quot;);\n\tdisplay2.display();\n\tdelay(500);\n}\nvoid displayTransmitiendo(){\n\tdigitalWrite(Vext,LOW);\n\tdisplay2.init();\n\tdisplay2.setFont(ArialMT_Plain_16);\n\tdisplay2.setTextAlignment(TEXT_ALIGN_CENTER);\n\tdisplay2.clear();\n\tdisplay2.drawString(58, 22, &quot;Tx...&quot;);\n\tdisplay2.display();\n\tdelay(500);\n}\nvoid displayPaqRecibido(){\n \u00a0char temp&#x5B;25];\n\tdisplay2.clear();\n \u00a0display2.setFont(ArialMT_Plain_16);\n \u00a0display2.setTextAlignment(TEXT_ALIGN_LEFT);\n \u00a0sprintf(temp,&quot;Rx snr:%d,dr:%d&quot;,Down_snr, Down_datarate);\n\tdisplay2.drawString(0, 0, temp); \/\/22\n\tsprintf(temp,&quot;rssiDw: -%d&quot;,Down_rssi);\n\tdisplay2.setFont(ArialMT_Plain_24);\n\tdisplay2.setTextAlignment(TEXT_ALIGN_RIGHT);\n\tdisplay2.drawString(128, 16, temp);\n \u00a0sprintf(temp,&quot;rssiUp: -%d&quot;,Up_rssi);\n\tdisplay2.setFont(ArialMT_Plain_24);\n\tdisplay2.setTextAlignment(TEXT_ALIGN_RIGHT);\n\tdisplay2.drawString(128, 40, temp);\n\n \u00a0display2.drawString(0,0, temp);\n\tif(loraWanClass==CLASS_A)\t{\n\t\tdisplay2.setFont(ArialMT_Plain_10);\n\t\tdisplay2.setTextAlignment(TEXT_ALIGN_LEFT);\n\t\tdisplay2.drawString(28, 50, &quot;Into deep sleep in 2S&quot;);\n\t}\n\tdisplay2.display();\n \u00a0delay(10000);\n \u00a0display2.clear();\n\tif(loraWanClass==CLASS_A){\n\t\tdigitalWrite(Vext,HIGH);\n\t\tdisplay2.stop();\n\t}\n}\n\nvoid displayAckRecibido(){\n \u00a0char temp&#x5B;25];\n\tdisplay2.clear();\n \u00a0display2.setFont(ArialMT_Plain_16);\n \u00a0display2.setTextAlignment(TEXT_ALIGN_LEFT);\n \u00a0sprintf(temp,&quot;ACK snr:%d,dr:%d&quot;,confirmaSnr, confirmaDatarate);\n\tdisplay2.drawString(0, 0, temp); \/\/22\n\tsprintf(temp,&quot;rssiDw: -%d&quot;,confirmaRssi);\n\tdisplay2.setFont(ArialMT_Plain_24);\n\tdisplay2.setTextAlignment(TEXT_ALIGN_RIGHT);\n\tdisplay2.drawString(128, 16, temp);\n\tif(loraWanClass==CLASS_A)\t{\n\t\tdisplay2.setFont(ArialMT_Plain_10);\n\t\tdisplay2.setTextAlignment(TEXT_ALIGN_LEFT);\n\t\tdisplay2.drawString(28, 50, &quot;Into deep sleep in 2S&quot;);\n\t}\n\tdisplay2.display();\n \u00a0delay(10000);\n\tif(loraWanClass==CLASS_A)\t{\n\t\tdigitalWrite(Vext,HIGH);\n\t\tdisplay2.stop();\n\t}\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">CubeCell_Practicas2023OLED.ino<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/\/ Lectura de Rssi Snr, datarate Up\/Downlink\n\/\/ Datos Downlink de la trama de confirmaci\u00f3n anterior\n\/\/ http:\/\/blog.espol.edu.ec\/girni\/lorawan-enlaces-up-down-archivo-ino\/\n#include &quot;LoRaWan_APP.h&quot;\n#include &quot;Arduino.h&quot;\n#include &lt;Wire.h&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n#include &quot;HT_SH1107Wire.h&quot;\n\nSH1107Wire \u00a0display2(0x3c, 500000, SDA, SCL ,GEOMETRY_128_64,GPIO10); \/\/ addr, freq, sda, scl, resolution, rst\n\n\/* set LoraWan_RGB to Active,the RGB active in loraWan\n * red \u00a0\u00a0|sending; \u00a0\u00a0purple | joined done;\n * blue \u00a0|RxWindow1; yellow | means RxWindow2;\n * green | received done;\n *\/\n\/* Conexi\u00f3n LoRa: OTAA parametros*\/\nuint8_t devEui&#x5B;] = { 0xa5, 0x3e, 0xc6, 0x15, 0xae, 0xde, 0x3f, 0x50 };\nuint8_t appEui&#x5B;] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };\nuint8_t appKey&#x5B;] = { 0x88, 0xbe, 0x25, 0xca, 0x2c, 0xcf, 0x31, 0x85,\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x51, 0x2d, 0xee, 0xe2, 0x80, 0x31, 0x8e, 0x01 };\n\/* ABP parametros*\/\nuint8_t nwkSKey&#x5B;] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe,\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 };\nuint8_t appSKey&#x5B;] = { 0x47, 0xdc, 0xac, 0x5f, 0xc2, 0x32, 0x24, 0x31, \n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00xdf, 0xf1, 0xff, 0xf9, 0x46, 0xe5, 0x2e, 0x17 };\nuint32_t devAddr = \u00a0( uint32_t )0x007bc4150;\n\/*LoraWan channelsmask, default channels 0-7*\/ \nuint16_t userChannelsMask&#x5B;6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };\n\n\/*Select in arduino IDE tools*\/\nLoRaMacRegion_t loraWanRegion = ACTIVE_REGION;\nDeviceClass_t \u00a0loraWanClass = LORAWAN_CLASS;\nbool overTheAirActivation = LORAWAN_NETMODE;\nbool loraWanAdr = LORAWAN_ADR;\nbool keepNet = LORAWAN_NET_RESERVE;\nbool isTxConfirmed = LORAWAN_UPLINKMODE;\n\nuint8_t duermemin = 0; \/\/15\nuint8_t duermeseg = 300; \/\/0\n\nuint32_t appTxDutyCycle = (duermemin*60 + duermeseg)*1000; \/\/ min*seg*ms\n\nuint8_t appPort = 4; \/* Application port *\/\n\/* trials to transmit frame, if didn't receive ack.\n * The MAC performs a datarate adaptation,\n * Tx nb|Data Rate\n * -----|----------\n * 1 \u00a0\u00a0\u00a0|DR \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0* 5 \u00a0\u00a0\u00a0| max(DR-2,0)\n * 2 \u00a0\u00a0\u00a0|DR \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0* 6 \u00a0\u00a0\u00a0| max(DR-2,0)\n * 3 \u00a0\u00a0\u00a0|max(DR-1,0) \u00a0* 7 \u00a0\u00a0\u00a0| max(DR-3,0)\n * 4 \u00a0\u00a0\u00a0|max(DR-1,0) \u00a0* 8 \u00a0\u00a0\u00a0| max(DR-3,0)\n*\/\nuint8_t confirmedNbTrials = 4;\n\n\/\/ Ack parametros de recepci\u00f3n\nuint8_t confirmaRssi = 0;\nuint8_t confirmaSnr = 0;\nuint8_t confirmaDatarate = 0;\n\n\/\/ Ack parametros de recepci\u00f3n\nuint8_t Down_rssi = 0;\nuint8_t Down_snr = 0;\nuint8_t Down_datarate = 0;\n\nuint8_t Up_rssi = 0;\n\nuint8_t itera = 0;\nuint8_t estado = 0; \/\/0x00, 0x01,&quot;OFF&quot;,&quot;ON&quot;\n\nvoid setup() {\n\tSerial.begin(115200);\n \n#if(AT_SUPPORT)\n\tenableAt();\n#endif\n\n \u00a0\/\/ OLED display status\n \u00a0\/\/LoRaWAN.displayMcuInit();\n \u00a0\n\tdeviceState = DEVICE_STATE_INIT;\n\t\/\/LoRaWAN.ifskipjoin(); \/\/if joinned,skip\n\n \u00a0display2.init();\n \u00a0display2.setFont(ArialMT_Plain_10);\n}\n\nvoid loop() {\n \u00a0Serial.print(&quot;.&quot;);\n \u00a0itera = itera + 1;\n \u00a0if (itera&gt;6){\n \u00a0\u00a0\u00a0itera = 0;\n \u00a0\u00a0\u00a0Serial.println(&quot; &quot;);\n \u00a0}\n\tswitch( deviceState ) {\n\t\tcase DEVICE_STATE_INIT: {\n#if(LORAWAN_DEVEUI_AUTO)\n\t\t\tLoRaWAN.generateDeveuiByChipID();\n#endif\n#if(AT_SUPPORT)\n\t\t\tgetDevParam();\n#endif\n\t\t\tprintDevParam();\n\t\t\tLoRaWAN.init(loraWanClass,loraWanRegion);\n\t\t\tdeviceState = DEVICE_STATE_JOIN;\n\t\t\tbreak;\n\t\t}\n\t\tcase DEVICE_STATE_JOIN: {\n \u00a0\u00a0\u00a0\u00a0\u00a0\/\/LoRaWAN.displayJoining();\n \u00a0\u00a0\u00a0\u00a0\u00a0displayconectando();\n\t\t\tLoRaWAN.join();\n\t\t\tbreak;\n\t\t}\n\t\tcase DEVICE_STATE_SEND:\t{\n \u00a0\u00a0\u00a0\u00a0\u00a0\/\/LoRaWAN.displaySending();\n \u00a0\u00a0\u00a0\u00a0\u00a0displayTransmitiendo();\n\t\t\tprepareTxFrame( appPort );\n\t\t\tLoRaWAN.send();\n\t\t\tdeviceState = DEVICE_STATE_CYCLE;\n\t\t\tbreak;\n\t\t}\n\t\tcase DEVICE_STATE_CYCLE: {\n\t\t\t\/\/ Schedule next packet transmission\n\t\t\ttxDutyCycleTime = appTxDutyCycle + randr( 0, APP_TX_DUTYCYCLE_RND );\n\t\t\tLoRaWAN.cycle(txDutyCycleTime);\n\t\t\tdeviceState = DEVICE_STATE_SLEEP;\n\t\t\tbreak;\n\t\t}\n\t\tcase DEVICE_STATE_SLEEP: {\n \u00a0\u00a0\u00a0\u00a0\u00a0\/\/LoRaWAN.displayAck();\n\t\t\tLoRaWAN.sleep();\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tdeviceState = DEVICE_STATE_INIT;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">LoRaWanEnvia.ino<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/* Prepares the payload of the frame *\/\nstatic void prepareTxFrame( uint8_t port ) {\n \u00a0\/\/ enciende sensor\n \u00a0pinMode(Vext, OUTPUT);\n \u00a0digitalWrite(Vext, LOW);\n \u00a0\/\/Lectura de Sensor\n\n \u00a0\/\/apaga sensor\n \u00a0digitalWrite(Vext, HIGH);\n \u00a0\n \u00a0\/\/ lectura de bateria \u00a0\n \u00a0uint16_t batteryVoltage = getBatteryVoltage();\n \u00a0unsigned char *puc;\n\n \u00a0\/\/ trama\n \u00a0appDataSize = 5;\n \u00a0appData&#x5B;0] = confirmaRssi; \/\/Ack leido en dispositivo\n \u00a0appData&#x5B;1] = confirmaSnr;\n \u00a0appData&#x5B;2] = confirmaDatarate;\n \u00a0appData&#x5B;3] = (uint8_t)batteryVoltage;\n \u00a0appData&#x5B;4] = (uint8_t)(batteryVoltage&gt;&gt;8);\n\n \u00a0Serial.print(&quot;%, Bateria = &quot;);\n \u00a0Serial.println(batteryVoltage);\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">LoRaWanRecibe.ino<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/\/downlink data handle function example\nvoid downLinkDataHandle(McpsIndication_t *mcpsIndication){\n \u00a0\/\/ parametros de recepcion\n \u00a0Down_rssi = uint8_t(abs(mcpsIndication-&gt;Rssi));\n \u00a0Down_snr \u00a0= uint8_t(mcpsIndication-&gt;Snr);\n \u00a0Down_datarate = uint8_t(mcpsIndication-&gt;RxDoneDatarate);\n \u00a0\/\/ recibido de trama\n \u00a0Up_rssi = uint8_t(mcpsIndication-&gt;Buffer&#x5B;0]);\n\n \u00a0\/\/\n \u00a0Serial.print(&quot;Rx Down_rssi:-&quot;); Serial.print(Down_rssi);\n \u00a0Serial.print(&quot;, Down_snr:&quot;);Serial.print(Down_snr);\n \u00a0Serial.print(&quot;, Down_datarate: &quot;);Serial.println(Down_datarate);\n \u00a0Serial.print(&quot; UP_rssi:&quot;);\n \u00a0Serial.print(-1*Up_rssi);\n \u00a0Serial.printf(&quot; +REV DATA:%s,RXSIZE %d,PORT %d\\r&quot;,mcpsIndication-&gt;RxSlot?&quot;RXWIN2&quot;:&quot;RXWIN1&quot;,mcpsIndication-&gt;BufferSize,mcpsIndication-&gt;Port);\n \u00a0Serial.println();\n \u00a0\n \u00a0displayPaqRecibido();\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">LoRaWanRecibeConfirma.ino<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nvoid downLinkAckHandle(McpsIndication_t *mcpsIndication){\n \u00a0\/\/ ACK parametros de recepcion\n \u00a0confirmaRssi = uint8_t(abs(mcpsIndication-&gt;Rssi));\n \u00a0confirmaSnr \u00a0= uint8_t(mcpsIndication-&gt;Snr);\n \u00a0confirmaDatarate = uint8_t(mcpsIndication-&gt;RxDoneDatarate);\n\n \u00a0Serial.println(&quot;&quot;);\n \u00a0Serial.print(&quot; ack received(rssi,snd,datarate): -&quot;);\n \u00a0Serial.print(confirmaRssi);Serial.print(&quot; ,&quot;);\n \u00a0Serial.print(confirmaSnr);Serial.print(&quot; ,&quot;);\n \u00a0Serial.println(confirmaDatarate);\n \u00a0\n \u00a0displayAckRecibido();\n}\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Pantalla OLED con parametros RSSI UP\/DOWN Probador de Rssi de subida y bajada Hardware: Heltec cubecell AB02, con pantalla OLED incorporada. OLED_pantalla.ino CubeCell_Practicas2023OLED.ino LoRaWanEnvia.ino LoRaWanRecibe.ino LoRaWanRecibeConfirma.ino<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1466680],"tags":[],"class_list":["post-4076","post","type-post","status-publish","format-standard","hentry","category-lorawan-parametros-up-down"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/4076","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=4076"}],"version-history":[{"count":9,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/4076\/revisions"}],"predecessor-version":[{"id":4910,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/4076\/revisions\/4910"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=4076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=4076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=4076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}