{"id":3405,"date":"2021-04-04T13:02:44","date_gmt":"2021-04-04T18:02:44","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=3405"},"modified":"2021-08-06T21:02:42","modified_gmt":"2021-08-07T02:02:42","slug":"lorawan-sensor-humedad-y-temperatura-archivo-ino","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/lorawan-sensor-humedad-y-temperatura-archivo-ino\/","title":{"rendered":"LoRaWan \u2013 Sensor Humedad y Temperatura. Archivo.ino"},"content":{"rendered":"<p>El desarrollo del ejercicio se simplifica al tratarse como una extensi\u00f3n del ejemplo base de comunicaci\u00f3n Lora al que se a\u00f1ade el Sensor DHT11.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/3-5-chirpstack-anadir-un-dispositivo\/\">ChirpStack \u2013 A\u00f1adir un dispositivo<\/a><\/p>\n<p>El archivo de instrucciones se presenta en tres secciones o pesta\u00f1as. La primera contiene la declaraci\u00f3n de variables, la parte de configuraci\u00f3n y el lazo principal. Las siguientes dos secciones son procedimientos para preparaci\u00f3n de trama y lectura de sensor.<\/p>\n<h2>Preparaci\u00f3n de trama<\/h2>\n<p>El valor de temperatura se almacena en tipo real (float) que usa 4 bytes. En la trama se separan los bytes en orden LSB (Byte menos significativo primero, detalle que hay que recordar para decodificar en ChirpStack.<\/p>\n<pre>    unsigned char *puc;\r\n    puc = (unsigned char *)(&amp;temperaturaC);\r\n    appDataSize = 8;\/\/AppDataSize max value is 64\r\n    appData[0] = puc[0];\r\n    appData[1] = puc[1];\r\n    appData[2] = puc[2];\r\n    appData[3] = puc[3];\r\n<\/pre>\n<p>De utilizar el mismo formato para el valor de Humedad, el formato es muy semejante.<\/p>\n<h2>Intrucciones Principales<\/h2>\n<pre><span style=\"color: #95a5a6\"> \/*<\/span>\r\n<span style=\"color: #95a5a6\"> * HelTec Automation(TM) LoRaWAN 1.0.2 OTAA example use OTAA, CLASS A<\/span>\r\n<span style=\"color: #95a5a6\"> * Solo ESP32+LoRa series boards con licencia <\/span><u><span style=\"color: #95a5a6\">http: \/ \/www.heltec.cn \/search \/<\/span><\/u><span style=\"color: #95a5a6\">);<\/span>\r\n<span style=\"color: #95a5a6\"> *<\/span><u><span style=\"color: #95a5a6\">https: \/ \/github.com \/HelTecAutomation \/ESP32_LoRaWAN<\/span><\/u>\r\n<span style=\"color: #95a5a6\">* \/<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #434f54\">&lt;<\/span><span style=\"color: #000000\">ESP32_LoRaWAN<\/span>.<span style=\"color: #000000\">h<\/span><span style=\"color: #434f54\">&gt;<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #005c5f\">\"Arduino.h\"<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #434f54\">&lt;<\/span><b><span style=\"color: #d35400\">DHT<\/span><\/b>.<span style=\"color: #000000\">h<\/span><span style=\"color: #434f54\">&gt;<\/span>\r\n\r\n<span style=\"color: #95a5a6\"> \/*licencia Heltec ESP32 LoRaWan <\/span><u><span style=\"color: #95a5a6\">http: \/ \/resource.heltec.cn \/search<\/span><\/u><span style=\"color: #95a5a6\"> * \/<\/span>\r\n<span style=\"color: #00979c\">uint32_t<\/span>  <span style=\"color: #000000\">license<\/span>[<span style=\"color: #000000\">4<\/span>] = {<span style=\"color: #000000\">0xBE21335B<\/span>, <span style=\"color: #000000\">0xAEC3C5CE<\/span>, <span style=\"color: #000000\">0xCC0A1CF4<\/span>, <span style=\"color: #000000\">0xB836F981<\/span>};\r\n\r\n<span style=\"color: #95a5a6\"> \/* OTAA parametros* \/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">DevEui<\/span>[] = { <span style=\"color: #000000\">0x01<\/span>, <span style=\"color: #000000\">0x20<\/span>, <span style=\"color: #000000\">0x08<\/span>, <span style=\"color: #000000\">0x93<\/span>, <span style=\"color: #000000\">0xdf<\/span>, <span style=\"color: #000000\">0x80<\/span>, <span style=\"color: #000000\">0x37<\/span>, <span style=\"color: #000000\">0x74<\/span> };\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">AppEui<\/span>[] = { <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span> };\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">AppKey<\/span>[] = { <span style=\"color: #000000\">0x05<\/span>, <span style=\"color: #000000\">0x8e<\/span>, <span style=\"color: #000000\">0xeb<\/span>, <span style=\"color: #000000\">0xff<\/span>, <span style=\"color: #000000\">0x24<\/span>, <span style=\"color: #000000\">0xf1<\/span>, <span style=\"color: #000000\">0x01<\/span>, <span style=\"color: #000000\">0x84<\/span>, <span style=\"color: #000000\">0xd0<\/span>, <span style=\"color: #000000\">0x07<\/span>, <span style=\"color: #000000\">0xbe<\/span>, <span style=\"color: #000000\">0xd4<\/span>, <span style=\"color: #000000\">0x65<\/span>, <span style=\"color: #000000\">0xe7<\/span>, <span style=\"color: #000000\">0x6b<\/span>, <span style=\"color: #000000\">0xb5<\/span> };\r\n\r\n<span style=\"color: #95a5a6\"> \/* ABP parametros* \/<\/span>\r\n<span style=\"color: #00979c\">uint32_t<\/span> <span style=\"color: #000000\">DevAddr<\/span> =  ( <span style=\"color: #00979c\">uint32_t<\/span> )<span style=\"color: #000000\">0x0174b1fd<\/span>;\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">NwkSKey<\/span>[] = { <span style=\"color: #000000\">0xc1<\/span>, <span style=\"color: #000000\">0x45<\/span>, <span style=\"color: #000000\">0x31<\/span>, <span style=\"color: #000000\">0x28<\/span>, <span style=\"color: #000000\">0x5f<\/span>, <span style=\"color: #000000\">0xb2<\/span>, <span style=\"color: #000000\">0x56<\/span>, <span style=\"color: #000000\">0x3b<\/span>, <span style=\"color: #000000\">0x9d<\/span>, <span style=\"color: #000000\">0x5f<\/span>, <span style=\"color: #000000\">0x27<\/span>, <span style=\"color: #000000\">0x15<\/span>, <span style=\"color: #000000\">0xed<\/span>, <span style=\"color: #000000\">0x3a<\/span>, <span style=\"color: #000000\">0x0e<\/span>, <span style=\"color: #000000\">0xbc<\/span>}; \r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">AppSKey<\/span>[] = { <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>, <span style=\"color: #000000\">0x00<\/span>};\r\n\r\n<span style=\"color: #434f54\"> \/ \/LoraWan channelsmask, default channels 0-7 \/<\/span>\r\n<span style=\"color: #00979c\">uint16_t<\/span> <span style=\"color: #000000\">userChannelsMask<\/span>[<span style=\"color: #000000\">6<\/span>]={ <span style=\"color: #000000\">0x00FF<\/span>,<span style=\"color: #000000\">0x0000<\/span>,<span style=\"color: #000000\">0x0000<\/span>,<span style=\"color: #000000\">0x0000<\/span>,<span style=\"color: #000000\">0x0000<\/span>,<span style=\"color: #000000\">0x0000<\/span> };\r\n\r\n<span style=\"color: #000000\">DeviceClass_t<\/span>  <span style=\"color: #000000\">loraWanClass<\/span> = <span style=\"color: #000000\">CLASS_A<\/span>;  <span style=\"color: #95a5a6\"> \/*Soporte de A and C* \/<\/span>\r\n<span style=\"color: #00979c\">uint32_t<\/span> <span style=\"color: #000000\">appTxDutyCycle<\/span> = <span style=\"color: #000000\">300000<\/span>;        <span style=\"color: #95a5a6\"> \/*15000; en [ms]* \/<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">overTheAirActivation<\/span> = <span style=\"color: #00979c\">true<\/span>;       <span style=\"color: #95a5a6\"> \/*OTAA or ABP* \/<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">loraWanAdr<\/span> = <span style=\"color: #00979c\">true<\/span>;                 <span style=\"color: #95a5a6\"> \/*ADR enable* \/<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">isTxConfirmed<\/span> = <span style=\"color: #00979c\">true<\/span>;              <span style=\"color: #95a5a6\"> \/*confirmed or unconfirmed messages * \/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">appPort<\/span> = <span style=\"color: #000000\">2<\/span>;                    <span style=\"color: #95a5a6\"> \/* Application port * \/<\/span>\r\n\r\n<span style=\"color: #95a5a6\"> \/* reintentos de transmisi\u00f3n, en caso de no recibir ack * \/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">confirmedNbTrials<\/span> = <span style=\"color: #000000\">8<\/span>;\r\n\r\n<span style=\"color: #95a5a6\"> \/* Seleccionado de Arduino IDE tools * \/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">debugLevel<\/span> = <span style=\"color: #000000\">LoRaWAN_DEBUG_LEVEL<\/span>; \r\n<span style=\"color: #000000\">LoRaMacRegion_t<\/span> <span style=\"color: #000000\">loraWanRegion<\/span> = <span style=\"color: #000000\">ACTIVE_REGION<\/span>;\r\n\r\n<span style=\"color: #434f54\"> \/ \/ variables de sensor \/actuador<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> contador = 0;  \r\n<span style=\"color: #00979c\">float<\/span> humedad = 0;\r\n<span style=\"color: #00979c\">float<\/span> temperaturaC = 0;\r\n<span style=\"color: #00979c\">float<\/span> temperaturaF = 0;\r\n\r\n<span style=\"color: #434f54\"> \/ \/ Mensajes por Puerto Serial<\/span>\r\n<span style=\"color: #00979c\">volatile<\/span> <span style=\"color: #00979c\">boolean<\/span> serial_msg = <span style=\"color: #00979c\">true<\/span>;\r\n\r\n<span style=\"color: #434f54\"> \/ \/ Sensor humedad y temperatura<\/span>\r\n<span style=\"color: #5e6d03\">#define<\/span> <span style=\"color: #000000\">DHTPIN<\/span> <span style=\"color: #000000\">4<\/span>\r\n<span style=\"color: #5e6d03\">#define<\/span> <span style=\"color: #000000\">DHTTYPE<\/span> <span style=\"color: #000000\">DHT11<\/span>\r\n<b><span style=\"color: #d35400\">DHT<\/span><\/b> <span style=\"color: #000000\">dht<\/span>(<span style=\"color: #000000\">DHTPIN<\/span>, <span style=\"color: #000000\">DHTTYPE<\/span>);\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">setup<\/span>(){\r\n  <span style=\"color: #5e6d03\">if<\/span> (serial_msg){\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b>.<span style=\"color: #d35400\">begin<\/span>(<span style=\"color: #000000\">115200<\/span>);\r\n    <span style=\"color: #5e6d03\">while<\/span> (<span style=\"color: #434f54\">!<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b>);\r\n  }\r\n  <b><span style=\"color: #d35400\">SPI<\/span><\/b>.<span style=\"color: #d35400\">begin<\/span>(<span style=\"color: #000000\">SCK<\/span>,<span style=\"color: #000000\">MISO<\/span>,<span style=\"color: #000000\">MOSI<\/span>,<span style=\"color: #000000\">SS<\/span>);\r\n  <span style=\"color: #000000\">Mcu<\/span>.<span style=\"color: #000000\">init<\/span>(<span style=\"color: #000000\">SS<\/span>,<span style=\"color: #000000\">RST_LoRa<\/span>,<span style=\"color: #000000\">DIO0<\/span>,<span style=\"color: #000000\">DIO1<\/span>,<span style=\"color: #000000\">license<\/span>);\r\n  deviceState = DEVICE_STATE_INIT;\r\n\r\n  <span style=\"color: #434f54\"> \/ \/ SENSOR Temperatura&amp;Humedad<\/span>\r\n  <span style=\"color: #000000\">dht<\/span>.<span style=\"color: #d35400\">begin<\/span>();\r\n}\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">loop<\/span>(){\r\n  \r\n  <span style=\"color: #5e6d03\">switch<\/span>( deviceState )  {\r\n    <span style=\"color: #5e6d03\">case<\/span> DEVICE_STATE_INIT<span style=\"color: #434f54\">:<\/span>    {\r\n      LoRaWAN.<span style=\"color: #000000\">init<\/span>(<span style=\"color: #000000\">loraWanClass<\/span>,<span style=\"color: #000000\">loraWanRegion<\/span>);\r\n      <span style=\"color: #5e6d03\">break<\/span>;\r\n    }\r\n    <span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_JOIN<\/span><span style=\"color: #434f54\">:<\/span>    {\r\n      LoRaWAN.<span style=\"color: #000000\">join<\/span>();\r\n      <span style=\"color: #5e6d03\">break<\/span>;\r\n    }\r\n    <span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_SEND<\/span><span style=\"color: #434f54\">:<\/span>    { \r\n      <span style=\"color: #000000\">prepareTxFrame<\/span>( <span style=\"color: #000000\">appPort<\/span> );\r\n      LoRaWAN.<span style=\"color: #d35400\">send<\/span>(<span style=\"color: #000000\">loraWanClass<\/span>);\r\n      deviceState = <span style=\"color: #000000\">DEVICE_STATE_CYCLE<\/span>;\r\n      <span style=\"color: #5e6d03\">break<\/span>;\r\n      \r\n    }\r\n    <span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_CYCLE<\/span><span style=\"color: #434f54\">:<\/span>    {\r\n      <span style=\"color: #434f54\"> \/ \/ Schedule next packet transmission<\/span>\r\n      <span style=\"color: #000000\">txDutyCycleTime<\/span> = <span style=\"color: #000000\">appTxDutyCycle<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">randr<\/span>( <span style=\"color: #434f54\">-<\/span><span style=\"color: #000000\">APP_TX_DUTYCYCLE_RND<\/span>,\r\n                                                <span style=\"color: #000000\">APP_TX_DUTYCYCLE_RND<\/span> );\r\n      LoRaWAN.<span style=\"color: #000000\">cycle<\/span>(<span style=\"color: #000000\">txDutyCycleTime<\/span>);\r\n      deviceState = DEVICE_STATE_SLEEP;\r\n      <span style=\"color: #5e6d03\">break<\/span>;\r\n    }\r\n    <span style=\"color: #5e6d03\">case<\/span> DEVICE_STATE_SLEEP<span style=\"color: #434f54\">:<\/span>    {\r\n      LoRaWAN.<span style=\"color: #d35400\">sleep<\/span>(<span style=\"color: #000000\">loraWanClass<\/span>,<span style=\"color: #000000\">debugLevel<\/span>);\r\n      <span style=\"color: #5e6d03\">break<\/span>;\r\n    }\r\n    <span style=\"color: #5e6d03\">default<\/span><span style=\"color: #434f54\">:<\/span>    {\r\n      deviceState = DEVICE_STATE_INIT;\r\n      <span style=\"color: #5e6d03\">break<\/span>;\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<h2>Preparaci\u00f3n de trama<\/h2>\n<pre><span style=\"color: #434f54\">\/\/ Trama - integra datos<\/span>\r\n<span style=\"color: #00979c\">static<\/span> <span style=\"color: #00979c\">void<\/span> prepareTxFrame( <span style=\"color: #00979c\">uint8_t<\/span> port ){\r\n    contador = contador <span style=\"color: #434f54\">+<\/span> 1;\r\n    <span style=\"color: #434f54\">\/\/ Sensor de Temperatura y Humedad<\/span>\r\n    SensorTempHum();\r\n\r\n    <span style=\"color: #5e6d03\">if<\/span> (<span style=\"color: #d35400\">isnan<\/span>(humedad) <span style=\"color: #434f54\">||<\/span> <span style=\"color: #d35400\">isnan<\/span>(temperaturaC) <span style=\"color: #434f54\">||<\/span> <span style=\"color: #d35400\">isnan<\/span>(temperaturaF)) {\r\n      humedad = 0;\r\n      temperaturaC = 0;\r\n      temperaturaF = 0;\r\n    }\r\n    <span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span>puc;\r\n    puc = (<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span>)(<span style=\"color: #434f54\">&amp;<\/span>temperaturaC);\r\n    appDataSize = 8;<span style=\"color: #434f54\">\/\/AppDataSize max value is 64<\/span>\r\n    appData[0] = puc[0];\r\n    appData[1] = puc[1];\r\n    appData[2] = puc[2];\r\n    appData[3] = puc[3];\r\n\r\n    puc = (<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span>)(<span style=\"color: #434f54\">&amp;<\/span>humedad);\r\n    appData[4] = puc[0];\r\n    appData[5] = puc[1];\r\n    appData[6] = puc[2];\r\n    appData[7] = puc[3];\r\n    <span style=\"color: #5e6d03\">if<\/span> (serial_msg){\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(\"tx: \"+String(temperaturaC)+\"  \");\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(appData[0]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(appData[1]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(appData[2]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(appData[3]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(\"tx: \"+String(humedad)+\"  \");\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(appData[4]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(appData[5]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(appData[6]);\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(appData[7]);\r\n    }\r\n}\r\n<\/pre>\n<h2>Lectura de sensor<\/h2>\n<pre><span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">SensorTempHum<\/span>(){\r\n  <span style=\"color: #434f54\">\/\/ SENSOR Temperatura&amp;Humedad<\/span>\r\n  <span style=\"color: #000000\">dht<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span>(); <span style=\"color: #434f54\">\/\/ regresa de sleep<\/span>\r\n  <span style=\"color: #d35400\">delay<\/span>(2000); \/\/ espera minina entre lecturas de sensor\r\n  <span style=\"color: #000000\">humedad<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">dht<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">readHumidity<\/span>();\r\n  <span style=\"color: #000000\">temperaturaC<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">dht<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">readTemperature<\/span>();\r\n  <span style=\"color: #000000\">temperaturaF<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">dht<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">readTemperature<\/span>(<span style=\"color: #00979c\">true<\/span>);\r\n\r\n  <span style=\"color: #5e6d03\">if<\/span> (<span style=\"color: #d35400\">isnan<\/span>(<span style=\"color: #000000\">humedad<\/span>) <span style=\"color: #434f54\">||<\/span> <span style=\"color: #d35400\">isnan<\/span>(<span style=\"color: #000000\">temperaturaC<\/span>) <span style=\"color: #434f54\">||<\/span> <span style=\"color: #d35400\">isnan<\/span>(<span style=\"color: #000000\">temperaturaF<\/span>)) {\r\n    <span style=\"color: #5e6d03\">if<\/span> (<span style=\"color: #000000\">serial_msg<\/span>){\r\n      <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\"Failed to read from DHT sensor!\"<\/span>));\r\n    }\r\n    <span style=\"color: #434f54\">\/\/ espera minina entre lecturas de sensor<\/span>\r\n    <span style=\"color: #d35400\">delay<\/span>(<span style=\"color: #000000\">100<\/span>); \r\n    <span style=\"color: #5e6d03\">return<\/span>;\r\n  }\r\n\r\n  <span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">hif<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">dht<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">computeHeatIndex<\/span>(<span style=\"color: #000000\">temperaturaF<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">humedad<\/span>);\r\n  <span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">hic<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">dht<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">computeHeatIndex<\/span>(<span style=\"color: #000000\">temperaturaC<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">humedad<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #00979c\">false<\/span>);\r\n\r\n  <span style=\"color: #5e6d03\">if<\/span> (serial_msg){\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\" Humidity: \"<\/span>));\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">humedad<\/span>);\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\"%  \\n Temperature: \"<\/span>));\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">temperaturaC<\/span>);\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\"\u00b0C \"<\/span>));\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">temperaturaF<\/span>);\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\"\u00b0F \\n Heat index: \"<\/span>));\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">hic<\/span>);\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\"\u00b0C \"<\/span>));\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #000000\">hif<\/span>);\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(<span style=\"color: #000000\">F<\/span>(<span style=\"color: #005c5f\">\"\u00b0F\"<\/span>));\r\n  }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El desarrollo del ejercicio se simplifica al tratarse como una extensi\u00f3n del ejemplo base de comunicaci\u00f3n Lora al que se a\u00f1ade el Sensor DHT11. ChirpStack \u2013 A\u00f1adir un dispositivo El archivo de instrucciones se presenta en tres secciones o pesta\u00f1as. La primera contiene la declaraci\u00f3n de variables, la parte de configuraci\u00f3n y el lazo principal. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/lorawan-sensor-humedad-y-temperatura-archivo-ino\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"LoRaWan \u2013 Sensor Humedad y Temperatura. Archivo.ino\"<\/span><\/a><\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1465790],"tags":[],"class_list":["post-3405","post","type-post","status-publish","format-standard","hentry","category-lorawan-humedad-y-temperatura"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3405","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=3405"}],"version-history":[{"count":7,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3405\/revisions"}],"predecessor-version":[{"id":3677,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3405\/revisions\/3677"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=3405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=3405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=3405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}