        <style>
            #donation_buttons td{
                border:medium none;
                background: inherit !important;
            }
            #donation_buttons table{               
                border:medium none;
                margin: auto;
                width: auto;
            }
        </style>
        {"id":6795,"date":"2022-03-28T22:49:17","date_gmt":"2022-03-28T22:49:17","guid":{"rendered":"https:\/\/rogerbit.com\/wprb\/?p=6795"},"modified":"2022-03-29T16:03:37","modified_gmt":"2022-03-29T16:03:37","slug":"controla-tus-aparatos-electronicos-infrarrojos-por-wifi-con-esp32","status":"publish","type":"post","link":"https:\/\/rogerbit.com\/wprb\/2022\/03\/controla-tus-aparatos-electronicos-infrarrojos-por-wifi-con-esp32\/","title":{"rendered":"Controla tus aparatos electr\u00f3nicos infrarrojos por wifi con esp32"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"Controla tus aparatos electr\u00f3nicos infrarrojos por wifi con esp32  - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/itjfyOT7yp4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<hr \/>\n<p>En este tutorial crearemos un web server para el control de cualquier dispositivo, que se maneje por infrarrojos, como televisores, equipos de audio, DVD etc. Para ello vamos a usar el esp32 con dos sensores infrarrojos uno receptor, para capturar los comandos de mandos infrarrojos, y otro sensor emisor, para enviar el c\u00f3digo obtenido, y de esa forma controlar el dispositivo electr\u00f3nico hogare\u00f1o. Analizaremos el c\u00f3digo fuente, creado para tal fin, tambi\u00e9n hablaremos como hacer la aplicaci\u00f3n que va a interactuar con el web server interno del esp32, y finalmente haremos una prueba del funcionamiento de todo este sistema.<\/p>\n<hr \/>\n<p style=\"text-align: left;\">Tal vez pueda interesarte proyectos en arduino, pic, rob\u00f3tica, telecomunicaciones, suscribete en\u00a0<a href=\"http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1\">http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1<\/a>\u00a0mucho videos con c\u00f3digo fuentes completos y diagramas<\/p>\n<p style=\"text-align: left;\"><div id=\"ubm-banners-rotation-n1\" data-interval=\"4000\" class=\"ubm_banners_rotation\" style=\"overflow: hidden; width: 200px; height: 150px;\"><div id=\"3_ubm_banner\" class=\"ubm_rotating_banner\"><a href=\"https:\/\/bit.ly\/3aXRDAu\" target=\"_blank\" rel=\"dofollow\"><img src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/useful_banner_manager_banners\/3-2-logo youtube.png\" width=\"100%\" height=\"100%\" alt=\"SUSCRIBETE A NUESTRO CANAL DE YOUTUBE, TUTORIALES GRATIS\" \/><\/a><\/div><\/div><\/p>\n<hr \/>\n<h4>Componentes electr\u00f3nicos<\/h4>\n<h4>Un Esp32<\/h4>\n<p><a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/esp32.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6331\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/esp32.jpg\" sizes=\"(max-width: 407px) 100vw, 407px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/esp32.jpg 500w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/esp32-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/esp32-150x150.jpg 150w\" alt=\"\" width=\"407\" height=\"407\" \/><\/a><\/p>\n<h4>Caracter\u00edsticas del m\u00f3dulo ESP32-T<\/h4>\n<p><img src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2017\/08\/esp32pinout-227x300.jpg\" \/><\/p>\n<h3>Conectividad<\/h3>\n<hr \/>\n<p>El m\u00f3dulo ESP32 dispone de todas las variantes del\u00a0<strong>WiFi<\/strong>:<\/p>\n<ul>\n<li>802.11 b\/g\/n\/e\/i\/n<\/li>\n<li>Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management<\/li>\n<\/ul>\n<p>Esta versi\u00f3n nueva incluye la conectividad mediante<strong>\u00a0Bluethoot<\/strong>\u00a0de bajo consumo<\/p>\n<ul>\n<li>Bluetooth v4.2 BR\/EDR and BLE<\/li>\n<li>BLE Beacon<\/li>\n<\/ul>\n<p>Adem\u00e1s, puede comunicarse mediante los protocoles<strong>\u00a0SPI, I2C, UART, MAC Ethernet, Host SD<\/strong><\/p>\n<h3>Prestaciones\u00a0del microcontrolador<\/h3>\n<hr \/>\n<p>La\u00a0<strong>CPU<\/strong>\u00a0est\u00e1 formado por un\u00a0<strong>SoC modelo Tensilica LX6<\/strong>\u00a0con las siguientes caracter\u00edsticas\u00a0y memoria<\/p>\n<ul>\n<li>Doble n\u00facleo de 32 bits con velocidad de 160MHz<\/li>\n<li>Memoria ROM de 448 kBytes<\/li>\n<li>Memoria SRAM de 520kBytes<\/li>\n<\/ul>\n<p>Dispne de<strong>\u00a048 Pines<\/strong><\/p>\n<ul>\n<li>18 ADC de 12 bits<\/li>\n<li>2 DAC de 8 bits<\/li>\n<li>10 pines sensores de contacto<\/li>\n<li>16 PWM<\/li>\n<li>20 Entradas\/salidas digitales<\/li>\n<\/ul>\n<h3>Alimentaci\u00f3n y modos de consumo<\/h3>\n<p>Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energ\u00eda que consume depende del modo de funcionamiento. Contiene un modo, el\u00a0<strong>Ultra Low Power Solution (ULP)<\/strong>, en que se contin\u00faan realizando tareas b\u00e1sicas (ADC, RTC\u2026) en el modo Sleep.<\/p>\n<hr \/>\n<p><strong>Pines hembra<\/strong><\/p>\n<p><a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/pines-hembra.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6332\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/pines-hembra.jpg\" sizes=\"(max-width: 500px) 100vw, 500px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/pines-hembra.jpg 500w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/03\/pines-hembra-300x223.jpg 300w\" alt=\"\" width=\"378\" height=\"281\" \/><\/a><\/p>\n<hr \/>\n<p><strong>M\u00f3dulo ky-005 (emisor infrarrojo)<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6267\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005.jpg\" sizes=\"(max-width: 313px) 100vw, 313px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005.jpg 1000w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005-768x767.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005-600x599.jpg 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/KY-005-820x819.jpg 820w\" alt=\"\" width=\"313\" height=\"313\" \/><\/a><\/p>\n<p>El m\u00f3dulo transmisor de infrarrojos KY-005 consiste en solo un LED emisor IR de 5 mm.<\/p>\n<p>ESPECIFICACIONES T\u00c9CNICAS<\/p>\n<p>Emite un haz de luz infrarroja a una frecuencia de 38 KHz.<br \/>\nVoltaje de funcionamiento: 5 Volts<br \/>\nCorriente alimentaci\u00f3n: 30 a 60 mA CD<br \/>\nConsumo de energ\u00eda: 90 mW<br \/>\nTemperatura de funcionamiento: -25 \u00b0C a 80 \u00b0C [-13 \u00b0F a 176 \u00b0F]<br \/>\nDimensiones: 18.5 mm x 15 mm [0.728 in x 0.5905 in]<br \/>\nPeso: 2 gr<\/p>\n<hr \/>\n<p><strong>M\u00f3dulo receptor infrarrojo ky-022<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6406\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/ky-022.jpg\" sizes=\"(max-width: 293px) 100vw, 293px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/ky-022.jpg 800w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/ky-022-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/ky-022-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/ky-022-768x768.jpg 768w\" alt=\"\" width=\"293\" height=\"293\" \/><\/p>\n<p>Tama\u00f1o: 6.4 * 7.4 * 5.1MM, \u00e1ngulo de aceptaci\u00f3n 90 \u00b0, voltaje de trabajo 2.7-5.5V.<br \/>\nFrecuencia 37.9KHZ, recibiendo la distancia 18 m.<\/p>\n<p>Rechazo de luz diurna hasta 500LUX, capacidad de interferencia electromagn\u00e9tica, IC dedicado de infrarrojos incorporado.<br \/>\nAmpliamente utilizado: est\u00e9reo, TV, VCR, CD, decodificadores, marco de fotos digital, audio para el autom\u00f3vil, juguetes de control remoto, receptores de sat\u00e9lite, disco duro, aire acondicionado, calefacci\u00f3n, ventiladores, iluminaci\u00f3n y otros electrodom\u00e9sticos.<\/p>\n<p>Pinout:<\/p>\n<p>1 \u2026. GND (-)<\/p>\n<p>2 \u2026. + 5V<\/p>\n<p>3 \u2026. Salida (S)<\/p>\n<hr \/>\n<p><strong>PCB<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-6800\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb.png\" alt=\"\" width=\"494\" height=\"425\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb.png 494w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb-300x258.png 300w\" sizes=\"(max-width: 494px) 100vw, 494px\" \/> <img loading=\"lazy\" class=\"alignnone size-large wp-image-6801\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb_ser.png\" alt=\"\" width=\"496\" height=\"427\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb_ser.png 496w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb_ser-300x258.png 300w\" sizes=\"(max-width: 496px) 100vw, 496px\" \/><\/p>\n<hr \/>\n<p><strong>C\u00f3digo Fuente Receptor<\/strong><\/p>\n<pre class=\"lang:arduino decode:true \" title=\"C\u00f3digo Fuente\">\/\/------------------------------------------------------------------------------\r\n\/\/ Include the IRremote library header\r\n\/\/\r\n#include &lt;IRremote.h&gt;\r\n\r\n\/\/------------------------------------------------------------------------------\r\n\/\/ Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)\r\n\/\/\r\nint recvPin = 15;\r\nIRrecv irrecv(recvPin);\r\n\r\n\/\/+=============================================================================\r\n\/\/ Configure the Arduino\r\n\/\/\r\nvoid  setup ( )\r\n{\r\n  Serial.begin(115200);   \/\/ Status message will be sent to PC at 115200 baud\r\n  irrecv.enableIRIn();  \/\/ Start the receiver\r\n}\r\n\r\n\/\/+=============================================================================\r\n\/\/ Display IR code\r\n\/\/\r\nvoid  ircode (decode_results *results)\r\n{\r\n  \/\/ Panasonic has an Address\r\n  if (results-&gt;decode_type == PANASONIC) {\r\n    Serial.print(results-&gt;address, HEX);\r\n    Serial.print(\":\");\r\n  }\r\n\r\n  \/\/ Print Code\r\n  Serial.print(results-&gt;value, HEX);\r\n}\r\n\r\n\/\/+=============================================================================\r\n\/\/ Display encoding type\r\n\/\/\r\nvoid  encoding (decode_results *results)\r\n{\r\n  switch (results-&gt;decode_type) {\r\n    default:\r\n    case UNKNOWN:      Serial.print(\"UNKNOWN\");       break ;\r\n    case NEC:          Serial.print(\"NEC\");           break ;\r\n    case SONY:         Serial.print(\"SONY\");          break ;\r\n    case RC5:          Serial.print(\"RC5\");           break ;\r\n    case RC6:          Serial.print(\"RC6\");           break ;\r\n    case DISH:         Serial.print(\"DISH\");          break ;\r\n    case SHARP:        Serial.print(\"SHARP\");         break ;\r\n    case JVC:          Serial.print(\"JVC\");           break ;\r\n\/\/    case SANYO:        Serial.print(\"SANYO\");         break ;\r\n\/\/    case MITSUBISHI:   Serial.print(\"MITSUBISHI\");    break ;\r\n    case SAMSUNG:      Serial.print(\"SAMSUNG\");       break ;\r\n    case LG:           Serial.print(\"LG\");            break ;\r\n    case WHYNTER:      Serial.print(\"WHYNTER\");       break ;\r\n\/\/    case AIWA_RC_T501: Serial.print(\"AIWA_RC_T501\");  break ;\r\n    case PANASONIC:    Serial.print(\"PANASONIC\");     break ;\r\n    case DENON:        Serial.print(\"Denon\");         break ;\r\n  }\r\n}\r\n\r\n\/\/+=============================================================================\r\n\/\/ Dump out the decode_results structure.\r\n\/\/\r\nvoid  dumpInfo (decode_results *results)\r\n{\r\n  \/\/ Check if the buffer overflowed\r\n  if (results-&gt;overflow) {\r\n    Serial.println(\"IR code too long. Edit IRremoteInt.h and increase RAWBUF\");\r\n    return;\r\n  }\r\n\r\n  \/\/ Show Encoding standard\r\n  Serial.print(\"Encoding  : \");\r\n  encoding(results);\r\n  Serial.println(\"\");\r\n\r\n  \/\/ Show Code &amp; length\r\n  Serial.print(\"Code      : \");\r\n  ircode(results);\r\n  Serial.print(\" (\");\r\n  Serial.print(results-&gt;bits, DEC);\r\n  Serial.println(\" bits)\");\r\n}\r\n\r\n\/\/+=============================================================================\r\n\/\/ Dump out the decode_results structure.\r\n\/\/\r\nvoid  dumpRaw (decode_results *results)\r\n{\r\n  \/\/ Print Raw data\r\n  Serial.print(\"Timing[\");\r\n  Serial.print(results-&gt;rawlen-1, DEC);\r\n  Serial.println(\"]: \");\r\n\r\n  for (int i = 1;  i &lt; results-&gt;rawlen;  i++) {\r\n    unsigned long  x = results-&gt;rawbuf[i] * USECPERTICK;\r\n    if (!(i &amp; 1)) {  \/\/ even\r\n      Serial.print(\"-\");\r\n      if (x &lt; 1000)  Serial.print(\" \") ;\r\n      if (x &lt; 100)   Serial.print(\" \") ;\r\n      Serial.print(x, DEC);\r\n    } else {  \/\/ odd\r\n      Serial.print(\"     \");\r\n      Serial.print(\"+\");\r\n      if (x &lt; 1000)  Serial.print(\" \") ;\r\n      if (x &lt; 100)   Serial.print(\" \") ;\r\n      Serial.print(x, DEC);\r\n      if (i &lt; results-&gt;rawlen-1) Serial.print(\", \"); \/\/',' not needed for last one\r\n    }\r\n    if (!(i % 8))  Serial.println(\"\");\r\n  }\r\n  Serial.println(\"\");                    \/\/ Newline\r\n}\r\n\r\n\/\/+=============================================================================\r\n\/\/ Dump out the decode_results structure.\r\n\/\/\r\nvoid  dumpCode (decode_results *results)\r\n{\r\n  \/\/ Start declaration\r\n  Serial.print(\"unsigned int  \");          \/\/ variable type\r\n  Serial.print(\"rawData[\");                \/\/ array name\r\n  Serial.print(results-&gt;rawlen - 1, DEC);  \/\/ array size\r\n  Serial.print(\"] = {\");                   \/\/ Start declaration\r\n\r\n  \/\/ Dump data\r\n  for (int i = 1;  i &lt; results-&gt;rawlen;  i++) {\r\n    Serial.print(results-&gt;rawbuf[i] * USECPERTICK, DEC);\r\n    if ( i &lt; results-&gt;rawlen-1 ) Serial.print(\",\"); \/\/ ',' not needed on last one\r\n    if (!(i &amp; 1))  Serial.print(\" \");\r\n  }\r\n\r\n  \/\/ End declaration\r\n  Serial.print(\"};\");  \/\/ \r\n\r\n  \/\/ Comment\r\n  Serial.print(\"  \/\/ \");\r\n  encoding(results);\r\n  Serial.print(\" \");\r\n  ircode(results);\r\n\r\n  \/\/ Newline\r\n  Serial.println(\"\");\r\n\r\n  \/\/ Now dump \"known\" codes\r\n  if (results-&gt;decode_type != UNKNOWN) {\r\n\r\n    \/\/ Some protocols have an address\r\n    if (results-&gt;decode_type == PANASONIC) {\r\n      Serial.print(\"unsigned int  addr = 0x\");\r\n      Serial.print(results-&gt;address, HEX);\r\n      Serial.println(\";\");\r\n    }\r\n\r\n    \/\/ All protocols have data\r\n    Serial.print(\"unsigned int  data = 0x\");\r\n    Serial.print(results-&gt;value, HEX);\r\n    Serial.println(\";\");\r\n  }\r\n}\r\n\r\n\/\/+=============================================================================\r\n\/\/ The repeating section of the code\r\n\/\/\r\nvoid  loop ( )\r\n{\r\n  decode_results  results;        \/\/ Somewhere to store the results\r\n\r\n  if (irrecv.decode(&amp;results)) {  \/\/ Grab an IR code\r\n    dumpInfo(&amp;results);           \/\/ Output the results\r\n    dumpRaw(&amp;results);            \/\/ Output the results in RAW format\r\n    dumpCode(&amp;results);           \/\/ Output the results as source code\r\n    Serial.println(\"\");           \/\/ Blank line between entries\r\n    irrecv.resume();              \/\/ Prepare for the next value\r\n  }\r\n}<\/pre>\n<hr \/>\n<p><strong>Archivo con definici\u00f3n de pines<\/strong><\/p>\n<pre class=\"lang:arduino decode:true \" title=\"C\u00f3digo Fuente\">\/*\r\n *  PinDefinitionsAndMore.h\r\n *\r\n *  Contains pin definitions for IRremote examples for various platforms\r\n *  as well as definitions for feedback LED and tone() and includes\r\n *\r\n *  Copyright (C) 2021-2022  Armin Joachimsmeyer\r\n *  armin.joachimsmeyer@gmail.com\r\n *\r\n *  This file is part of IRremote https:\/\/github.com\/Arduino-IRremote\/Arduino-IRremote.\r\n *\r\n *  Arduino-IRremote is free software: you can redistribute it and\/or modify\r\n *  it under the terms of the GNU General Public License as published by\r\n *  the Free Software Foundation, either version 3 of the License, or\r\n *  (at your option) any later version.\r\n *\r\n *  This program is distributed in the hope that it will be useful,\r\n *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n *  GNU General Public License for more details.\r\n *\r\n *  You should have received a copy of the GNU General Public License\r\n *  along with this program.  If not, see &lt;http:\/\/www.gnu.org\/licenses\/gpl.html&gt;.\r\n *\r\n *\/\r\n\r\n\/*\r\n * Pin mapping table for different platforms\r\n *\r\n * Platform     IR input    IR output   Tone      Core\/Pin schema\r\n * --------------------------------------------------------------\r\n * DEFAULT\/AVR  2           3           4\r\n * ATtinyX5     0|PB0       4|PB4       3|PB3\r\n * ATtiny167    3|PA3       2|PA2       7|PA7     ATTinyCore\r\n * ATtiny167    9|PA3       8|PA2       5|PA7     Digispark pro\r\n * ATtiny3217  18|PA1      19|PA2      20|PA3     MegaTinyCore\r\n * ATtiny1604   2           3|PA5       %\r\n * SAMD21       3           4           5\r\n * ESP8266      14|D5       12|D6       %\r\n * ESP32        15          4           27\r\n * BluePill     PA6         PA7         PA3\r\n * APOLLO3      11          12          5\r\n * RP2040       3|GPIO15    4|GPIO16    5|GPIO17\r\n *\/\r\n\/\/#define _IR_MEASURE_TIMING \/\/ For debugging purposes.\r\n\r\n\/*\r\n * We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation\r\n *\/\r\n#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE)\r\n#define SEND_PWM_BY_TIMER\r\n#endif\r\n\r\n#if defined(ESP8266)\r\n#define FEEDBACK_LED_IS_ACTIVE_LOW \/\/ The LED on my board (D4) is active LOW\r\n#define IR_RECEIVE_PIN          14 \/\/ D5\r\n#define IR_RECEIVE_PIN_STRING   \"D5\"\r\n#define IR_SEND_PIN             12 \/\/ D6 - D4\/pin 2 is internal LED\r\n#define IR_SEND_PIN_STRING      \"D6\"\r\n#define _IR_TIMING_TEST_PIN     13 \/\/ D7\r\n#define APPLICATION_PIN          0 \/\/ D3\r\n\r\n#define tone(...) void()      \/\/ tone() inhibits receive timer\r\n#define noTone(a) void()\r\n#define TONE_PIN                42 \/\/ Dummy for examples using it\r\n\r\n#elif defined(ESP32)\r\n#include &lt;Arduino.h&gt;\r\n\r\n#define TONE_LEDC_CHANNEL        1  \/\/ Using channel 1 makes tone() independent of receiving timer -&gt; No need to stop receiving timer.\r\nvoid tone(uint8_t _pin, unsigned int frequency){\r\n    ledcAttachPin(_pin, TONE_LEDC_CHANNEL);\r\n    ledcWriteTone(TONE_LEDC_CHANNEL, frequency);\r\n}\r\nvoid tone(uint8_t _pin, unsigned int frequency, unsigned long duration){\r\n    ledcAttachPin(_pin, TONE_LEDC_CHANNEL);\r\n    ledcWriteTone(TONE_LEDC_CHANNEL, frequency);\r\n    delay(duration);\r\n    ledcWriteTone(TONE_LEDC_CHANNEL, 0);\r\n}\r\nvoid noTone(uint8_t _pin){\r\n    ledcWriteTone(TONE_LEDC_CHANNEL, 0);\r\n}\r\n#define IR_RECEIVE_PIN          15  \/\/ D15\r\n#define IR_SEND_PIN              4  \/\/ D4\r\n#define TONE_PIN                27  \/\/ D27 25 &amp; 26 are DAC0 and 1\r\n#define APPLICATION_PIN         16  \/\/ RX2 pin\r\n\r\n#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) \/\/ BluePill\r\n\/\/ Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone()\r\n#define IR_RECEIVE_PIN          PA6\r\n#define IR_RECEIVE_PIN_STRING   \"PA6\"\r\n#define IR_SEND_PIN             PA7\r\n#define IR_SEND_PIN_STRING      \"PA7\"\r\n#define TONE_PIN                PA3\r\n#define _IR_TIMING_TEST_PIN      PA5\r\n#define APPLICATION_PIN         PA2\r\n\r\n#elif defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) \/\/ Digispark board\r\n#include \"ATtinySerialOut.hpp\" \/\/ Available as Arduino library \"ATtinySerialOut\". saves 370 bytes program space and 38 bytes RAM for digistump core\r\n#define IR_RECEIVE_PIN  0\r\n#define IR_SEND_PIN     4 \/\/ Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board.\r\n#define TONE_PIN        3\r\n#define _IR_TIMING_TEST_PIN 3\r\n\r\n#elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) \/\/ Digispark pro board\r\n#include \"ATtinySerialOut.hpp\" \/\/ Available as Arduino library \"ATtinySerialOut\"\r\n\/\/ For ATtiny167 Pins PB6 and PA3 are usable as interrupt source.\r\n#  if defined(ARDUINO_AVR_DIGISPARKPRO)\r\n#define IR_RECEIVE_PIN   9 \/\/ PA3 - on Digispark board labeled as pin 9\r\n\/\/#define IR_RECEIVE_PIN  14 \/\/ PB6 \/ INT0 is connected to USB+ on DigisparkPro boards\r\n#define IR_SEND_PIN      8 \/\/ PA2 - on Digispark board labeled as pin 8\r\n#define TONE_PIN         5 \/\/ PA7\r\n#define _IR_TIMING_TEST_PIN 10 \/\/ PA4\r\n#  else\r\n#define IR_RECEIVE_PIN  3\r\n#define IR_SEND_PIN     2\r\n#define TONE_PIN        7\r\n#  endif\r\n\r\n#elif defined(__AVR_ATtiny88__) \/\/ MH-ET Tiny88 board\r\n#include \"ATtinySerialOut.hpp\" \/\/ Available as Arduino library \"ATtinySerialOut\". Saves 128 bytes program space\r\n\/\/ Pin 6 is TX pin 7 is RX\r\n#define IR_RECEIVE_PIN   3 \/\/ INT1\r\n#define IR_SEND_PIN      4\r\n#define TONE_PIN         9\r\n#define _IR_TIMING_TEST_PIN 8\r\n\r\n#elif defined(__AVR_ATtiny1616__)  || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) \/\/ Tiny Core Dev board\r\n#define IR_RECEIVE_PIN  18\r\n#define IR_SEND_PIN     19\r\n#define TONE_PIN        20\r\n#define APPLICATION_PIN  0 \/\/ PA4\r\n#undef LED_BUILTIN         \/\/ No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output\r\n#define LED_BUILTIN      2 \/\/ PA6\r\n\r\n#elif defined(__AVR_ATtiny1604__)\r\n#define IR_RECEIVE_PIN   2 \/\/ To be compatible with interrupt example, pin 2 is chosen here.\r\n#define IR_SEND_PIN      3\r\n#define APPLICATION_PIN  5\r\n\r\n#define tone(...) void()      \/\/ Define as void, since TCB0_INT_vect is also used by tone()\r\n#define noTone(a) void()\r\n#define TONE_PIN        42 \/\/ Dummy for examples using it\r\n\r\n#  elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \\\r\n|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \\\r\n|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \\\r\n|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \\\r\n|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \\\r\n|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \\\r\n|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \\\r\n|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \\\r\n|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__)\r\n#define IR_RECEIVE_PIN      2\r\n#define IR_SEND_PIN        13\r\n#define TONE_PIN            4\r\n#define APPLICATION_PIN     5\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 7\r\n\r\n#elif defined(ARDUINO_ARCH_APOLLO3) \/\/ Sparkfun Apollo boards\r\n#define IR_RECEIVE_PIN  11\r\n#define IR_SEND_PIN     12\r\n#define TONE_PIN         5\r\n\r\n#elif defined(ARDUINO_ARCH_MBED) &amp;&amp; defined(ARDUINO_ARCH_MBED_NANO) \/\/ Arduino Nano 33 BLE\r\n#define IR_RECEIVE_PIN      3   \/\/ GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico\r\n#define IR_SEND_PIN         4   \/\/ GPIO16\r\n#define TONE_PIN            5\r\n#define APPLICATION_PIN     6\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 8\r\n\r\n#elif defined(ARDUINO_ARCH_RP2040) \/\/ Arduino Nano Connect, Pi Pico with arduino-pico core https:\/\/github.com\/earlephilhower\/arduino-pico\r\n#define IR_RECEIVE_PIN      15  \/\/ to be compatible with the Arduino Nano RP2040 Connect (pin3)\r\n#define IR_SEND_PIN         16\r\n#define TONE_PIN            17\r\n#define APPLICATION_PIN     18\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 20\r\n\r\n\/\/ If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN\r\n\/\/ and use the external reset with 1 kOhm to ground to enter UF2 mode\r\n\/\/#undef LED_BUILTIN\r\n\/\/#define LED_BUILTIN          6\r\n\r\n#elif defined(PARTICLE) \/\/ !!!UNTESTED!!!\r\n#define IR_RECEIVE_PIN      A4\r\n#define IR_SEND_PIN         A5 \/\/ Particle supports multiple pins\r\n\r\n#define LED_BUILTIN         D7\r\n\r\n\/*\r\n * 4 times the same (default) layout for easy adaption in the future\r\n *\/\r\n#elif defined(TEENSYDUINO)\r\n#define IR_RECEIVE_PIN      2\r\n#define IR_SEND_PIN         3\r\n#define TONE_PIN            4\r\n#define APPLICATION_PIN     5\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 7\r\n\r\n#elif defined(__AVR__) \/\/ Default as for ATmega328 like on Uno, Nano etc.\r\n#define IR_RECEIVE_PIN      2 \/\/ To be compatible with interrupt example, pin 2 is chosen here.\r\n#define IR_SEND_PIN         3\r\n#define TONE_PIN            4\r\n#define APPLICATION_PIN     5\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 7\r\n\r\n#  if defined(ARDUINO_AVR_PROMICRO) \/\/ Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit\r\n\/\/ We have no built in LED at pin 13 -&gt; reuse RX LED\r\n#undef LED_BUILTIN\r\n#define LED_BUILTIN         LED_BUILTIN_RX\r\n#  endif\r\n\r\n#elif defined(ARDUINO_ARCH_MBED) \/\/ Arduino Nano 33 BLE\r\n#define IR_RECEIVE_PIN      2\r\n#define IR_SEND_PIN         3\r\n#define TONE_PIN            4\r\n#define APPLICATION_PIN     5\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 7\r\n\r\n#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM)\r\n#define IR_RECEIVE_PIN      2\r\n#define IR_SEND_PIN         3\r\n#define TONE_PIN            4\r\n#define APPLICATION_PIN     5\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 7\r\n\r\n\/\/ On the Zero and others we switch explicitly to SerialUSB\r\n#define Serial SerialUSB\r\n\r\n\/\/ Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13\/PA17.\r\n\/\/ Attention!!! D2 and D4 are switched on these boards!!!\r\n\/\/ If you connect the LED, it is on pin 24\/PB11. In this case activate the next two lines.\r\n\/\/#undef LED_BUILTIN\r\n\/\/#define LED_BUILTIN 24 \/\/ PB11\r\n\/\/ As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines.\r\n\/\/#undef LED_BUILTIN\r\n\/\/#define LED_BUILTIN 25 \/\/ PB03\r\n\/\/#define FEEDBACK_LED_IS_ACTIVE_LOW \/\/ The RX LED on the M0-Mini is active LOW\r\n\r\n#elif defined (NRF51) \/\/ BBC micro:bit\r\n#define IR_RECEIVE_PIN      2\r\n#define IR_SEND_PIN         3\r\n#define APPLICATION_PIN     1\r\n#define _IR_TIMING_TEST_PIN 4\r\n\r\n#define tone(...) void()    \/\/ no tone() available\r\n#define noTone(a) void()\r\n#define TONE_PIN           42 \/\/ Dummy for examples using it\r\n\r\n#else\r\n#warning Board \/ CPU is not detected using pre-processor symbols -&gt; using default values, which may not fit. Please extend PinDefinitionsAndMore.h.\r\n\/\/ Default valued for unidentified boards\r\n#define IR_RECEIVE_PIN      2\r\n#define IR_SEND_PIN         3\r\n#define TONE_PIN            4\r\n#define APPLICATION_PIN     5\r\n#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 \/\/ E.g. used for examples which use LED_BUILDIN for example output.\r\n#define _IR_TIMING_TEST_PIN 7\r\n#endif \/\/ defined(ESP8266)\r\n\r\n#if !defined (FLASHEND)\r\n#define FLASHEND 0xFFFF \/\/ Dummy value for platforms where FLASHEND is not defined\r\n#endif\r\n\/*\r\n * Helper macro for getting a macro definition as string\r\n *\/\r\n#if !defined(STR_HELPER)\r\n#define STR_HELPER(x) #x\r\n#define STR(x) STR_HELPER(x)\r\n#endif<\/pre>\n<hr \/>\n<p><strong>C\u00f3digo Fuente Emisor<\/strong><\/p>\n<p>La versi\u00f3n de la librer\u00eda IRremote es la 3.6.1 que se puede descar del mismo ide de arduino<\/p>\n<pre class=\"lang:arduino decode:true \" title=\"C\u00f3digo Fuente\">#include &lt;Arduino.h&gt;\r\n#include \"PinDefinitionsAndMore.h\"\/\/Configuraci\u00f3n y definici\u00f3n de pines\r\n#include &lt;IRremote.hpp&gt;\r\n#include &lt;WiFi.h&gt;\r\nconst char* ssid     = \"Tu_red_wifi\";\r\nconst char* password = \"Tu_clave\";\r\n\/\/configuraci\u00f3n ip est\u00e1tica para esp32\r\nIPAddress ip(192,168,1,78);     \r\nIPAddress gateway(192,168,1,1);   \r\nIPAddress subnet(255,255,255,0);\r\nWiFiServer server(80);\/\/puesto 80\r\nvoid setup() {\r\n    Serial.begin(115200);\r\n    IrSender.begin(); \/\/ Inicializamos el emisor infrarrojo\r\n    Serial.print(F(\"Listo para enviar se\u00f1ales IR en el pin\"));\r\n    Serial.println(IR_SEND_PIN);\/\/Muestra el n\u00famero del pin configurado en PinDefinitionsAndMore.h\r\n     \/\/ Comenzamos conect\u00e1ndonos a una red WiFi\r\n    Serial.println();\r\n    Serial.println();\r\n    Serial.print(\"Conectando a \");\r\n    Serial.println(ssid);\r\n     WiFi.mode(WIFI_STA);\r\n  WiFi.config(ip, gateway, subnet);\/\/Configuraci\u00f3n ip est\u00e1tica\r\n    WiFi.begin(ssid, password);\/\/Inicilizamos con los datos de nuestra red wifi\r\n    while (WiFi.status() != WL_CONNECTED) {\r\n        delay(500);\r\n        Serial.print(\".\");\r\n    }\r\n    Serial.println(\"\");\r\n    Serial.println(\"Conectado a red Wifi.\");\r\n    Serial.println(\"Direcci\u00f3n IP \");\r\n    Serial.println(WiFi.localIP());   \r\n    server.begin();\/\/Inicializamos el servidor web en el puerto 80\r\n}\r\nvoid loop() {\r\nWiFiClient client = server.available();   \/\/ Escuchando a los clientes entrantes\r\n\r\n  if (client) {                             \/\/ Si hay un cliente,\r\n    Serial.println(\"Nuevo cliente\");        \/\/ Imprime un mensaje en el puerto serie\r\n    String currentLine = \"\";                \/\/ String para contener datos entrantes del cliente\r\n    while (client.connected()) {            \/\/ Bucle mientras el cliente est\u00e1 conectado\r\n      if (client.available()) {             \/\/ Si hay bytes para leer del cliente,\r\n        char c = client.read();             \/\/ Lee un caracter\r\n        Serial.write(c);                    \/\/ Lo imprimimos en el monitor serial\r\n        if (c == '\\n') {                    \/\/ Si el byte es un car\u00e1cter de nueva l\u00ednea\r\n\r\n          \r\n          if (currentLine.length() == 0) {\r\n            client.println(\"HTTP\/1.1 200 OK\");\r\n            client.println(\"Content-type:text\/html\");\r\n            client.println();\r\n\r\n            \/\/ Contenido HTML\r\n            client.print(\"Click &lt;a href=\\\"\/POWER\\\"&gt;POWER&lt;\/a&gt; Tecla POWER.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/VOL+\\\"&gt;VOLT+&lt;\/a&gt; Tecla subir volumen.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/VOLT-\\\"&gt;VOL-&lt;\/a&gt; Tecla bajar el volumen.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/MENU\\\"&gt;MENU&lt;\/a&gt; Tecla MENU.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/EXIT\\\"&gt;EXIT&lt;\/a&gt; Tecla Salir.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/INFO\\\"&gt;INFO&lt;\/a&gt; Tecla INFO.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/TOOLS\\\"&gt;TOOLS&lt;\/a&gt; Tecla TOOLS.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/SOURCE\\\"&gt;SOURCE&lt;\/a&gt; Tecla elegir fuente de video.&lt;br&gt;\");         \r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/ARRIBA\\\"&gt;ARRIBA&lt;\/a&gt; Tecla ARRIBA.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/DERECHA\\\"&gt;DERECHA&lt;\/a&gt; Tecla DERECHA.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/ABAJO\\\"&gt;ABAJO&lt;\/a&gt; Tecla ABAJO.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/IZQUIERDA\\\"&gt;IZQUIERDA&lt;\/a&gt; Tecla IZQUIERDA.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------\r\n            client.print(\"Click &lt;a href=\\\"\/OK\\\"&gt;OK&lt;\/a&gt; Tecla OK confirmar.&lt;br&gt;\");\r\n\/\/-------------------------------------------------------------------------------------------                   \r\n            client.println();\r\n            \/\/ Salir del ciclo while:\r\n            break;\r\n          } else {    \/\/ si tienes una nueva l\u00ednea, borra currentLine:\r\n            currentLine = \"\";\r\n          }\r\n        } else if (c != '\\r') {  \r\n          currentLine += c;      \r\n        }\r\n\/\/----------------------------------\r\n        if (currentLine.endsWith(\"GET \/POWER\")) {\r\n             IrSender.sendSAMSUNG(0xE0E040BF, 32); \/\/apagar encender\r\n        }                      \r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/VOL+\")) {       \r\n         IrSender.sendSAMSUNG(0xE0E0E01F, 32);   \/\/Volumen +      \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/VOL-\")) { \r\n         IrSender.sendSAMSUNG(0xE0E0D02F, 32); \/\/volumen -          \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/MENU\")) {\r\n           IrSender.sendSAMSUNG(0xE0E058A7, 32); \/\/menu              \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/EXIT\")) {\r\n          IrSender.sendSAMSUNG(0xE0E0B44B, 32);   \/\/Exit\/salir        \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/INFO\")) {\r\n          IrSender.sendSAMSUNG(0xE0E0F807, 32);\/\/Info\r\n        }\r\n        \/\/-----------------------              \r\n        if (currentLine.endsWith(\"GET \/TOOLS\")) {\r\n          IrSender.sendSAMSUNG(0xE0E0D22D, 32);\/\/ Tools             \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/SOURCE\")) {\r\n          IrSender.sendSAMSUNG(0xE0E0807F, 32);\/\/Source \r\n          }   \r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/ARRIBA\")) {\r\n          IrSender.sendSAMSUNG(0xE0E006F9, 32);\/\/ARRIBA          \r\n        }      \r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/DERECHA\")) {\r\n          IrSender.sendSAMSUNG(0xE0E046B9, 32);\/\/DERECHA        \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/ABAJO\")) {\r\n          IrSender.sendSAMSUNG(0xE0E08679, 32);\/\/ABAJO          \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/IZQUIERDA\")) {\r\n          IrSender.sendSAMSUNG(0xE0E0A659, 32);\/\/IZQUIERDA        \r\n        }\r\n        \/\/-----------------------\r\n        if (currentLine.endsWith(\"GET \/OK\")) {\r\n          IrSender.sendSAMSUNG(0xE0E016E9, 32);\/\/Source          \r\n        }      \r\n      }\r\n    }\r\n    \/\/ Cierra la conexi\u00f3n\r\n    client.stop();\r\n    Serial.println(\"Cliente desconectado\");\r\n  }\r\n}<\/pre>\n<hr \/>\n<p style=\"text-align: left;\"><div class=\"page-sidebar widget\" id=\"donation_buttons\"><form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\" ><input type=\"hidden\" name=\"business\" value=\"donacion@rogerbit.com\"><input type=\"hidden\" name=\"bn\" value=\"mbjtechnolabs_SP\"><input type=\"hidden\" name=\"cmd\" value=\"_donations\"><input type=\"hidden\" name=\"item_name\" value=\"Ayuda a RogerBit.com\"><input type=\"hidden\" name=\"item_number\" value=\"www.rogerbit.com\"><input type=\"hidden\" class=\"set_donation_button_amount\" name=\"amount\" value=\"1\"><table ><tbody><tr><td><label for=\"rogerBit necesita de tu ayuda para seguir existiendo :-)\">rogerBit necesita de tu ayuda para seguir existiendo :-)<\/label><\/td><\/tr><\/tbody><\/table><table ><tbody><tr><td><input style=\"margin-top:10px;\" type=\"image\" name=\"submit\" border=\"0\" src=\"https:\/\/www.paypal.com\/en_US\/i\/btn\/btn_donateCC_LG.gif\" alt=\"PayPal - The safer, easier way to pay online\"><\/td><\/tr><\/tbody><\/table><input type=\"hidden\" name=\"currency_code\" value=\"USD\"><input type=\"hidden\" name=\"notify_url\" value=\"https:\/\/rogerbit.com\/wprb\/?Donation_Button&#038;action=ipn_handler\"><\/form><\/div><\/p>\n<hr \/>\n<p style=\"text-align: left;\"><strong>PROYECTO RECOMENDADO<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"\ud83d\udca1 Sistema de encendido de luces dual de 8 canales, por infrarrojos y pulsadores - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/uvJIHicDhEo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>En este tutorial crearemos un web server para el control de cualquier dispositivo, que se maneje por infrarrojos, como televisores, equipos de audio, DVD etc. Para ello vamos a usar el esp32 con dos sensores infrarrojos uno receptor, para capturar los comandos de mandos infrarrojos, y otro sensor emisor, para enviar el c\u00f3digo obtenido, y [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":6796,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[1067,181,906,772,595,1071,1070,1069,624,465,1370,380,1367,1368,1369,1174,613,1068,1066,917,31,1329,687,921],"_links":{"self":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/6795"}],"collection":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/comments?post=6795"}],"version-history":[{"count":4,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/6795\/revisions"}],"predecessor-version":[{"id":6805,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/6795\/revisions\/6805"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media\/6796"}],"wp:attachment":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media?parent=6795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/categories?post=6795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/tags?post=6795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}