        <style>
            #donation_buttons td{
                border:medium none;
                background: inherit !important;
            }
            #donation_buttons table{               
                border:medium none;
                margin: auto;
                width: auto;
            }
        </style>
        {"id":7832,"date":"2024-11-22T00:55:52","date_gmt":"2024-11-22T00:55:52","guid":{"rendered":"https:\/\/rogerbit.com\/wprb\/?p=7832"},"modified":"2024-11-22T00:56:32","modified_gmt":"2024-11-22T00:56:32","slug":"alarma-webserver","status":"publish","type":"post","link":"https:\/\/rogerbit.com\/wprb\/2024\/11\/alarma-webserver\/","title":{"rendered":"Alarma configurable con display oled y buzzer desde webserver"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"Alarma configurable con display oled y buzzer desde webserver - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/R9xWT2BtE5s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<hr \/>\n<p>\ud83d\udc4b &#8220;\u00a1Hola, Makers! Bienvenidos a este nuevo tutorial. Hoy vamos a crear un proyecto muy pr\u00e1ctico: un sistema de alarma persistente con ESP32 y una pantalla OLED SH1106.&#8221;<\/p>\n<p>\ud83d\udd27 &#8220;Este sistema te permitir\u00e1 programar una alarma desde un servidor web, guardar esa configuraci\u00f3n en la memoria del ESP32 y, lo mejor de todo, \u00a1la alarma permanecer\u00e1 activa incluso si reinicias el dispositivo! Adem\u00e1s, la hora se sincroniza autom\u00e1ticamente desde internet, y podr\u00e1s ver en la pantalla OLED la hora actual, la hora de la alarma configurada, y la direcci\u00f3n IP de tu ESP32.&#8221;<\/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<p>\ud83d\udd14 &#8220;Cuando llegue la hora programada, un buzzer se activar\u00e1 para recordarte lo que necesitas hacer.&#8221;<\/p>\n<p>\ud83d\udee0\ufe0f &#8220;En este tutorial te guiar\u00e9 paso a paso para construir este sistema, desde la configuraci\u00f3n de la red WiFi hasta la programaci\u00f3n de la alarma y el manejo de la memoria persistente. \u00a1As\u00ed que prepara tu ESP32 y manos a la obra!&#8221;<\/p>\n<hr \/>\n<p>Si deseas que revise alg\u00fan producto escr\u00edbeme a <a href=\"mailto:reviews@rogerbit.com\">reviews@rogerbit.com<\/a> (s\u00f3lo contacto empresarial ).<\/p>\n<p>No te pierdas ning\u00fan video m\u00e1s suscr\u00edbete a nuestro canal de telegram <a href=\"https:\/\/t.me\/carlosvolt_electronica_robotica\">https:\/\/t.me\/carlosvolt_electronica_robotica<\/a><\/p>\n<hr \/>\n<h2>Componentes electr\u00f3nicos<\/h2>\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<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<p><strong>Cables dupont hembra macho<\/strong><\/p>\n<div class=\"google-auto-placed ap_container\">\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7023 \" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/dupunt-macho-hembra-150x150.jpg\" sizes=\"(max-width: 225px) 100vw, 225px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/dupunt-macho-hembra-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/dupunt-macho-hembra-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/dupunt-macho-hembra-768x768.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/dupunt-macho-hembra.jpg 800w\" alt=\"\" width=\"225\" height=\"225\" \/><\/p>\n<hr \/>\n<p><strong>Display oled sh1106<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6148\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled.jpg\" sizes=\"(max-width: 280px) 100vw, 280px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled.jpg 809w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled-300x285.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled-768x729.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled-600x570.jpg 600w\" alt=\"\" width=\"280\" height=\"266\" \/><\/a><\/p>\n<p>Se trata de un m\u00f3dulo de pantalla OLED monocrom\u00e1tica DE 128\u00d764 puntos con interface I2C .Que presenta varias ventajas en comparaci\u00f3n con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un \u00e1ngulo de visi\u00f3n m\u00e1s amplio, y bajo consumo de energ\u00eda. ES compatible con Arduino Rasberry Pi y microcontroladores PIC entre otros. Trabaja con niveles l\u00f3gicos de 3.3V a 5V tiene un angulo de visi\u00f3n mayor a los 160 grados. el Tama\u00f1o de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de 3.3V a 5V Se lo puede usar en aplicaciones como relojes inteligentes, MP3, term\u00f3metros, instrumentos, y proyectos varios, etc.<\/p>\n<p><strong>Caracter\u00edsticas<\/strong><\/p>\n<ul>\n<li>Interface: I2C(3.3V \/ 5V logic level)<\/li>\n<li>Resolution: 128 x 64<\/li>\n<li>Angle of view: &gt;160 degree<\/li>\n<li>Display color: Blue<\/li>\n<li>Display size: 1.3 inch<\/li>\n<li>Driver IC: SH1106<\/li>\n<li>Power supply: DC\u00a03.3V~5V<\/li>\n<li>Operating temperature: -20~70\u2019C<\/li>\n<li>Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.<\/li>\n<\/ul>\n<hr \/>\n<p><strong>M\u00f3dulo Buzzer<\/strong><\/p>\n<p><strong><img loading=\"lazy\" class=\"alignnone wp-image-6891\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/buzzer.jpg\" sizes=\"(max-width: 188px) 100vw, 188px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/buzzer.jpg 368w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/buzzer-263x300.jpg 263w\" alt=\"\" width=\"188\" height=\"214\" \/><\/strong><\/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\" sizes=\"(max-width: 494px) 100vw, 494px\" 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\" alt=\"\" width=\"494\" height=\"425\" \/><\/p>\n<hr \/>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-6801\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/03\/pcb_ser.png\" sizes=\"(max-width: 496px) 100vw, 496px\" 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\" alt=\"\" width=\"496\" height=\"427\" \/><\/p>\n<p>Descargar archivo gerber \u2013&gt;\u00a0<a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/11\/Gerber_esp32.zip\">Gerber_esp32<\/a><\/p>\n<hr \/>\n<p>Circuito<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-7833\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito-858x1024.jpg\" alt=\"\" width=\"858\" height=\"1024\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito-858x1024.jpg 858w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito-251x300.jpg 251w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito-768x916.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito-1288x1536.jpg 1288w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito-820x978.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/11\/circuito.jpg 1659w\" sizes=\"(max-width: 858px) 100vw, 858px\" \/><\/p>\n<hr \/>\n<p><strong>C\u00f3digo Fuente<\/strong><\/p>\n<pre class=\"lang:default decode:true \" title=\"C\u00f3digo Fuente\">#include &lt;WiFi.h&gt;\r\n#include &lt;NTPClient.h&gt;\r\n#include &lt;WiFiUdp.h&gt;\r\n#include &lt;U8g2lib.h&gt;\r\n#include &lt;ESPAsyncWebServer.h&gt;\r\n#include &lt;Preferences.h&gt; \/\/ Librer\u00eda para almacenamiento persistente\r\n\r\n\/\/ Inicializaci\u00f3n de la pantalla OLED\r\nU8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, \/* reset=*\/ U8X8_PIN_NONE);\r\n\r\n\/\/ Inicializaci\u00f3n del servidor web\r\nAsyncWebServer server(80);\r\n\r\n\/\/ Configuraci\u00f3n de la alarma\r\nint alarmaHora = -1;\r\nint alarmaMinuto = -1;\r\nbool alarmaActivada = false;\r\nconst int buzzerPin = 12;\r\n\r\n\/\/ Configuraci\u00f3n del cliente NTP\r\nWiFiUDP ntpUDP;\r\nNTPClient timeClient(ntpUDP, \"pool.ntp.org\", -10800, 60000);\/\/-10800 = -3 UTC\r\n\r\n\/\/ Instancia de Preferences\r\nPreferences preferences;\r\n\r\n\/\/ Funci\u00f3n para guardar la alarma en la memoria\r\nvoid guardarAlarma(int hora, int minuto) {\r\n  preferences.begin(\"alarma\", false);\r\n  preferences.putInt(\"hora\", hora);\r\n  preferences.putInt(\"minuto\", minuto);\r\n  preferences.putBool(\"activada\", true);\r\n  preferences.end();\r\n}\r\n\r\n\/\/ Funci\u00f3n para cargar la alarma desde la memoria\r\nvoid cargarAlarma() {\r\n  preferences.begin(\"alarma\", true);\r\n  alarmaHora = preferences.getInt(\"hora\", -1);\r\n  alarmaMinuto = preferences.getInt(\"minuto\", -1);\r\n  alarmaActivada = preferences.getBool(\"activada\", false);\r\n  preferences.end();\r\n}\r\n\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  \r\n  \/\/ Inicializar buzzer\r\n  pinMode(buzzerPin, OUTPUT);\r\n  digitalWrite(buzzerPin, LOW);\r\n  \r\n  \/\/ Inicializar pantalla OLED\r\n  u8g2.begin();\r\n  \r\n  \/\/ Conectar a WiFi\r\n  WiFi.begin(\"Tu_red_wifi\", \"Tu_clave_wifi\"); \/\/ Reemplaza con tus credenciales WiFi\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    delay(1000);\r\n    Serial.println(\"Conectando a WiFi...\");\r\n  }\r\n  Serial.println(\"Conectado a WiFi\");\r\n  Serial.print(\"IP: \");\r\n  Serial.println(WiFi.localIP());\r\n\r\n  \/\/ Inicializar NTP Client\r\n  timeClient.begin();\r\n\r\n  \/\/ Cargar alarma persistente\r\n  cargarAlarma();\r\n\r\n  \/\/ Configuraci\u00f3n del servidor web\r\n  server.on(\"\/\", HTTP_GET, [](AsyncWebServerRequest *request){\r\n    String html = \"&lt;html&gt;&lt;body&gt;&lt;h2&gt;Configurar Alarma&lt;\/h2&gt;\";\r\n    html += \"&lt;form action='\/set_alarm' method='POST'&gt;\";\r\n    html += \"Hora: &lt;input type='number' name='hora' min='0' max='23'&gt;&lt;br&gt;\";\r\n    html += \"Minuto: &lt;input type='number' name='minuto' min='0' max='59'&gt;&lt;br&gt;\";\r\n    html += \"&lt;input type='submit' value='Establecer'&gt;\";\r\n    html += \"&lt;\/form&gt;&lt;\/body&gt;&lt;\/html&gt;\";\r\n    request-&gt;send(200, \"text\/html\", html);\r\n  });\r\n\r\n  \/\/ Manejar la configuraci\u00f3n de la alarma\r\n  server.on(\"\/set_alarm\", HTTP_POST, [](AsyncWebServerRequest *request){\r\n    int params = request-&gt;params();\r\n    int hora = -1;\r\n    int minuto = -1;\r\n    for(int i = 0; i &lt; params; i++){\r\n      AsyncWebParameter* p = request-&gt;getParam(i);\r\n      if(p-&gt;name() == \"hora\"){\r\n        hora = p-&gt;value().toInt();\r\n      }\r\n      if(p-&gt;name() == \"minuto\"){\r\n        minuto = p-&gt;value().toInt();\r\n      }\r\n    }\r\n    if(hora &gt;= 0 &amp;&amp; hora &lt; 24 &amp;&amp; minuto &gt;= 0 &amp;&amp; minuto &lt; 60){\r\n      alarmaHora = hora;\r\n      alarmaMinuto = minuto;\r\n      alarmaActivada = true;\r\n      guardarAlarma(hora, minuto); \/\/ Guardar alarma persistente\r\n      request-&gt;send(200, \"text\/plain\", \"Alarma configurada correctamente.\");\r\n    } else {\r\n      request-&gt;send(400, \"text\/plain\", \"Par\u00e1metros incorrectos.\");\r\n    }\r\n  });\r\n\r\n  server.begin();\r\n}\r\n\r\nvoid loop() {\r\n  timeClient.update();\r\n  \r\n  \/\/ Obtener hora actual\r\n  int currentHour = timeClient.getHours();\r\n  int currentMinute = timeClient.getMinutes();\r\n  int currentSecond = timeClient.getSeconds();\r\n  \r\n  \/\/ Mostrar informaci\u00f3n en OLED\r\n  u8g2.clearBuffer();\r\n  u8g2.setFont(u8g2_font_ncenB08_tr);\r\n\r\n  \/\/ Mostrar hora actual\r\n  u8g2.setCursor(0, 10);\r\n  u8g2.print(\"Hora actual:\");\r\n  u8g2.setCursor(0, 20);\r\n  u8g2.printf(\"%02d:%02d:%02d\", currentHour, currentMinute, currentSecond);\r\n  \r\n  \/\/ Mostrar hora de la alarma configurada\r\n  u8g2.setCursor(0, 35);\r\n  u8g2.print(\"Alarma:\");\r\n  if (alarmaActivada &amp;&amp; alarmaHora &gt;= 0 &amp;&amp; alarmaMinuto &gt;= 0) {\r\n    u8g2.setCursor(0, 45);\r\n    u8g2.printf(\"%02d:%02d\", alarmaHora, alarmaMinuto);\r\n  } else {\r\n    u8g2.setCursor(0, 45);\r\n    u8g2.print(\"No configurada\");\r\n  }\r\n    \/\/ Mostrar IP del servidor\r\n  u8g2.setCursor(0, 55);\r\n  u8g2.print(\"IP: \");\r\n  u8g2.print(WiFi.localIP());\r\n\r\n  u8g2.sendBuffer();\r\n  \r\n  \/\/ Verificar si se debe activar la alarma\r\n  if (alarmaActivada &amp;&amp; currentHour == alarmaHora &amp;&amp; currentMinute == alarmaMinuto &amp;&amp; currentSecond == 0) {\r\n    digitalWrite(buzzerPin, HIGH);  \/\/ Activar el buzzer\r\n    delay(1000);                    \/\/ Sonar por 1 segundo\r\n    digitalWrite(buzzerPin, LOW);   \/\/ Apagar el buzzer\r\n    alarmaActivada = false;         \/\/ Desactivar alarma\r\n    \/\/ Actualizar almacenamiento persistente\r\n    preferences.begin(\"alarma\", false);\r\n    preferences.putBool(\"activada\", false);\r\n    preferences.end();\r\n  }\r\n}<\/pre>\n<hr \/>\n<p>No te pierdas ning\u00fan video m\u00e1s suscr\u00edbete a nuestro canal de telegram\u00a0<a href=\"https:\/\/t.me\/carlosvolt_electronica_robotica\">https:\/\/t.me\/carlosvolt_electronica_robotica<\/a><\/p>\n<hr \/>\n<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>\n<hr \/>\n<p><strong>PROYECTO RECOMENDADO<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"Beeper con bot de telegram y esp32 - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/C3ZgmDcE-G0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc4b &#8220;\u00a1Hola, Makers! Bienvenidos a este nuevo tutorial. Hoy vamos a crear un proyecto muy pr\u00e1ctico: un sistema de alarma persistente con ESP32 y una pantalla OLED SH1106.&#8221; \ud83d\udd27 &#8220;Este sistema te permitir\u00e1 programar una alarma desde un servidor web, guardar esa configuraci\u00f3n en la memoria del ESP32 y, lo mejor de todo, \u00a1la alarma [&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":7834,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[2045,351,465,2047,145,1816,2048,1786,2042,2052,2050,2043,2046,2051,2049],"_links":{"self":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7832"}],"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=7832"}],"version-history":[{"count":1,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7832\/revisions"}],"predecessor-version":[{"id":7835,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7832\/revisions\/7835"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media\/7834"}],"wp:attachment":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media?parent=7832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/categories?post=7832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/tags?post=7832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}