<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>HolzTank</title>
<link>https://holztank.top/blog/</link>
<atom:link href="https://holztank.top/blog/index.xml" rel="self" type="application/rss+xml"/>
<description>Un sitio hecho con Quarto.</description>
<generator>quarto-1.9.38</generator>
<lastBuildDate>Mon, 08 Jun 2026 06:00:00 GMT</lastBuildDate>
<item>
  <title>Leer la temperatura mediante BLE</title>
  <link>https://holztank.top/blog/entradas/dht11BLE.html</link>
  <description><![CDATA[ 





<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>Esta práctica nos permitirá obtener la temperatura y la humedad del entorno mediante un sensor DHT11 para luego mostrarlas a través de BLE.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/dht22-esp32.png" class="img-fluid figure-img"></p>
<figcaption>Conexión de un sensor DHT22 asumiendo que viene ya en un módulo</figcaption>
</figure>
</div>
<p>Necesitamos verificar si el sensor viene ya en un módulo o por sí solo. En la compra por kits, dicho sensor se presenta de la primera forma, lo cual nos ahorra el tener que agregar una resistencia de <img src="https://latex.codecogs.com/png.latex?10k%20%5COmega">. Si por alguna razón viene “suelto”, entonces sí debemos agregar dicha resistencia haciendo puente entre el voltaje y la señal.</p>
<p>El sensor se conecta a los <img src="https://latex.codecogs.com/png.latex?3.3V"> de la placa, mientras que la señal se conecta al pin 4. Por último, la tierra a cualquier GND de la esp32. También agregaremos el circuito básico de led, para mostrar el estado de la conexión, ya que este encenderá cuando se haya conectado un cliente.</p>
<p>Lo siguiente es instalar lo necesario, lo cual lo abordo enseguida.</p>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<p>Antes de cargar nada, debemos instalar la librería que el sensor requiere, para lo cual nos vamos al <em>Gestor de bibliotecas</em> que se encuentra en el panel izquierdo (su icono trata de hacer referencia a unos libros apilados y es el tercero de arriba abajo, aunque no lo distingo como tales). Ahí tendremos una caja de texto en la que buscaremos <code>dht sensor adafruit</code> y nos instalamos la librería que haya sido subida precisamente por Adafruit. Al pedirnos si instalamos las dependencias, le decimos que sí y aceptamos.</p>
<p>Después de haber instalado la librería y verificar que así haya sido en la terminal de Arduino IDE, pasamos a cargar el siguiente código:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEDevice.h&gt;</span></span>
<span id="cb1-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEServer.h&gt;</span></span>
<span id="cb1-3"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEUtils.h&gt;</span></span>
<span id="cb1-4"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLE2902.h&gt;</span></span>
<span id="cb1-5"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;DHT.h&gt;</span></span>
<span id="cb1-6"></span>
<span id="cb1-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configurando el sensor</span></span>
<span id="cb1-8"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define DHTPIN </span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">            </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// GPIO donde esta conectado el DHT11</span></span>
<span id="cb1-9"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define DHTTYPE </span>DHT11<span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">       </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// TIPO DE SENSOR: DHT11</span></span>
<span id="cb1-10"></span>
<span id="cb1-11">DHT dht<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>DHTPIN<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> DHTTYPE<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-12"></span>
<span id="cb1-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configurando BLE</span></span>
<span id="cb1-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Servicio de sensado de entorno (UUID Estandar)</span></span>
<span id="cb1-15"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define SERVICE_UUID         </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"181A"</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">  </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Environmental Sensing Service</span></span>
<span id="cb1-16"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define TEMP_UUID       </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2A6E"</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">  </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Temperatura (caracteristica estandar)</span></span>
<span id="cb1-17"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define HUM_UUID      </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2A6F"</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">  </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Humedad (caracteristica estandar)</span></span>
<span id="cb1-18"></span>
<span id="cb1-19"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Nombre visible del dispositivo</span></span>
<span id="cb1-20"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define DEVICE_NAME          </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"CambiarNombre"</span></span>
<span id="cb1-21"></span>
<span id="cb1-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Intervalo de lectura del sensor (ms)</span></span>
<span id="cb1-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// El DHT11 requiere al menos 2000ms entre lecturas</span></span>
<span id="cb1-24"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define SENSOR_READ_INTERVAL </span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">  </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 5 segundos</span></span>
<span id="cb1-25"></span>
<span id="cb1-26"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Variables</span></span>
<span id="cb1-27">BLEServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pServer <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> NULL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-28">BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pTempCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> NULL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-29">BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pHumidCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> NULL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-30"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-31"></span>
<span id="cb1-32"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Almacenar ultimos valores leidos</span></span>
<span id="cb1-33"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> lastTemperature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-34"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> lastHumidity <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-35"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">unsigned</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">long</span> lastSensorRead <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-36"></span>
<span id="cb1-37"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// LED indicador (opcional)</span></span>
<span id="cb1-38"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> pinEstadoLed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-39"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> estadoLed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-40"></span>
<span id="cb1-41"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Callbacks</span></span>
<span id="cb1-42"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> MyServerCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">public</span> BLEServerCallbacks <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-43">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> onConnect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>BLEServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">override</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-44">    deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-45">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cliente BLE conectado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-46">    digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pinEstadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-47">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-48"></span>
<span id="cb1-49">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> onDisconnect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>BLEServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">override</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-50">    deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-51">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cliente BLE desconectado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-52">    digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pinEstadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-53"></span>
<span id="cb1-54">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Reiniciar advertising para permitir nuevas conexiones</span></span>
<span id="cb1-55">    delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-56">    pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>startAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-57">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Reanudando advertising..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-58">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-59"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">};</span></span>
<span id="cb1-60"></span>
<span id="cb1-61"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Sensor DHT11</span></span>
<span id="cb1-62"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> readDHT11Sensor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-63">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Leer el sensor</span></span>
<span id="cb1-64">  temperature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> dht<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>readTemperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-65">  humidity <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> dht<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>readHumidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-66"></span>
<span id="cb1-67">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Verificar si la lectura fue exitosa</span></span>
<span id="cb1-68">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// isnan() verifica si el valor es "Not a Number" (error de lectura)</span></span>
<span id="cb1-69">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>isnan<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">||</span> isnan<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-70">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error: No se pudo leer el sensor DHT11"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-71">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Verifica las conexiones y que el sensor este alimentado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-72">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-73">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-74"></span>
<span id="cb1-75">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// El DHT11 no mide temperaturas negativas (rango 0-50°C)</span></span>
<span id="cb1-76">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si se lee un valor fuera de rango, el sensor puede devolver datos erroneos</span></span>
<span id="cb1-77"></span>
<span id="cb1-78">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-79"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-80"></span>
<span id="cb1-81"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> updateBLECharacteristics<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-82">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(!</span>deviceConnected<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-83">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// No hay cliente conectado, no enviar datos</span></span>
<span id="cb1-84">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-85"></span>
<span id="cb1-86">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Convertir temperatura a entero para BLE (formato estandar)</span></span>
<span id="cb1-87">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// En BLE, la temperatura se suele enviar como entero con resolucion de 0.01°C</span></span>
<span id="cb1-88">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int16_t</span> tempInt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int16_t</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)(</span>temperature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-89"></span>
<span id="cb1-90">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Convertir humedad a entero (resolucion 0.01%)</span></span>
<span id="cb1-91">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint16_t</span> humInt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint16_t</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)(</span>humidity <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-92"></span>
<span id="cb1-93">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Enviar temperatura</span></span>
<span id="cb1-94">  pTempCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">((</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint8_t</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*)&amp;</span>tempInt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-95">  pTempCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>notify<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-96"></span>
<span id="cb1-97">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Enviar humedad</span></span>
<span id="cb1-98">  pHumidCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">((</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint8_t</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*)&amp;</span>humInt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-99">  pHumidCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>notify<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-100"></span>
<span id="cb1-101">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Datos enviados por BLE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-102">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  Temperatura (int): "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-103">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>tempInt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-104">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  Humedad (int): "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-105">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>humInt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-106"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-107"></span>
<span id="cb1-108"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Funcion para formatear valores como String (para debug)</span></span>
<span id="cb1-109">String formatSensorData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-110">  String data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Temp: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-111">  data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> String<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-112">  data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" C | Hum: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-113">  data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> String<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-114">  data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" %"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-115">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-116"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-117"></span>
<span id="cb1-118"></span>
<span id="cb1-119"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-120">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-121"></span>
<span id="cb1-122">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configurar LED de estado</span></span>
<span id="cb1-123">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pinEstadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-124">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pinEstadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-125"></span>
<span id="cb1-126">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Inicializar el sensor DHT11</span></span>
<span id="cb1-127">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Inicializando sensor DHT11..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-128">  dht<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-129"></span>
<span id="cb1-130">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Verificar que el sensor responda</span></span>
<span id="cb1-131">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Primer delay para estabilizar el sensor</span></span>
<span id="cb1-132">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> testTemp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> testHum<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-133">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>readDHT11Sensor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>testTemp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> testHum<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-134">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sensor DHT11 inicializado correctamente"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-135">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  Lectura inicial - Temperatura: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-136">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>testTemp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-137">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" C, Humedad: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-138">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>testHum<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-139">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" %"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-140">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-141">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"No se detectó el sensor DHT11"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-142">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-143"></span>
<span id="cb1-144">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Inicializar BLE</span></span>
<span id="cb1-145">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Inicializando BLE..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-146">  BLEDevice<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>init<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>DEVICE_NAME<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-147"></span>
<span id="cb1-148">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Crear servidor BLE</span></span>
<span id="cb1-149">  pServer <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BLEDevice<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>createServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-150">  pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">new</span> MyServerCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-151"></span>
<span id="cb1-152">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Crear el servicio (UUID estandar 0x181A)</span></span>
<span id="cb1-153">  BLEService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pService <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>createService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>SERVICE_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-154"></span>
<span id="cb1-155">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Caracteristica para temperatura (UUID estandar 0x2A6E)</span></span>
<span id="cb1-156">  pTempCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>createCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span></span>
<span id="cb1-157">    TEMP_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb1-158">    BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>PROPERTY_READ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span></span>
<span id="cb1-159">    BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>PROPERTY_NOTIFY</span>
<span id="cb1-160">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-161">  pTempCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>addDescriptor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">new</span> BLE2902<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Necesario para notifications</span></span>
<span id="cb1-162"></span>
<span id="cb1-163">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Caracteristica para humedad (UUID estandar 0x2A6F)</span></span>
<span id="cb1-164">  pHumidCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>createCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span></span>
<span id="cb1-165">    HUM_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb1-166">    BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>PROPERTY_READ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span></span>
<span id="cb1-167">    BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>PROPERTY_NOTIFY</span>
<span id="cb1-168">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-169">  pHumidCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>addDescriptor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">new</span> BLE2902<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-170"></span>
<span id="cb1-171">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Iniciar servicio</span></span>
<span id="cb1-172">  pService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-173"></span>
<span id="cb1-174">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configurar advertising</span></span>
<span id="cb1-175">  BLEAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pAdvertising <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>getAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-176">  pAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>addServiceUUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>SERVICE_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-177">  pAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-178"></span>
<span id="cb1-179">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"BLE inicializado correctamente"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-180">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  Nombre del dispositivo: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-181">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>DEVICE_NAME<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-182">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  Servicio UUID: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-183">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>SERVICE_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-184"></span>
<span id="cb1-185">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-186">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sistema listo"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-187">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1. Abrir nRF Connect en el teléfono"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-188">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2. Escanear y conectarse a CambiarNombre"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-189">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"3. Buscar el servicio Environmental Sensing (0x181A)"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-190">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4. Leer las caracteristicas de temperatura y humedad"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-191">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-192"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-193"></span>
<span id="cb1-194"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-195">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">unsigned</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">long</span> currentMillis <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-196"></span>
<span id="cb1-197">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Leer el sensor cada SENSOR_READ_INTERVAL milisegundos</span></span>
<span id="cb1-198">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentMillis <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> lastSensorRead <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> SENSOR_READ_INTERVAL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-199">    lastSensorRead <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> currentMillis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-200"></span>
<span id="cb1-201">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Leer el DHT11</span></span>
<span id="cb1-202">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">float</span> temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-203">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>readDHT11Sensor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-204">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Actualizar variables globales</span></span>
<span id="cb1-205">      lastTemperature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-206">      lastHumidity <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-207"></span>
<span id="cb1-208">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Mostrar en Monitor Serie</span></span>
<span id="cb1-209">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lectura de sensor: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-210">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>formatSensorData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">));</span></span>
<span id="cb1-211"></span>
<span id="cb1-212">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si hay un cliente conectado, enviar datos por BLE</span></span>
<span id="cb1-213">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>deviceConnected<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-214">        updateBLECharacteristics<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>temperature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> humidity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-215">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  (Datos enviados a cliente BLE)"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-216">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-217">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  (Sin cliente BLE conectado)"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-218">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-219"></span>
<span id="cb1-220">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Parpadeo del LED indicador de lectura exitosa</span></span>
<span id="cb1-221">      estadoLed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>estadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-222">      digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pinEstadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> estadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-223">      delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-224">      digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pinEstadoLed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">?</span> HIGH <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-225"></span>
<span id="cb1-226">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-227">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error en lectura del sensor - reintentando en el proximo ciclo"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-228">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-229">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-230"></span>
<span id="cb1-231">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Pequena pausa para no saturar el CPU</span></span>
<span id="cb1-232">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-233"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>Toca probar con la aplicación <code>nRF Connect</code> y seguir las instrucciones mostradas en el monitor.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/dht11BLE.html</guid>
  <pubDate>Mon, 08 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Transmitir por bluetooth</title>
  <link>https://holztank.top/blog/entradas/emisorBLE.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/BLE.png" class="img-fluid figure-img"></p>
<figcaption>Transmitiendo por BLE</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>En esta práctica haremos que la esp32 permanezca emitiendo paquetes de datos por medio de Bluetooth Low Energy (BLE) para que un dispositivo móvil los pueda leer. Es como un aviso de proximidad.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>El led con resistencia de toda la vida.</p>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<p>Cargaremos el siguiente código a la esp32. Debemos editarlo para poner nuestro propio <em>UUID</em> (podemos generarlo <a href="https://www.uuidgenerator.net/">aquí</a>); también debemos cambiar el nombre del dispositivo.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEDevice.h&gt;</span></span>
<span id="cb1-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEUtils.h&gt;</span></span>
<span id="cb1-3"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEServer.h&gt;</span></span>
<span id="cb1-4"></span>
<span id="cb1-5"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> UUID <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2d214dcf-bc32-45bc-b825-6f7f8e6566f8"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-6"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint16_t</span> MAJOR <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-7"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint16_t</span> MINOR <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-8"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-9"></span>
<span id="cb1-10"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-11">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-12">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Iniciando ESP32 con BLE..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-13"></span>
<span id="cb1-14">    pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-15">    digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-16"></span>
<span id="cb1-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// RENOMBRAR DISPOSITIVO BLE (cambiarlo por equipo)</span></span>
<span id="cb1-18">    BLEDevice<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>init<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ESP32_BLE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-19"></span>
<span id="cb1-20">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Construir payload iBeacon (estructura para Apple)</span></span>
<span id="cb1-21"></span>
<span id="cb1-22">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Estructura:</span></span>
<span id="cb1-23">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Apple ID (2) + iBeacon type (2) + UUID (16) + Major (2) + Minor (2) +</span></span>
<span id="cb1-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// TX Power (1)</span></span>
<span id="cb1-25">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint8_t</span> payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">];</span></span>
<span id="cb1-26"></span>
<span id="cb1-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Apple Manufacturer ID (0x004C) - Little Endian</span></span>
<span id="cb1-28">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0x4C</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-29">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0x00</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-30"></span>
<span id="cb1-31">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// iBeacon type (0x0215)</span></span>
<span id="cb1-32">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0x02</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-33">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0x15</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-34"></span>
<span id="cb1-35">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// UUID (16 bytes)</span></span>
<span id="cb1-36">    String uuidStr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-37">    uuidStr<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>replace<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-38">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">++)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-39">        String byteStr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> uuidStr<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>substring<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-40">        payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">uint8_t</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> strtol<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>byteStr<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>c_str<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(),</span> NULL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-41">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-42"></span>
<span id="cb1-43">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Major (2 bytes) - Big Endian</span></span>
<span id="cb1-44">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>MAJOR <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0xFF</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-45">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">21</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MAJOR <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0xFF</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-46"></span>
<span id="cb1-47">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Minor (2 bytes) - Big Endian</span></span>
<span id="cb1-48">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">22</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>MINOR <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0xFF</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-49">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">23</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MINOR <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> <span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0xFF</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-50"></span>
<span id="cb1-51">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// TX Power (RSSI a 1 metro)</span></span>
<span id="cb1-52">    payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">24</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">59</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-53"></span>
<span id="cb1-54">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Esta línea solo funciona en librerías más recientes que la 3.0.0</span></span>
<span id="cb1-55">    String payloadString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-56">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">++)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-57">        payloadString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span>payload<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span>i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">];</span></span>
<span id="cb1-58">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-59"></span>
<span id="cb1-60">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configurar advertising con los datos</span></span>
<span id="cb1-61">    BLEAdvertisementData advData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-62">    advData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>setFlags<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="bn" style="color: #AD0000;
background-color: null;
font-style: inherit;">0x04</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-63">    advData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>setManufacturerData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>payloadString<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-64"></span>
<span id="cb1-65">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Iniciar advertising</span></span>
<span id="cb1-66">    BLEAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pAdvertising <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BLEDevice<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>getAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-67">    pAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setAdvertisementData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>advData<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-68">    pAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-69"></span>
<span id="cb1-70">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"BLE activo"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-71">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   UUID: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-72">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-73">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   Major: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-74">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>MAJOR<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-75">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   Minor: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-76">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>MINOR<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-77">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">  Escanear con nRF Connect o LightBlue"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-78"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-79"></span>
<span id="cb1-80"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-81">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">static</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">unsigned</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">long</span> lastBlink <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-82">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> lastBlink <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-83">        lastBlink <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-84">        digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>digitalRead<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">));</span></span>
<span id="cb1-85">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-86">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-87">    delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-88"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
</section>
<section id="leer-con-un-teléfono" class="level2">
<h2 class="anchored" data-anchor-id="leer-con-un-teléfono">“Leer” con un teléfono</h2>
<p>El último paso es acceder a lo que la esp32 está mostrando en su emisión BLE. Para ello debemos instalar alguna aplicación que permita escanear dispositivos BLE. Para android podemos usar <em>nRF Connect</em>. Tenemos que escanear dispositivos en dicha aplicación y acceder al nuestro. Debemos también verificar que los datos que muestresean exactamente los correctos.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/emisorBLE.html</guid>
  <pubDate>Mon, 08 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Controlar led por bluetooth</title>
  <link>https://holztank.top/blog/entradas/ledBLE.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/practica01.png" class="img-fluid figure-img"></p>
<figcaption>Controlando el led por BLE</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>El siguiente paso es controlar el led de siempre por medio de la conexión BLE de la esp32.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>El de siempre con un led y su resistencia, todo al <code>GPIO16</code>.</p>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<p>Procedemos a cargar en la esp32 el siguiente código:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEDevice.h&gt;</span></span>
<span id="cb1-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEServer.h&gt;</span></span>
<span id="cb1-3"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLEUtils.h&gt;</span></span>
<span id="cb1-4"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;BLE2902.h&gt;</span></span>
<span id="cb1-5"></span>
<span id="cb1-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// UUIDs del servicio Nordic UART-like</span></span>
<span id="cb1-7"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define SERVICE_UUID           </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"6E400001-B5A3-F393-E0A9-E50E24DCCA9E"</span></span>
<span id="cb1-8"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define CHARACTERISTIC_UUID_RX </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"6E400002-B5A3-F393-E0A9-E50E24DCCA9E"</span></span>
<span id="cb1-9"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define CHARACTERISTIC_UUID_TX </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"6E400003-B5A3-F393-E0A9-E50E24DCCA9E"</span></span>
<span id="cb1-10"></span>
<span id="cb1-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Pin del LED</span></span>
<span id="cb1-12"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-13"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> estado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-14"></span>
<span id="cb1-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Variables globales BLE</span></span>
<span id="cb1-16">BLEServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pServer <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> NULL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-17">BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pTxCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> NULL<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-18"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-19"></span>
<span id="cb1-20"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Callback para eventos de conexion/desconexion</span></span>
<span id="cb1-21"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> MyServerCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">public</span> BLEServerCallbacks <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-22">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> onConnect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>BLEServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">override</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-23">    deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-24">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Dispositivo conectado por BLE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-25">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-26"></span>
<span id="cb1-27">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> onDisconnect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>BLEServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">override</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-28">    deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-29">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Dispositivo desconectado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-30">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Reiniciar advertising para permitir nuevas conexiones</span></span>
<span id="cb1-31">    delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-32">    pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>startAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-33">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Reanudando advertising..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-34">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-35"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">};</span></span>
<span id="cb1-36"></span>
<span id="cb1-37"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Callback para recibir datos del cliente</span></span>
<span id="cb1-38"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> MyCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">public</span> BLECharacteristicCallbacks <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-39">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> onWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">override</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-40">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Obtener el valor recibido - esto devuelve String internamente</span></span>
<span id="cb1-41">    String rxValue <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>getValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-42"></span>
<span id="cb1-43">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>rxValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-44">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Comando recibido: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-45">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>rxValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>c_str<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-46"></span>
<span id="cb1-47">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Procesar comando</span></span>
<span id="cb1-48">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>rxValue <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"H"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-49">        estado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-50">        digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-51">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED encendido"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-52"></span>
<span id="cb1-53">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Enviar confirmacion por BLE usando String</span></span>
<span id="cb1-54">        String confirmacion <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OK_ON"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-55">        pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>confirmacion<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>c_str<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-56">        pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>notify<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-57">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-58">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>rxValue <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"L"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-59">        estado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-60">        digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-61">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED apagado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-62"></span>
<span id="cb1-63">        String confirmacion <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OK_OFF"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-64">        pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>confirmacion<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>c_str<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-65">        pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>notify<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-66">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-67">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>rxValue <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"STATUS"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-68">        String estado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> estado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">?</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED:ON"</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED:OFF"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-69">        pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>estado<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>c_str<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-70">        pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>notify<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-71">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-72">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-73">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Comando no reconocido: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-74">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>rxValue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>c_str<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-75">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-76">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-77">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-78"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">};</span></span>
<span id="cb1-79"></span>
<span id="cb1-80"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-81">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-82">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-83">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Iniciando Servidor BLE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-84"></span>
<span id="cb1-85">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configurar LED</span></span>
<span id="cb1-86">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-87">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-88"></span>
<span id="cb1-89">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Inicializar dispositivo BLE, CAMBIAR NOMBRE</span></span>
<span id="cb1-90">  BLEDevice<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>init<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"CAMBIAR_NOMBRE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-91"></span>
<span id="cb1-92">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Crear servidor BLE</span></span>
<span id="cb1-93">  pServer <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BLEDevice<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>createServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-94">  pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">new</span> MyServerCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-95"></span>
<span id="cb1-96">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Crear servicio</span></span>
<span id="cb1-97">  BLEService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pService <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>createService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>SERVICE_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-98"></span>
<span id="cb1-99">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Crear caracteristicas</span></span>
<span id="cb1-100">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Caracteristica TX (envia datos al teléfono) con propiedad NOTIFY</span></span>
<span id="cb1-101">  pTxCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>createCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span></span>
<span id="cb1-102">    CHARACTERISTIC_UUID_TX<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb1-103">    BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>PROPERTY_NOTIFY</span>
<span id="cb1-104">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-105">  pTxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>addDescriptor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">new</span> BLE2902<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-106"></span>
<span id="cb1-107">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Caracteristica RX (recibe datos del teléfono) con propiedad WRITE</span></span>
<span id="cb1-108">  BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pRxCharacteristic <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>createCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span></span>
<span id="cb1-109">    CHARACTERISTIC_UUID_RX<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb1-110">    BLECharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>PROPERTY_WRITE</span>
<span id="cb1-111">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-112">  pRxCharacteristic<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>setCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">new</span> MyCallbacks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-113"></span>
<span id="cb1-114">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Iniciar servicio</span></span>
<span id="cb1-115">  pService<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-116"></span>
<span id="cb1-117">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Iniciar advertising</span></span>
<span id="cb1-118">  BLEAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pAdvertising <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pServer<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>getAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-119">  pAdvertising<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-&gt;</span>start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-120"></span>
<span id="cb1-121">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Servidor BLE listo"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-122">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// CAMBIAR AL NOMBRE ELEGIDO</span></span>
<span id="cb1-123">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nombre del dispositivo: CAMBIAR_NOMBRE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-124">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Servicio UUID: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-125">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>SERVICE_UUID<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-126">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Instrucciones:"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-127">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1. Abrir nRF Connect en el teléfono"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-128">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2. Escanear y conectarse a CAMBIAR_NOMBRE"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-129">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"3. Buscar la caracteristica con RX en Nordic UART Service"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-130">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4. Presionar el icono de flecha que apunta arriba"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-131">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"5. Escribir H (Encender) o L (Apagar)"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-132"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-133"></span>
<span id="cb1-134"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-135">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Mantener el servidor funcionando</span></span>
<span id="cb1-136">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Opcional: parpadeo del LED integrado como indicador de actividad</span></span>
<span id="cb1-137">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">static</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">unsigned</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">long</span> lastBlink <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-138">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">static</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> blinkState <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-139"></span>
<span id="cb1-140">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>deviceConnected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;&amp;</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> lastBlink <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-141">    lastBlink <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-142">    blinkState <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>blinkState<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-143">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Solo para depuracion, no interfiere con el LED principal</span></span>
<span id="cb1-144">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-145"></span>
<span id="cb1-146">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-147"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>Las instrucciones estarán mostrándose en el monitor serial de Arduino IDE.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/ledBLE.html</guid>
  <pubDate>Mon, 08 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Vectores en R</title>
  <link>https://holztank.top/blog/entradas/introR.html</link>
  <description><![CDATA[ 





<p>Podemos utilizar R como una calculadora bastante avanzada, utilizando los operadores básicos. Sin embargo, no nos quedaremos ahí. Pasemos a ver cómo se declaran las variables y trabajaremos con vectores.</p>
<section id="variables" class="level2">
<h2 class="anchored" data-anchor-id="variables">Variables</h2>
<p>Se declaran de manera muy sencilla. Lo peculiar de R es que no se utiliza el símbolo <code>=</code>, si no que se asignan valores con la combinación <code>&lt;-</code>. Por ejemplo:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1">manzanas <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span></span>
<span id="cb1-2">naranjas <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span></span>
<span id="cb1-3">frutas <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> manzanas <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> naranjas</span>
<span id="cb1-4"></span>
<span id="cb1-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Se imprime una variable si escribimos su nombre</span></span>
<span id="cb1-6">frutas</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>[1] 9</code></pre>
</div>
</div>
<p>En el ejemplo anterior vimos que se pueden utilizar los operadores aritméticos en R de la manera usual. Entremos al trabajo con los vectores.</p>
</section>
<section id="vectores" class="level2">
<h2 class="anchored" data-anchor-id="vectores">Vectores</h2>
<p>Se crean usando la función <code>c()</code> con los distintos elementos en su interior y podemos incluir valores numéricos, de texto y lógicos. Por ejemplo:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">numerico <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb3-2">textual <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Uno"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Dos"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tres"</span>)</span>
<span id="cb3-3">booleano <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>, <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>, <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span></code></pre></div></div>
</details>
</div>
<p>Creemos un par de vectores numéricos que reflejarán nuestras ganancias en dos tipos de juegos: el póker y la ruleta:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Ganancias en el póker</span></span>
<span id="cb4-2">poker <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">140</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">120</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">240</span>)</span>
<span id="cb4-3"></span>
<span id="cb4-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Ganancias en la ruleta</span></span>
<span id="cb4-5">ruleta <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">24</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">350</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span></code></pre></div></div>
</details>
</div>
<p>Pero como deseamos tener bien identificados los elementos de nuestros vectores, podemos asignarle nombres a sus “columnas”:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Vector con los nombres de los días</span></span>
<span id="cb5-2">dias_semana <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lunes"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Martes"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Miércoles"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jueves"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Viernes"</span>)</span>
<span id="cb5-3"></span>
<span id="cb5-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Asignar días como nombres a ambos vectores</span></span>
<span id="cb5-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(poker) <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dias_semana</span>
<span id="cb5-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(ruleta) <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dias_semana</span>
<span id="cb5-7"></span>
<span id="cb5-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imprimir ambos vectores</span></span>
<span id="cb5-9">poker</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>    Lunes    Martes Miércoles    Jueves   Viernes 
      140       -50        20      -120       240 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1">ruleta</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>    Lunes    Martes Miércoles    Jueves   Viernes 
      -24       -50       100      -350        10 </code></pre>
</div>
</div>
</section>
<section id="operaciones-con-vectores" class="level2">
<h2 class="anchored" data-anchor-id="operaciones-con-vectores">Operaciones con vectores</h2>
<p>Si deseamos sumar cada elemento de un vector con su contraparte en el otro vector, podemos literalmente sumarlos:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sumar los totales diarios de ambos vectores</span></span>
<span id="cb9-2">total_diario <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> poker <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> ruleta</span>
<span id="cb9-3">total_diario</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>    Lunes    Martes Miércoles    Jueves   Viernes 
      116      -100       120      -470       250 </code></pre>
</div>
</div>
<p>Y si lo que deseamos es mostrar la sumatoria numérica de cada uno de los vectores, podemos utilizar la función <code>sum()</code>:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Calcular la sumatoria por vector</span></span>
<span id="cb11-2">total_poker <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(poker)</span>
<span id="cb11-3">total_ruleta <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ruleta)</span>
<span id="cb11-4"></span>
<span id="cb11-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sumar ambos resultados</span></span>
<span id="cb11-6">total_semanal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> total_poker <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> total_ruleta</span>
<span id="cb11-7"></span>
<span id="cb11-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imprimir un mensaje y el total</span></span>
<span id="cb11-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">print</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Total por semana: "</span>, total_semanal))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>[1] "Total por semana:  -84"</code></pre>
</div>
</div>
</section>
<section id="seleccionar-elementos-de-un-vector" class="level2">
<h2 class="anchored" data-anchor-id="seleccionar-elementos-de-un-vector">Seleccionar elementos de un vector</h2>
<p>Para seleccionar un elemento dentro de un vector, una matriz o un marco de datos, se utiliza el nombre del vector y el indicador del elemento entre corchetes. Por ejemplo, seleccionemos el cuarto elemento del vector <code>poker</code>:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb13-1">poker[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>]</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Miércoles 
       20 </code></pre>
</div>
</div>
<p>Si por otro lado, deseamos seleccionar varios elementos contiguos, basta con especificar el rango con dos puntos enmedio:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb15-1">poker[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>]</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>   Martes Miércoles    Jueves 
      -50        20      -120 </code></pre>
</div>
</div>
<p>También podemos seleccionar utilizando los nombres de las columnas:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb17-1">poker[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lunes"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Martes"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Miércoles"</span>)]</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>    Lunes    Martes Miércoles 
      140       -50        20 </code></pre>
</div>
</div>
<p>O por comparación. Por ejemplo, queremos solo seleccionar las ganancias (omitiendo, naturalmente, las pérdidas):</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb19-1">poker <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>    Lunes    Martes Miércoles    Jueves   Viernes 
     TRUE     FALSE      TRUE     FALSE      TRUE </code></pre>
</div>
</div>
<p>En la siguiente entrada veremos cómo se usan las matrices.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>DataScience</category>
  <category>R</category>
  <guid>https://holztank.top/blog/entradas/introR.html</guid>
  <pubDate>Sun, 07 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Configurando Godot para un Metroidvania genérico</title>
  <link>https://holztank.top/blog/entradas/metroidvania-01.html</link>
  <description><![CDATA[ 





<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>En esta serie de entradas iré vaciando lo que voy haciendo para desarrollar un videojuego en Godot que pertenece al género Metroidvania. Cabe mencionar que no todo es generado únicamente por mí, si no que iré tomando elementos de otros tutoriales, manuales, documentación y demás.</p>
<p>Dejémoslo en que esta serie de entradas es una especie de repositorio y tutorial para el <em>yo</em> del futuro, que muy probablemente olvide todo si no lo documento.</p>
</section>
<section id="configuración-del-proyecto" class="level2">
<h2 class="anchored" data-anchor-id="configuración-del-proyecto">Configuración del proyecto</h2>
<p>Partiré con un proyecto Godot que utilizará el motor <em>Forward+</em> y que llamaré <strong>Taller-Metroidvania</strong>. En el menú <em>Proyecto -&gt; Configuración del proyecto</em>, en la pestaña <em>General</em>, nos dirigimos a la categoría <em>Visualización -&gt; Ventana</em> y nos aseguramos de cambiar el parámetro <em>Modo</em> en la sección <em>Estirar</em> a <code>canvas_item</code>. En <em>Tamaño</em> de la visualización lo cambiamos a un ancho y alto de <code>480*270</code>, respectivamente. Podríamos pensar que es un tamaño pequeño. Y sí, lo es. Pero lo tendremos en cuenta enseguida.</p>
<p>Antes de cerrar la ventana, veremos que en su parte superior derecha se encuentra un deslizador. Ahí activaré las <em>Configuraciones Avanzadas</em> para enseguida bajar un poco y cambiar las opciones <em>Sobreescribir Ancho</em> y <em>Sobreescribir Alto de Ventana</em> a <code>1440*810</code>, respectivamente. Esto último con la intención de ajustar el escalado de la ventana al momento de ejecutar el juego en pantallas de alta resolución.</p>
<p>Seguimos en la configuración del proyecto, pero ahora bajaremos hacia la categoría <em>Renderizado -&gt; Texturas</em> y en la sección <em>Textura del Canvas</em> cambiamos la opción <em>Filtro de Textura</em> a <code>Nearest</code>. Esto es así porque nuestro Metroidvania usará un estilo gráfico basado en arte píxel.</p>
<p>Cambiaremos a la pestaña <em>Mapa de Entrada</em> y configuraremos los controles iniciales para nuestro juego. Primero, lo que debemos pulsar para que el personaje se mueva a la izquierda. Colocaremos el cursor de texto en la entrada <em>Añadir Nueva Acción</em> y escribimos <code>izquierda</code> para enseguida dar clic en el botón <em>Añadir</em> que se encuentra a la derecha. Veremos dicho texto aparece justamente dentro de la sección <em>Acción</em>. A su derecha está un botón <em>+</em>. Daremos clic allí y Godot nos pedirá que pulsemos la tecla del teclado que responderá a dicha acción, la cual mostrará tras pulsarlo pero no la guardará hasta que pulsemos en <em>Aceptar</em>. Cabe decir que es posible agregar tantos botones o teclas deseemos para dicha acción, incluso podemos presionar la dirección correspondiente en la cruceta o la palanca de un control si es que lo tenemos conectado. Tendremos que repetir esto para al menos las cuatro direcciones y los movimientos que tengamos pensados.</p>
<p>Los movimientos que agregaré son el salto, el ataque, correr y habilidad. Aún no tengo del todo claro cuál será esa habilidad, pero conforme avancemos lo averiguaremos. Los controles que asignaré serán, respectivamente, botones <code>A</code>, <code>X</code>, <code>B</code> y <code>Y</code> en un mando genérico de <em>XBOX</em> y teclas <code>Z</code>, <code>X</code>, <code>C</code> y <code>S</code> en un teclado.</p>
<p>Cerremos la ventana y creemos un Nodo Raíz del tipo <em>Escena 2D</em>. Recordemos los controles básicos en Godot para el ratón. Con el botón central podemos mover la vista y con la rueda alejamos o acercamos la misma.</p>
<p>Guardamos la escena como <code>playground.tscn</code> y ya tenemos la configuración inicial de nuestro metroidvania lista. En una entrada posterior comenzaremos con el personaje principal.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>GameDev</category>
  <category>Metroidvania</category>
  <category>Godot</category>
  <guid>https://holztank.top/blog/entradas/metroidvania-01.html</guid>
  <pubDate>Sun, 07 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>GUIs con Python</title>
  <link>https://holztank.top/blog/entradas/pyqt6.html</link>
  <description><![CDATA[ 





<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>Estos no son más que un conjunto de apuntes para recordar o facilitar el cómo se desarrollan aplicaciones gráficas con Python y pyqt6. Estaré documentando el desarrollo por acá, mientras de manera paralela iré armando el proyecto en una carpeta separada.</p>
</section>
<section id="preparando-el-entorno" class="level2">
<h2 class="anchored" data-anchor-id="preparando-el-entorno">Preparando el entorno</h2>
<p>Primero la instalación de lo necesario. Debido a que utilizo Manjaro Linux (y lo mismo aplica para cualquier derivada de Arch), es más recomendable instalar las librerías de Python directamente con el gestor de paquetes <em>Pacman</em>, al contrario de lo que en muchos tutoriales se sugiere.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> python-qt6</span></code></pre></div></div>
<p>Sin embargo, siempre resulta muy útil trabajar con entornos virtuales, en los cuales es posible instalar los paquetes necesarios de manera aislada. Una ventaja de este enfoque es evitar que tras las continuas actualizaciones de paquetes en Arch se rompan las dependencias de este proyecto, que se supone es algo más serio. As’que continúemos.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Dev</category>
  <category>Python</category>
  <guid>https://holztank.top/blog/entradas/pyqt6.html</guid>
  <pubDate>Sun, 07 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Controlar un led con la terminal de comandos</title>
  <link>https://holztank.top/blog/entradas/comandoSerialExterno.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/serialControlTerm.png" class="img-fluid figure-img"></p>
<figcaption>Controlando un led con la terminal</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>En la anterior entrada mandamos órdenes a la ESP32 por medio de comunicación serial para encender o apagar un led. En esta ocasión, dichas órdenes se emitirán por medio de una aplicación externa que se esté ejecutando en la PC.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Partiremos del circuito con led y resistencia que armamos justo en la entrada pasada.</p>
</section>
<section id="código-para-la-esp32" class="level2">
<h2 class="anchored" data-anchor-id="código-para-la-esp32">Código para la ESP32</h2>
<p>Si hemos realizado justo antes la práctica del monitor serial, ya deberíamos tener el programa cargado en la placa. De todos modos lo repito aquí.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/* Entradas y salidas */</span></span>
<span id="cb1-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define led1 </span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">          </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// GPIO16</span></span>
<span id="cb1-3"></span>
<span id="cb1-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/* Comandos */</span></span>
<span id="cb1-5"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define luz_on </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'H'</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">       </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Luz encendida</span></span>
<span id="cb1-6"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define luz_off </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'L'</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">      </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Luz apagada</span></span>
<span id="cb1-7"></span>
<span id="cb1-8"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Comando entrado por serial</span></span>
<span id="cb1-9"></span>
<span id="cb1-10"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-11">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configuración de los puertos digitales</span></span>
<span id="cb1-12">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-13">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-14">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configuracion del puerto serial</span></span>
<span id="cb1-15">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-16"></span>
<span id="cb1-17"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-18"></span>
<span id="cb1-19"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-20">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Responde solo si hay respuesta:</span></span>
<span id="cb1-21">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-22">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Lee lo que esté presente:</span></span>
<span id="cb1-23">    cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>read<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-24"></span>
<span id="cb1-25">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Encendido o apagado de la luz segun el comando</span></span>
<span id="cb1-26">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> luz_on<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-27">      digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-28">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Encendida"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-29">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-30">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> luz_off<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-31">      digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-32">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Apagada"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-33">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-34">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-35"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>Con esto, cada vez que encendíamos la placa, podíamos escribir en la entrada serial el comando “H” para encender el led y “L” para apagarlo. Esta ocasión será diferente el modo de mandar dichos comandos.</p>
</section>
<section id="aplicación-externa" class="level2">
<h2 class="anchored" data-anchor-id="aplicación-externa">Aplicación externa</h2>
<p>Primero debemos asegurarnos de tener instalada la librería <code>pyserial</code>.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pip</span> install pyserial</span></code></pre></div></div>
<p>Creamos un archivo serialLed.py y lo guardamos en cualquier carpeta que nos parezca adecuada. Enseguida copiamos y pegamos el código siguiente. Es importante que editemos el puerto para que coincida con el que está usando nuestra placa. Otra alternativa es descargar este archivo: <a href="scripts/serialLed.py">Aplicación para Linux</a></p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> serial</span>
<span id="cb3-2"></span>
<span id="cb3-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Cambiar el puerto COMx en Windows o /dev/ttyUSBx en Linux</span></span>
<span id="cb3-4">ser <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> serial.Serial(port<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'COMx'</span>, baudrate<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span>, timeout<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>)</span>
<span id="cb3-5"></span>
<span id="cb3-6"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> menu():</span>
<span id="cb3-7">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Menu de control del led "</span> )</span>
<span id="cb3-8">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1. Encender"</span> )</span>
<span id="cb3-9">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2. Apagar"</span> )</span>
<span id="cb3-10">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"3. Salir de la aplicacion"</span> )</span>
<span id="cb3-11"></span>
<span id="cb3-12"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> luzON():</span>
<span id="cb3-13">    ser.write(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b'H'</span>)</span>
<span id="cb3-14"></span>
<span id="cb3-15"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> luzOFF():</span>
<span id="cb3-16">    ser.write(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b'L'</span>)</span>
<span id="cb3-17"></span>
<span id="cb3-18"></span>
<span id="cb3-19"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> main():</span>
<span id="cb3-20">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"CONTROL REMOTO DE LED"</span>)</span>
<span id="cb3-21">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>:</span>
<span id="cb3-22">        menu()</span>
<span id="cb3-23">        opc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">input</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Seleccione una opcion: "</span>)</span>
<span id="cb3-24">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> opc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'1'</span>:</span>
<span id="cb3-25">            <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--&gt; Encendiendo led</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-26">            luzON()</span>
<span id="cb3-27">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> opc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2'</span>:</span>
<span id="cb3-28">            <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--&gt; Apagando led</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-29">            luzOFF()</span>
<span id="cb3-30">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> opc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3'</span>:</span>
<span id="cb3-31">            ser.close()</span>
<span id="cb3-32">            <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--&gt; Hasta luego</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-33">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span></span>
<span id="cb3-34">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-35">            <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--&gt; OPCION INVALIDA</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-36"></span>
<span id="cb3-37"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">__name__</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"__main__"</span>:</span>
<span id="cb3-38">    main()</span></code></pre></div></div>
<p>Debemos tener la placa conectada a la computadora y Arduino IDE cerrado. En una terminal ejecutamos con <code>python serialLed.py</code> y debería aparecer el menú que desarrollamos. Toca probar su funcionamiento.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <category>Python</category>
  <guid>https://holztank.top/blog/entradas/comandoSerialExterno.html</guid>
  <pubDate>Mon, 01 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Ejecutar comandos por serial</title>
  <link>https://holztank.top/blog/entradas/comandosSerial.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/practica01.png" class="img-fluid figure-img"></p>
<figcaption>Controlar un led con el monitor serial</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>En anteriores ejemplos utilizamos la comunicación serial para imprimir en pantalla el estado de un elemento en particular, por medio del monitor serial. Por ejemplo, el estado de un botón o el valor de un potenciómetro. Ahora veremos cómo enviar comandos a través de la entrada del mismo monitor.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Armemos el típico circuito con un led y resistencia, pero conectemos el led al GPIO16.</p>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<p>Debemos tener en cuenta que le estaremos mandando comandos en tiempo real a la placa para que encienda y apague el led, por lo que debemos definir dichos comandos como variables en nuestro código. Pasemos a definir el código utilizado.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/* Entradas y salidas */</span></span>
<span id="cb1-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define led1 </span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">          </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// GPIO16</span></span>
<span id="cb1-3"></span>
<span id="cb1-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/* Comandos */</span></span>
<span id="cb1-5"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define luz_on </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'H'</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">       </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Luz encendida</span></span>
<span id="cb1-6"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#define luz_off </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'L'</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">      </span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Luz apagada</span></span>
<span id="cb1-7"></span>
<span id="cb1-8"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Comando entrado por serial</span></span>
<span id="cb1-9"></span>
<span id="cb1-10"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-11">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configuración de los puertos digitales</span></span>
<span id="cb1-12">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-13">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-14">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Configuracion del puerto serial</span></span>
<span id="cb1-15">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-16"></span>
<span id="cb1-17"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-18"></span>
<span id="cb1-19"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-20">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Responde solo si hay respuesta:</span></span>
<span id="cb1-21">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-22">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Lee lo que esté presente:</span></span>
<span id="cb1-23">    cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>read<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-24"></span>
<span id="cb1-25">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Encendido o apagado de la luz segun el comando</span></span>
<span id="cb1-26">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> luz_on<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-27">      digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-28">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Encendida"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-29">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-30">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>cmd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> luz_off<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-31">      digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-32">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Apagada"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-33">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-34">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-35"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>Con esto, cada vez que encendamos la placa, debemos abrir el monitor serial y escribir en su barra de entrada el comando “H” para encender el led y “L” para apagarlo.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/comandosSerial.html</guid>
  <pubDate>Mon, 01 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Usar la esp32 como servidor</title>
  <link>https://holztank.top/blog/entradas/esp32AsServer.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/ledWiFi.png" class="img-fluid figure-img"></p>
<figcaption>Controlando un led dentro de una red WiFi</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>Partiremos de la entrada anterior, con la diferencia de que prescindiremos de la placa que funge como punto de acceso, ya que nos conectaremos a una red WiFi ya existente.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Podemos partir del mismo circuito que hemos armado con un led conectado al pin GPIO16 y su respectiva resistencia conectada a tierra.</p>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<p>Ahora abrimos Arduino IDE y aunque podemos usar el mismo archivo servidorLED.ino que ya teníamos, vamos a agregarle mayor funcionalidad al sitio web que la esp32 alojará.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/*</span></span>
<span id="cb1-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  Servidor web en ESP32 conectado a una red WiFi existente.</span></span>
<span id="cb1-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  Permite controlar el LED mediante peticiones HTTP.</span></span>
<span id="cb1-4"></span>
<span id="cb1-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  Pasos:</span></span>
<span id="cb1-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  1. Conectar la ESP32 a la red WiFi domestica</span></span>
<span id="cb1-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  2. Averiguar la IP que el router le asigna a la ESP32 (por el monitor serie)</span></span>
<span id="cb1-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  3. En cualquier dispositivo de la misma red, abrir el navegador y acceder a:</span></span>
<span id="cb1-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">     - http://IP_ESP32/H  -&gt; Enciende el LED</span></span>
<span id="cb1-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">     - http://IP_ESP32/L  -&gt; Apaga el LED</span></span>
<span id="cb1-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*/</span></span>
<span id="cb1-12"></span>
<span id="cb1-13"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;WiFi.h&gt;</span></span>
<span id="cb1-14"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;WiFiClient.h&gt;</span></span>
<span id="cb1-15"></span>
<span id="cb1-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// === CONFIGURACION DE LA RED EXISTENTE ===</span></span>
<span id="cb1-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Cambiar estos valores por los de la red WiFi domestica</span></span>
<span id="cb1-18"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>ssid <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ssidGenerico"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span>      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Ejemplo: "MiFibra-2F4G"</span></span>
<span id="cb1-19"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>password <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"passGenerica"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span>   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Ejemplo: "ClaveWifi123"</span></span>
<span id="cb1-20"></span>
<span id="cb1-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Puerto del servidor web (80 es el estandar HTTP)</span></span>
<span id="cb1-22">WiFiServer server<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">80</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-23"></span>
<span id="cb1-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Declarando el led</span></span>
<span id="cb1-25"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-26"></span>
<span id="cb1-27"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-28">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-29">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-30"></span>
<span id="cb1-31">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-32">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-33">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"=== SERVIDOR ESP32 ==="</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-34"></span>
<span id="cb1-35">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Intentar conectar a la red WiFi existente</span></span>
<span id="cb1-36">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Conectando a la red WiFi: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-37">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ssid<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-38"></span>
<span id="cb1-39">  WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ssid<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> password<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-40"></span>
<span id="cb1-41">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Esperar hasta 10 segundos para conectarse</span></span>
<span id="cb1-42">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> intentos <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-43">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>status<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> WL_CONNECTED <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;&amp;</span> intentos <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-44">    delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-45">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-46">    intentos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">++;</span></span>
<span id="cb1-47">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-48"></span>
<span id="cb1-49">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>status<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> WL_CONNECTED<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-50">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-51">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Conectado a la red WiFi exitosamente"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-52">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Direccion IP asignada por el router: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-53">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>localIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-54">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puerta de enlace (router): "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-55">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>gatewayIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-56">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Intensidad de señal (RSSI): "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-57">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>RSSI<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-58">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" dBm"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-59"></span>
<span id="cb1-60">    server<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-61">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Servidor HTTP iniciado en puerto 80"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-62">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"------------------------------------"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-63">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Para controlar el LED, acceder a:"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-64">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   - http://"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-65">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>localIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-66">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/H  -&gt; ENCENDER"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-67">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   - http://"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-68">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>localIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-69">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/L  -&gt; APAGAR"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-70">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"------------------------------------"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-71">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-72">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-73">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"No se pudo conectar a la red WiFi"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-74">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Verifica que:"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-75">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   - El nombre de la red (SSID) sea correcto"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-76">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   - La contrasena sea correcta"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-77">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"   - El router este encendido y dentro del alcance"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-78">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-79"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-80"></span>
<span id="cb1-81"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-82">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si la conexion WiFi se pierde, intentar reconectar automaticamente</span></span>
<span id="cb1-83">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>status<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> WL_CONNECTED<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-84">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">static</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">unsigned</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">long</span> ultimoIntento <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-85">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> ultimoIntento <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Intentar cada 10 segundos</span></span>
<span id="cb1-86">      Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Conexion WiFi perdida. Reconectando..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-87">      WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>reconnect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-88">      ultimoIntento <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-89">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-90">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-91">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-92"></span>
<span id="cb1-93">  WiFiClient client <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> server<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-94"></span>
<span id="cb1-95">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-96">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nuevo cliente conectado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-97">    String currentLine <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-98"></span>
<span id="cb1-99">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>connected<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">())</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-100">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">())</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-101">        <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>read<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-102">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>write<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>c<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Mostrar la peticion HTTP (opcional)</span></span>
<span id="cb1-103"></span>
<span id="cb1-104">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-105">          <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentLine<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-106">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Enviar respuesta HTTP</span></span>
<span id="cb1-107">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"HTTP/1.1 200 OK"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-108">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Content-type:text/html"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-109">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-110"></span>
<span id="cb1-111">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Pagina web de control</span></span>
<span id="cb1-112">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;!DOCTYPE html&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-113">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;html&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-114">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;head&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-115">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;title&gt;Control LED ESP32&lt;/title&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-116">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;meta charset='UTF-8'&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-117">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-118">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;style&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-119">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"body { font-family: Arial; text-align: center; margin-top: 50px; background: #1a1a2e; color: white; }"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-120">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"button { padding: 15px 30px; margin: 10px; font-size: 18px; cursor: pointer; border: none; border-radius: 8px; }"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-121">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".btn-on { background-color: #4CAF50; color: white; }"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-122">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".btn-off { background-color: #f44336; color: white; }"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-123">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".status { font-size: 20px; margin: 20px; }"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-124">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/style&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-125">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/head&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-126">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;body&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-127">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;h1&gt;Control de LED ESP32&lt;/h1&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-128">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;div class='status'&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-129">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;p&gt;Conectado a la red: &lt;strong&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-130">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ssid<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-131">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/strong&gt;&lt;/p&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-132">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/div&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-133">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;button class='btn-on' onclick='location.href=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">/H</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'&gt;ENCENDER&lt;/button&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-134">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;button class='btn-off' onclick='location.href=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">/L</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'&gt;APAGAR&lt;/button&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-135">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;p&gt;&lt;small&gt;Servidor ESP32&lt;/small&gt;&lt;/p&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-136">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/body&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-137">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/html&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-138"></span>
<span id="cb1-139">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-140">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-141">          <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-142">            currentLine <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-143">          <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-144">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\r</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-145">          currentLine <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> c<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-146">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-147"></span>
<span id="cb1-148">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Procesar comandos HTTP</span></span>
<span id="cb1-149">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentLine<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>endsWith<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"GET /H"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-150">          digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-151">          Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED ENCENDIDO"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-152">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-153">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentLine<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>endsWith<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"GET /L"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-154">          digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-155">          Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED APAGADO"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-156">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-157">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-158">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-159"></span>
<span id="cb1-160">    client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>stop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-161">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cliente desconectado"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-162">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-163"></span>
<span id="cb1-164">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-165"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>El script puede bajarse desde este <a href="scripts/servidorLEDWiFi.ino">enlace</a>.</p>
<p>El monitor serial nos brindará información importante, como la dirección a la que debemos apuntar con el navegador de nuestra computadora. Si todo ha sucedido bien, aparecerá un sitio web muy básico con un par de vínculos. Al dar clic en ellos podremos alterar el estado del led.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/esp32AsServer.html</guid>
  <pubDate>Mon, 01 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Usar la esp32 como punto de acceso</title>
  <link>https://holztank.top/blog/entradas/esp32accessPoint.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/ledRemoto.png" class="img-fluid figure-img"></p>
<figcaption>Controlando un led dentro de una red WiFi</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>Es posible utilizar la esp32 como un punto de acceso (AP), así otros dispositivos pueden conectarse a ella mediante la red que crea. Veamos cómo.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Podemos partir del mismo circuito que hemos armado con un led y su respectiva resistencia. El punto importante es que utilizaremos dos placas esp32 para esta práctica. El circuito estará conectado a una de ellas, reservando la otra para crear el punto de acceso.</p>
</section>
<section id="consideraciones" class="level2">
<h2 class="anchored" data-anchor-id="consideraciones">Consideraciones</h2>
<p>Se sugiere que primero hagamos una prueba de conectividad para corroborar que todo funciona correctamente en ambas placas. En Arduino IDE, nos dirigimos a <em>Archivo -&gt; Ejemplos -&gt; WiFi -&gt; WiFiScan</em>. Esto nos abrirá un nuevo script. Lo cargamos en ambas placas y verificamos mediante el monitor serial que efectivamente hayan encontrado algunas redes inalámbricas que estén disponibles.</p>
<p>Una vez que hayamos comprobado que las placas pueden detectar redes WiFi, pasamos a la siguiente etapa. Una de ellas se mantendrá en modo <strong>Estación</strong> (STA, es decir, se conectará al AP) para convertirla en un servidor que controlará un led, mientras la otra la volveremos punto de acceso y creará una red local a la que nos conectaremos. Seguiremos utilizando nuestra computadora para enviar peticiones por medio del AP, por lo que será el cliente en esta red.</p>
</section>
<section id="código-del-ap" class="level2">
<h2 class="anchored" data-anchor-id="código-del-ap">Código del AP</h2>
<p>Seleccionamos en Arduino IDE la esp32 que usaremos como AP y cargamos el siguiente código:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;WiFi.h&gt;</span></span>
<span id="cb1-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;WiFiAP.h&gt;</span></span>
<span id="cb1-3"></span>
<span id="cb1-4"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">bool</span> led_on <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-5">String inputString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-6"></span>
<span id="cb1-7"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>ssid <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RED-AP"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-8"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>password <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PASSWD-AP"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-9"></span>
<span id="cb1-10"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-11">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>LED_BUILTIN<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-12">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-13">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-14">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Configurando punto de acceso..."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-15"></span>
<span id="cb1-16">  WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ssid<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> password<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-17"></span>
<span id="cb1-18">  IPAddress AP_IP <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-19">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Dirección IP del AP: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-20">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>AP_IP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-21">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-22">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Comandos disponibles:"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-23">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  'ip'  - Muestra la IP del AP"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-24">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  'sta' - Muestra número de clientes conectados"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-25">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  'ver' - Muestra configuración actual"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-26"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-27"></span>
<span id="cb1-28"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-29">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Verificar comandos por serial</span></span>
<span id="cb1-30">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">())</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-31">        <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> inChar <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span>Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>read<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-32">        inputString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> inChar<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-33"></span>
<span id="cb1-34">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>inChar <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-35">            inputString<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>trim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Eliminar espacios y saltos de línea</span></span>
<span id="cb1-36"></span>
<span id="cb1-37">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>inputString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ip"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-38">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IP del AP: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-39">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-40">            <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-41">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>inputString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sta"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-42">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Clientes conectados: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-43">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPgetStationNum<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-44">            <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-45">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>inputString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ver"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-46">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"=== CONFIGURACIÓN AP ==="</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-47">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SSID: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-48">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ssid<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-49">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IP: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-50">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-51">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"MAC: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-52">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPmacAddress<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-53">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Canal: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-54">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>channel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-55">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Clientes: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-56">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPgetStationNum<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">());</span></span>
<span id="cb1-57">            <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-58">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>inputString<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-59">                Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Comando no reconocido. Usar: ip, sta, ver"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-60">            <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-61"></span>
<span id="cb1-62">            inputString <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-63">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-64">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-65"></span>
<span id="cb1-66">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Mostrar cambios en conexiones</span></span>
<span id="cb1-67">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">static</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> last_stations <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-68">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> current_stations <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>softAPgetStationNum<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-69"></span>
<span id="cb1-70">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>current_stations <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> last_stations<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-71">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Conexiones: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-72">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>current_stations<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-73">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>current_stations <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-74">            Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Usar 'ip' para ver la dirección del AP"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-75">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-76">        last_stations <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> current_stations<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-77">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-78"></span>
<span id="cb1-79">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Parpadeo del LED (menos frecuente para no saturar)</span></span>
<span id="cb1-80">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">static</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">unsigned</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">long</span> last_toggle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-81">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> last_toggle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-82">        digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>LED_BUILTIN<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> led_on <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">?</span> HIGH <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-83">        led_on <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>led_on<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-84">        last_toggle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> millis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb1-85">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-86"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>O bien, se puede descargar el script desde <a href="scripts/puntoAcceso.ino">aquí</a>.</p>
<p>Una vez cargado el código, abrimos el monitor serial y confirmamos que se encuentre mostrando el número de conexiones (serán cero), los comandos disponibles y la dirección IP del punto de acceso. Además, el led integrado debe parpadear.</p>
</section>
<section id="código-del-servidor" class="level2">
<h2 class="anchored" data-anchor-id="código-del-servidor">Código del servidor</h2>
<p>Ahora abrimos otra ventana de Arduino IDE y cargamos este código en la otra esp32:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/*</span></span>
<span id="cb2-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> puntoAcceso.ino crea un punto de acceso WiFi y servidorLED.ino proporciona un servidor web en él.</span></span>
<span id="cb2-3"></span>
<span id="cb2-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  Pasos:</span></span>
<span id="cb2-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  1. Conectarse al punto de acceso "RED-AP"</span></span>
<span id="cb2-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">  2. Apuntar el navegador web a http://IP_ESP32/H para encender el LED o a http://IP_ESP32/L para apagarlo</span></span>
<span id="cb2-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">     O</span></span>
<span id="cb2-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">     Ejecutar TCP raw "GET /H" y "GET /L" en la terminal PuTTY con 192.168.4.1 como dirección IP y 80 como puerto</span></span>
<span id="cb2-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*/</span></span>
<span id="cb2-10"></span>
<span id="cb2-11"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;WiFi.h&gt;</span></span>
<span id="cb2-12"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">#include </span><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">&lt;WiFiClient.h&gt;</span></span>
<span id="cb2-13"></span>
<span id="cb2-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Establecer las credenciales deseadas.</span></span>
<span id="cb2-15"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>ssid <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RED-AP"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb2-16"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>password <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PASSWD-AP"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb2-17"></span>
<span id="cb2-18"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Establecer el puerto del servidor web a 80</span></span>
<span id="cb2-19">WiFiServer server<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">80</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-20"></span>
<span id="cb2-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Declarar pin del led</span></span>
<span id="cb2-22"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb2-23"></span>
<span id="cb2-24"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-25">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-26">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-27">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb2-28">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Conectando a "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-29"></span>
<span id="cb2-30">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Conectarse a la red WiFi con SSID y contraseña</span></span>
<span id="cb2-31">  WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ssid<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> password<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-32">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>status<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> WL_CONNECTED<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-33">    delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-34">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-35">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-36"></span>
<span id="cb2-37">  IPAddress myIP <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> WiFi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>localIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb2-38">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Conectado con la dirección IP asignada: "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-39">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>myIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-40">  server<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb2-41">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Servidor iniciado en puerto 80"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-42">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Accede desde el navegador en: http://"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-43">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>myIP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-44"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-45"></span>
<span id="cb2-46"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-47">  WiFiClient client <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> server<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span>   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Escuchar clientes entrantes</span></span>
<span id="cb2-48"></span>
<span id="cb2-49">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>                             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si se recibe un cliente,</span></span>
<span id="cb2-50">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nuevo Cliente."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span>       <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Imprimir un mensaje en el puerto serie</span></span>
<span id="cb2-51">    String currentLine <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span>                <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Crear un String para almacenar datos entrantes del cliente</span></span>
<span id="cb2-52">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>connected<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">())</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Bucle mientras el cliente esté conectado</span></span>
<span id="cb2-53">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>available<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">())</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si hay bytes para leer del cliente,</span></span>
<span id="cb2-54">        <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">char</span> c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>read<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span>             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Leer un byte</span></span>
<span id="cb2-55">        Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>write<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>c<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span>                    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Imprimirlo en el monitor serie</span></span>
<span id="cb2-56">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>                    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si el byte es un carácter de nueva línea</span></span>
<span id="cb2-57"></span>
<span id="cb2-58">          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si la línea actual está vacía, se obtuvieron dos caracteres de nueva línea consecutivos.</span></span>
<span id="cb2-59">          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Ese es el final de la petición HTTP del cliente, por lo que se envía una respuesta:</span></span>
<span id="cb2-60">          <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentLine<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-61">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Las cabeceras HTTP siempre comienzan con un código de respuesta (ej. HTTP/1.1 200 OK)</span></span>
<span id="cb2-62">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// y un tipo de contenido para que el cliente sepa lo que viene, luego una línea en blanco:</span></span>
<span id="cb2-63">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"HTTP/1.1 200 OK"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-64">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Content-type:text/html"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-65">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb2-66"></span>
<span id="cb2-67">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// El contenido de la respuesta HTTP sigue a la cabecera:</span></span>
<span id="cb2-68">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hacer &lt;a href=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">/H</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&gt;clic&lt;/a&gt; para encender el LED.&lt;br&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-69">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hacer &lt;a href=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">/L</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&gt;clic&lt;/a&gt; para apagar el LED.&lt;br&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-70"></span>
<span id="cb2-71">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// La respuesta HTTP termina con otra línea en blanco:</span></span>
<span id="cb2-72">            client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb2-73">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Salir del bucle while:</span></span>
<span id="cb2-74">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb2-75">          <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si se recibió una nueva línea, entonces limpiar currentLine:</span></span>
<span id="cb2-76">            currentLine <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb2-77">          <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-78">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\r</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Si se recibió cualquier cosa excepto un retorno de carro,</span></span>
<span id="cb2-79">          currentLine <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> c<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span>      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Añadirlo al final de currentLine</span></span>
<span id="cb2-80">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-81"></span>
<span id="cb2-82">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Verificar si la petición del cliente fue "GET /H" o "GET /L":</span></span>
<span id="cb2-83">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentLine<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>endsWith<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"GET /H"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-84">          digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span>               <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// GET /H enciende el LED</span></span>
<span id="cb2-85">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-86">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>currentLine<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>endsWith<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"GET /L"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">))</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-87">          digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span>                <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// GET /L apaga el LED</span></span>
<span id="cb2-88">        <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-89">      <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-90">    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-91">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Cerrar la conexión:</span></span>
<span id="cb2-92">    client<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>stop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">();</span></span>
<span id="cb2-93">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cliente desconectado."</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb2-94">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb2-95"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>El script puede descargarse desde este <a href="scripts/servidorLED.ino">enlace</a>.</p>
<p>El monitor serial de cada placa nos brindará información importante, como la IP del punto de acceso o la dirección a la que debemos apuntar con el navegador de nuestra computadora. Si todo ha sucedido bien, aparecerá un sitio web muy básico con un par de vínculos. Al dar clic en ellos podremos alterar el estado del led.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/esp32accessPoint.html</guid>
  <pubDate>Mon, 01 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Controlar un led con GUI</title>
  <link>https://holztank.top/blog/entradas/kivySerial.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/serialControlGUI.png" class="img-fluid figure-img"></p>
<figcaption>Controlando un led con una GUI</figcaption>
</figure>
</div>
<section id="introducción" class="level2">
<h2 class="anchored" data-anchor-id="introducción">Introducción</h2>
<p>En la anterior entrada mandamos órdenes a la ESP32 por medio de comunicación serial y una aplicación externa desarrollada en python para encender o apagar un led. En esta ocasión, dichas órdenes se emitirán por medio de otra aplicación externa que no se ejecutará desde la terminal, si no que tendrá su respectiva interfaz gráfica.</p>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Partiremos del circuito con led y resistencia que armamos justo en la entrada pasada.</p>
</section>
<section id="código-para-la-esp32" class="level2">
<h2 class="anchored" data-anchor-id="código-para-la-esp32">Código para la ESP32</h2>
<p>Exactamente el mismo que para la práctica anterior.</p>
</section>
<section id="aplicación-externa" class="level2">
<h2 class="anchored" data-anchor-id="aplicación-externa">Aplicación externa</h2>
<p>Primero debemos asegurarnos de tener instalada la librería <code>kivy</code>. Por ejemplo, para Windows se sugiere:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pip</span> install <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kivy[base]"</span> kivy_examples</span></code></pre></div></div>
<p>Y para ArchLinux:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> python-kivy</span></code></pre></div></div>
<p>Estamos partiendo del supuesto de que las anteriores prácticas han funcionado correctamente. Creamos un archivo llamado serialLedGUI.py y pegamos el siguiente código:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># -*- coding: utf-8 -*-</span></span>
<span id="cb3-2"></span>
<span id="cb3-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> sys</span>
<span id="cb3-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> glob</span>
<span id="cb3-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> serial</span>
<span id="cb3-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> serial.tools <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> list_ports</span>
<span id="cb3-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> time</span>
<span id="cb3-8"></span>
<span id="cb3-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.app <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> App</span>
<span id="cb3-10"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.boxlayout <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> BoxLayout</span>
<span id="cb3-11"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.gridlayout <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> GridLayout</span>
<span id="cb3-12"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.button <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Button</span>
<span id="cb3-13"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.label <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Label</span>
<span id="cb3-14"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.switch <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Switch</span>
<span id="cb3-15"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.spinner <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Spinner</span>
<span id="cb3-16"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.uix.widget <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Widget</span>
<span id="cb3-17"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.graphics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Color, RoundedRectangle, Ellipse, Rectangle</span>
<span id="cb3-18"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.core.text <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> LabelBase</span>
<span id="cb3-19"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.logger <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Logger</span>
<span id="cb3-20"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.clock <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Clock</span>
<span id="cb3-21"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> kivy.utils <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> get_color_from_hex</span>
<span id="cb3-22"></span>
<span id="cb3-23"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> LEDIndicator(Widget):</span>
<span id="cb3-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Indicador LED circular personalizado"""</span></span>
<span id="cb3-25">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb3-26">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs)</span>
<span id="cb3-27">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size_hint <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>)</span>
<span id="cb3-28">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>)</span>
<span id="cb3-29">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Color apagado por defecto</span></span>
<span id="cb3-30">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.bind(pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update)</span>
<span id="cb3-31">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-32"></span>
<span id="cb3-33">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _draw(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-34">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.canvas.clear()</span>
<span id="cb3-35">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.canvas:</span>
<span id="cb3-36">            Color(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color)</span>
<span id="cb3-37">            Ellipse(pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.pos, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size)</span>
<span id="cb3-38"></span>
<span id="cb3-39">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _update(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>args):</span>
<span id="cb3-40">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-41"></span>
<span id="cb3-42">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> set_color(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, color):</span>
<span id="cb3-43">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Cambiar color del LED: color en formato (r,g,b,a)"""</span></span>
<span id="cb3-44">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> color</span>
<span id="cb3-45">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-46"></span>
<span id="cb3-47">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> set_on(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, is_on):</span>
<span id="cb3-48">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Método rápido para encender/apagar"""</span></span>
<span id="cb3-49">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> is_on:</span>
<span id="cb3-50">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.set_color((<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Verde brillante</span></span>
<span id="cb3-51">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-52">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.set_color((<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Gris apagado</span></span>
<span id="cb3-53"></span>
<span id="cb3-54"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> StatusIndicator(Widget):</span>
<span id="cb3-55">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Indicador de estado de conexión circular"""</span></span>
<span id="cb3-56">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb3-57">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs)</span>
<span id="cb3-58">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size_hint <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>)</span>
<span id="cb3-59">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>)</span>
<span id="cb3-60">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rojo apagado</span></span>
<span id="cb3-61">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.bind(pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update)</span>
<span id="cb3-62">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-63"></span>
<span id="cb3-64">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _draw(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-65">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.canvas.clear()</span>
<span id="cb3-66">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.canvas:</span>
<span id="cb3-67">            Color(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color)</span>
<span id="cb3-68">            Ellipse(pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.pos, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size)</span>
<span id="cb3-69"></span>
<span id="cb3-70">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _update(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>args):</span>
<span id="cb3-71">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-72"></span>
<span id="cb3-73">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> set_connected(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, connected):</span>
<span id="cb3-74">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> connected:</span>
<span id="cb3-75">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Verde</span></span>
<span id="cb3-76">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-77">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rojo</span></span>
<span id="cb3-78">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-79"></span>
<span id="cb3-80">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> set_error(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-81">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Naranja</span></span>
<span id="cb3-82">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._draw()</span>
<span id="cb3-83"></span>
<span id="cb3-84"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> StyledButton(Button):</span>
<span id="cb3-85">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Botón personalizado con estilo consistente"""</span></span>
<span id="cb3-86">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb3-87">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs)</span>
<span id="cb3-88">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_normal <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span></span>
<span id="cb3-89">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.45</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Azul oscuro</span></span>
<span id="cb3-90">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-91">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.font_size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'14sp'</span></span>
<span id="cb3-92">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size_hint_y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span></span>
<span id="cb3-93">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.height <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'40dp'</span></span>
<span id="cb3-94">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.bold <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span>
<span id="cb3-95"></span>
<span id="cb3-96">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> on_press(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-97">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.35</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.55</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-98">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().on_press()</span>
<span id="cb3-99"></span>
<span id="cb3-100">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> on_release(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-101">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.45</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-102">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().on_release()</span>
<span id="cb3-103"></span>
<span id="cb3-104"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> DisconnectButton(StyledButton):</span>
<span id="cb3-105">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Botón de desconectar con color rojo"""</span></span>
<span id="cb3-106">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb3-107">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs)</span>
<span id="cb3-108">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-109"></span>
<span id="cb3-110">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> on_release(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-111">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-112">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().on_release()</span>
<span id="cb3-113"></span>
<span id="cb3-114"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> StyledSpinner(Spinner):</span>
<span id="cb3-115">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Spinner personalizado"""</span></span>
<span id="cb3-116">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb3-117">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">super</span>().<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs)</span>
<span id="cb3-118">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_normal <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span></span>
<span id="cb3-119">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-120">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-121">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.font_size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'12sp'</span></span>
<span id="cb3-122">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.size_hint_y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span></span>
<span id="cb3-123">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.height <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'35dp'</span></span>
<span id="cb3-124"></span>
<span id="cb3-125"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> MainApp(App):</span>
<span id="cb3-126"></span>
<span id="cb3-127">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> on_stop(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-128">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Cerrar la aplicación correctamente"""</span></span>
<span id="cb3-129">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">hasattr</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ser'</span>) <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.is_open:</span>
<span id="cb3-130">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-131">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.lightOFF()</span>
<span id="cb3-132">                time.sleep(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb3-133">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.close()</span>
<span id="cb3-134">                <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puerto cerrado correctamente"</span>)</span>
<span id="cb3-135">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span>:</span>
<span id="cb3-136">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">pass</span></span>
<span id="cb3-137">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cerrando la aplicación"</span>)</span>
<span id="cb3-138"></span>
<span id="cb3-139">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> build(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-140">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb3-141">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span></span>
<span id="cb3-142"></span>
<span id="cb3-143">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Obtener puertos disponibles</span></span>
<span id="cb3-144">        available_ports <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.listPorts()</span>
<span id="cb3-145">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> available_ports:</span>
<span id="cb3-146">            Logger.warning(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"No se encontraron puertos seriales"</span>)</span>
<span id="cb3-147">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ninguno"</span></span>
<span id="cb3-148">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-149">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> available_ports[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]</span>
<span id="cb3-150"></span>
<span id="cb3-151">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Contenedor principal con padding y espaciado - Fondo oscuro</span></span>
<span id="cb3-152">        main_layout <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(</span>
<span id="cb3-153">            orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vertical"</span>,</span>
<span id="cb3-154">            padding<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>,</span>
<span id="cb3-155">            spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>,</span>
<span id="cb3-156">            size_hint<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-157">        )</span>
<span id="cb3-158"></span>
<span id="cb3-159">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fondo oscuro con borde redondeado</span></span>
<span id="cb3-160">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> main_layout.canvas.before:</span>
<span id="cb3-161">            Color(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.08</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.08</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Gris muy oscuro azulado</span></span>
<span id="cb3-162">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.rect <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> RoundedRectangle(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>main_layout.size, pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>main_layout.pos, radius<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>])</span>
<span id="cb3-163">        main_layout.bind(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update_rect, pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update_rect)</span>
<span id="cb3-164"></span>
<span id="cb3-165">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ===== TÍTULO =====</span></span>
<span id="cb3-166">        title_label <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Label(</span>
<span id="cb3-167">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[b][size=24]Control de LED[/size][/b]'</span>,</span>
<span id="cb3-168">            markup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,</span>
<span id="cb3-169">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-170">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'50dp'</span>,</span>
<span id="cb3-171">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-172">        )</span>
<span id="cb3-173">        main_layout.add_widget(title_label)</span>
<span id="cb3-174"></span>
<span id="cb3-175">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ===== PANEL DEL LED =====</span></span>
<span id="cb3-176">        led_card <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(</span>
<span id="cb3-177">            orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vertical"</span>,</span>
<span id="cb3-178">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-179">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'150dp'</span>,</span>
<span id="cb3-180">            padding<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>,</span>
<span id="cb3-181">            spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span></span>
<span id="cb3-182">        )</span>
<span id="cb3-183"></span>
<span id="cb3-184">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fondo de la tarjeta (gris oscuro)</span></span>
<span id="cb3-185">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> led_card.canvas.before:</span>
<span id="cb3-186">            Color(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.12</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.12</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-187">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.card_rect <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> RoundedRectangle(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>led_card.size, pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>led_card.pos, radius<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>])</span>
<span id="cb3-188">        led_card.bind(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update_card_rect, pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update_card_rect)</span>
<span id="cb3-189"></span>
<span id="cb3-190">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Subtítulo</span></span>
<span id="cb3-191">        led_subtitle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Label(</span>
<span id="cb3-192">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[b]Estado del LED[/b]'</span>,</span>
<span id="cb3-193">            markup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,</span>
<span id="cb3-194">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-195">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'30dp'</span>,</span>
<span id="cb3-196">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-197">            font_size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'14sp'</span>,</span>
<span id="cb3-198">            halign<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'left'</span></span>
<span id="cb3-199">        )</span>
<span id="cb3-200">        led_subtitle.bind(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>led_subtitle.setter(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'text_size'</span>))</span>
<span id="cb3-201">        led_card.add_widget(led_subtitle)</span>
<span id="cb3-202"></span>
<span id="cb3-203">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Controles del LED</span></span>
<span id="cb3-204">        led_controls <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"horizontal"</span>, spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'80dp'</span>)</span>
<span id="cb3-205"></span>
<span id="cb3-206">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Switch</span></span>
<span id="cb3-207">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Switch(active<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>, size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>)</span>
<span id="cb3-208">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.disabled <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span>
<span id="cb3-209">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.bind(active<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.change_light)</span>
<span id="cb3-210">        led_controls.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch)</span>
<span id="cb3-211"></span>
<span id="cb3-212">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Indicador LED visual (widget circular real)</span></span>
<span id="cb3-213">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.led_indicator <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> LEDIndicator()</span>
<span id="cb3-214">        led_controls.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.led_indicator)</span>
<span id="cb3-215"></span>
<span id="cb3-216">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Texto de estado</span></span>
<span id="cb3-217">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Label(</span>
<span id="cb3-218">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'APAGADO'</span>,</span>
<span id="cb3-219">            markup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,</span>
<span id="cb3-220">            font_size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'18sp'</span>,</span>
<span id="cb3-221">            bold<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,</span>
<span id="cb3-222">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-223">            size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span></span>
<span id="cb3-224">        )</span>
<span id="cb3-225">        led_controls.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status)</span>
<span id="cb3-226"></span>
<span id="cb3-227">        led_card.add_widget(led_controls)</span>
<span id="cb3-228">        main_layout.add_widget(led_card)</span>
<span id="cb3-229"></span>
<span id="cb3-230">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ===== PANEL DE CONFIGURACIÓN =====</span></span>
<span id="cb3-231">        config_card <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(</span>
<span id="cb3-232">            orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vertical"</span>,</span>
<span id="cb3-233">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-234">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'200dp'</span>,</span>
<span id="cb3-235">            padding<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>,</span>
<span id="cb3-236">            spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span></span>
<span id="cb3-237">        )</span>
<span id="cb3-238"></span>
<span id="cb3-239">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> config_card.canvas.before:</span>
<span id="cb3-240">            Color(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.12</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.12</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-241">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.config_rect <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> RoundedRectangle(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>config_card.size, pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>config_card.pos, radius<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>])</span>
<span id="cb3-242">        config_card.bind(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update_config_rect, pos<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._update_config_rect)</span>
<span id="cb3-243"></span>
<span id="cb3-244">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Subtítulo</span></span>
<span id="cb3-245">        config_title <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Label(</span>
<span id="cb3-246">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[b]Configuración Serial[/b]'</span>,</span>
<span id="cb3-247">            markup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,</span>
<span id="cb3-248">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-249">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'30dp'</span>,</span>
<span id="cb3-250">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-251">            font_size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'14sp'</span>,</span>
<span id="cb3-252">            halign<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'left'</span></span>
<span id="cb3-253">        )</span>
<span id="cb3-254">        config_title.bind(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>config_title.setter(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'text_size'</span>))</span>
<span id="cb3-255">        config_card.add_widget(config_title)</span>
<span id="cb3-256"></span>
<span id="cb3-257">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Selector de puerto</span></span>
<span id="cb3-258">        port_layout <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"horizontal"</span>, spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'40dp'</span>)</span>
<span id="cb3-259">        port_layout.add_widget(Label(</span>
<span id="cb3-260">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Puerto:'</span>,</span>
<span id="cb3-261">            size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>,</span>
<span id="cb3-262">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-263">            font_size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'13sp'</span>,</span>
<span id="cb3-264">            halign<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'right'</span></span>
<span id="cb3-265">        ))</span>
<span id="cb3-266"></span>
<span id="cb3-267">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> StyledSpinner(</span>
<span id="cb3-268">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ninguno"</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sin puertos"</span>,</span>
<span id="cb3-269">            values<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>available_ports <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> available_ports <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sin puertos"</span>],</span>
<span id="cb3-270">            size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span></span>
<span id="cb3-271">        )</span>
<span id="cb3-272">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner.bind(text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.on_port_selected)</span>
<span id="cb3-273">        port_layout.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner)</span>
<span id="cb3-274"></span>
<span id="cb3-275">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Botón refrescar</span></span>
<span id="cb3-276">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.refresh_button <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Button(</span>
<span id="cb3-277">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'⟳'</span>,</span>
<span id="cb3-278">            font_size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'18sp'</span>,</span>
<span id="cb3-279">            size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>,</span>
<span id="cb3-280">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-281">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'35dp'</span>,</span>
<span id="cb3-282">            background_normal<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span>,</span>
<span id="cb3-283">            background_color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.35</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-284">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-285">        )</span>
<span id="cb3-286">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.refresh_button.bind(on_press<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.refresh_ports)</span>
<span id="cb3-287">        port_layout.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.refresh_button)</span>
<span id="cb3-288"></span>
<span id="cb3-289">        port_layout.add_widget(Label(size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>))</span>
<span id="cb3-290">        config_card.add_widget(port_layout)</span>
<span id="cb3-291"></span>
<span id="cb3-292">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Botones de conexión</span></span>
<span id="cb3-293">        connection_layout <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"horizontal"</span>, spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'45dp'</span>, padding<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb3-294"></span>
<span id="cb3-295">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> StyledButton(text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"CONECTAR"</span>)</span>
<span id="cb3-296">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button.bind(on_press<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.<span class="ex" style="color: null;
background-color: null;
font-style: inherit;">connect</span>)</span>
<span id="cb3-297">        connection_layout.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button)</span>
<span id="cb3-298"></span>
<span id="cb3-299">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Estado de conexión con indicador visual</span></span>
<span id="cb3-300">        status_layout <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> BoxLayout(orientation<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"horizontal"</span>, spacing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb3-301"></span>
<span id="cb3-302">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.status_indicator <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> StatusIndicator()</span>
<span id="cb3-303">        status_layout.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.status_indicator)</span>
<span id="cb3-304"></span>
<span id="cb3-305">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Label(</span>
<span id="cb3-306">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Desconectado'</span>,</span>
<span id="cb3-307">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-308">            font_size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'13sp'</span>,</span>
<span id="cb3-309">            size_hint_x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.85</span>,</span>
<span id="cb3-310">            halign<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'left'</span></span>
<span id="cb3-311">        )</span>
<span id="cb3-312">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.bind(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.setter(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'text_size'</span>))</span>
<span id="cb3-313">        status_layout.add_widget(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status)</span>
<span id="cb3-314"></span>
<span id="cb3-315">        connection_layout.add_widget(status_layout)</span>
<span id="cb3-316">        config_card.add_widget(connection_layout)</span>
<span id="cb3-317"></span>
<span id="cb3-318">        main_layout.add_widget(config_card)</span>
<span id="cb3-319"></span>
<span id="cb3-320">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Barra de información inferior</span></span>
<span id="cb3-321">        info_bar <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Label(</span>
<span id="cb3-322">            text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[size=10]✓ Listo para conectar[/size]'</span>,</span>
<span id="cb3-323">            markup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,</span>
<span id="cb3-324">            size_hint_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,</span>
<span id="cb3-325">            height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'25dp'</span>,</span>
<span id="cb3-326">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-327">        )</span>
<span id="cb3-328">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> info_bar</span>
<span id="cb3-329">        main_layout.add_widget(info_bar)</span>
<span id="cb3-330"></span>
<span id="cb3-331">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> main_layout</span>
<span id="cb3-332"></span>
<span id="cb3-333">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _update_rect(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, instance, value):</span>
<span id="cb3-334">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.rect.size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> instance.size</span>
<span id="cb3-335">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.rect.pos <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> instance.pos</span>
<span id="cb3-336"></span>
<span id="cb3-337">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _update_card_rect(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, instance, value):</span>
<span id="cb3-338">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.card_rect.size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> instance.size</span>
<span id="cb3-339">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.card_rect.pos <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> instance.pos</span>
<span id="cb3-340"></span>
<span id="cb3-341">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _update_config_rect(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, instance, value):</span>
<span id="cb3-342">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.config_rect.size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> instance.size</span>
<span id="cb3-343">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.config_rect.pos <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> instance.pos</span>
<span id="cb3-344"></span>
<span id="cb3-345">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> on_port_selected(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, spinner, text):</span>
<span id="cb3-346">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status:</span>
<span id="cb3-347">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> text</span>
<span id="cb3-348">            Logger.debug(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Puerto seleccionado: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>PORT<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-349"></span>
<span id="cb3-350">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> refresh_ports(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, instance):</span>
<span id="cb3-351">        available_ports <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.listPorts()</span>
<span id="cb3-352">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> available_ports:</span>
<span id="cb3-353">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner.values <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> available_ports</span>
<span id="cb3-354">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> available_ports:</span>
<span id="cb3-355">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> available_ports[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]</span>
<span id="cb3-356">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT</span>
<span id="cb3-357">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Animación de refresco</span></span>
<span id="cb3-358">            instance.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'✓'</span></span>
<span id="cb3-359">            Clock.schedule_once(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> dt: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">setattr</span>(instance, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'text'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'⟳'</span>), <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb3-360">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[size=10]✓ Puertos actualizados[/size]'</span></span>
<span id="cb3-361">            Clock.schedule_once(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> dt: <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._reset_info(), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb3-362">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-363">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner.values <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sin puertos"</span>]</span>
<span id="cb3-364">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.port_spinner.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sin puertos"</span></span>
<span id="cb3-365">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[size=10]⚠ No se encontraron puertos[/size]'</span></span>
<span id="cb3-366"></span>
<span id="cb3-367">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _reset_info(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-368">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status:</span>
<span id="cb3-369">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[size=10]✓ Listo para conectar[/size]'</span></span>
<span id="cb3-370">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-371">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'[size=10]✓ Conectado a </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>PORT<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">[/size]'</span></span>
<span id="cb3-372"></span>
<span id="cb3-373">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> change_light(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, instance, value):</span>
<span id="cb3-374">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status:</span>
<span id="cb3-375">            Logger.warning(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"No conectado al puerto serial"</span>)</span>
<span id="cb3-376">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.active <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb3-377">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span></span>
<span id="cb3-378"></span>
<span id="cb3-379">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-380">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> value:</span>
<span id="cb3-381">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ENCENDIDO'</span></span>
<span id="cb3-382">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-383">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.led_indicator.set_on(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb3-384">                Logger.debug(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED On"</span>)</span>
<span id="cb3-385">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.lightON()</span>
<span id="cb3-386">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-387">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'APAGADO'</span></span>
<span id="cb3-388">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-389">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.led_indicator.set_on(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb3-390">                Logger.debug(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LED Off"</span>)</span>
<span id="cb3-391">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.lightOFF()</span>
<span id="cb3-392">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span> <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> e:</span>
<span id="cb3-393">            Logger.error(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Error al cambiar LED: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-394">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.active <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> value</span>
<span id="cb3-395"></span>
<span id="cb3-396">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">connect</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, instance):</span>
<span id="cb3-397">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status:</span>
<span id="cb3-398">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-399">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ninguno"</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sin puertos"</span>:</span>
<span id="cb3-400">                    Logger.error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"No hay puerto disponible"</span>)</span>
<span id="cb3-401">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[size=10]✗ Error: No hay puerto disponible[/size]'</span></span>
<span id="cb3-402">                    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span></span>
<span id="cb3-403"></span>
<span id="cb3-404">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> serial.Serial(</span>
<span id="cb3-405">                    port<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.PORT,</span>
<span id="cb3-406">                    baudrate<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span>,</span>
<span id="cb3-407">                    timeout<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,</span>
<span id="cb3-408">                    write_timeout<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span></span>
<span id="cb3-409">                )</span>
<span id="cb3-410">                time.sleep(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb3-411"></span>
<span id="cb3-412">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DESCONECTAR"</span></span>
<span id="cb3-413">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-414">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Conectado'</span></span>
<span id="cb3-415">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-416">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.status_indicator.set_connected(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb3-417">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.disabled <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb3-418">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span>
<span id="cb3-419">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'[size=10]✓ Conectado a </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>PORT<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">[/size]'</span></span>
<span id="cb3-420">                Logger.debug(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Conectado a </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>PORT<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-421"></span>
<span id="cb3-422">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> serial.SerialException <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> e:</span>
<span id="cb3-423">                Logger.error(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Error de conexión: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-424">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Error'</span></span>
<span id="cb3-425">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-426">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.status_indicator.set_error()</span>
<span id="cb3-427">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'[size=10]✗ Error: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">str</span>(e)[:<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>]<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">[/size]'</span></span>
<span id="cb3-428"></span>
<span id="cb3-429">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb3-430">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-431">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.is_open:</span>
<span id="cb3-432">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.lightOFF()</span>
<span id="cb3-433">                    time.sleep(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb3-434">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.close()</span>
<span id="cb3-435"></span>
<span id="cb3-436">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"CONECTAR"</span></span>
<span id="cb3-437">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connect_button.background_color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.45</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-438">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Desconectado'</span></span>
<span id="cb3-439">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.connection_status.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-440">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.status_indicator.set_connected(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb3-441">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.disabled <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span>
<span id="cb3-442">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_switch.active <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb3-443">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'APAGADO'</span></span>
<span id="cb3-444">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.light_status.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-445">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.led_indicator.set_on(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb3-446">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.conect_status <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb3-447">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.info_label.text <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'[size=10]✓ Desconectado[/size]'</span></span>
<span id="cb3-448">                Logger.debug(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Desconectado"</span>)</span>
<span id="cb3-449"></span>
<span id="cb3-450">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span> <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> e:</span>
<span id="cb3-451">                Logger.error(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Error al desconectar: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-452"></span>
<span id="cb3-453">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> listPorts(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-454">        ports <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> []</span>
<span id="cb3-455">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-456">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> port <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> list_ports.comports():</span>
<span id="cb3-457">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ttyUSB'</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> port.device <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ttyACM'</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> port.device:</span>
<span id="cb3-458">                    ports.append(port.device)</span>
<span id="cb3-459">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'COM'</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> port.device:</span>
<span id="cb3-460">                    ports.append(port.device)</span>
<span id="cb3-461">            Logger.debug(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Puertos encontrados: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>ports<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-462">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span> <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> e:</span>
<span id="cb3-463">            Logger.error(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Error al listar puertos: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-464">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> ports</span>
<span id="cb3-465"></span>
<span id="cb3-466">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> lightON(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-467">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.is_open:</span>
<span id="cb3-468">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-469">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.write(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b'H'</span>)</span>
<span id="cb3-470">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.flush()</span>
<span id="cb3-471">                Logger.debug(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Comando H enviado"</span>)</span>
<span id="cb3-472">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span> <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> e:</span>
<span id="cb3-473">                Logger.error(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Error al enviar H: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-474"></span>
<span id="cb3-475">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> lightOFF(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb3-476">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.is_open:</span>
<span id="cb3-477">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb3-478">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.write(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b'L'</span>)</span>
<span id="cb3-479">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ser.flush()</span>
<span id="cb3-480">                Logger.debug(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Comando L enviado"</span>)</span>
<span id="cb3-481">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span> <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> e:</span>
<span id="cb3-482">                Logger.error(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"Error al enviar L: </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span>
<span id="cb3-483"></span>
<span id="cb3-484"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">__name__</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"__main__"</span>:</span>
<span id="cb3-485">    app <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MainApp()</span>
<span id="cb3-486">    app.run()</span></code></pre></div></div>
<p>Igual el código fuente se puede descargar de <a href="scripts/serialLedGUI.py">aquí</a>.</p>
<p>Debemos asegurarnos de conectar primero el puerto. Si esto se logra, deberíamos poder encender y apagar el led por medio de los botones.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <category>Python</category>
  <guid>https://holztank.top/blog/entradas/kivySerial.html</guid>
  <pubDate>Mon, 01 Jun 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Detalles de hacerle al webmaster</title>
  <link>https://holztank.top/blog/entradas/lftp.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/linuxMaster.jpg" class="img-fluid figure-img"></p>
<figcaption>Hey, yo no estoy a la altura</figcaption>
</figure>
</div>
<section id="no-todo-sale-bien" class="level2">
<h2 class="anchored" data-anchor-id="no-todo-sale-bien">No todo sale bien</h2>
<p>Pues resulta que después de una actualización, <code>FileZilla</code> se negó rotundamente a conectarse al servidor. Desconozco si la actualización que rompió mi flujo fue de mi sistema, de FileZilla o del servidor pero el punto es que ya no pude actualizar el sitio.</p>
<p>Después de algunas búsquedas (y estar peleando con la IA del proveedor de hosting) y la ayuda de otra IA (DeepSeek) parece que he ido resolviendo el asunto. Documento el proceso aquí, para no andarlo buscando de nuevo.</p>
<p>Toca instalar <code>lftp</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> lftp</span></code></pre></div></div>
<p>Luego me conecto al servidor usando este nuevo programa:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">lftp</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-u</span> USUARIO,CONTRASENA ftp://holztank.top:21</span></code></pre></div></div>
<p>Entonces <code>zsh</code>, que es mi emulador de terminal me manda al diablo y me dice que no encuentra coincidencias. Vaya. Está identificando el <code>*</code> como una extensión. Toca entrecomillar el usuario y contraseña:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode zsh code-with-copy"><code class="sourceCode zsh"><span id="cb3-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">lftp</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-u</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'USUARIO,CONTRASENA'</span> ftp://holztank.top:21</span></code></pre></div></div>
<p>Y con eso devuelve el prompt <code>lftp usuario@holztank.top:~&gt;</code>, lo que indica que todo va bien. El siguiente paso es ir introduciendo las siguientes líneas, una por una:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode zsh code-with-copy"><code class="sourceCode zsh"><span id="cb4-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span> ftp:ssl-allow true</span>
<span id="cb4-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span> ftp:ssl-force true</span>
<span id="cb4-3"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span> ftp:ssl-protect-data true</span>
<span id="cb4-4"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span> ssl:verify-certificate false</span>
<span id="cb4-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ls</span></span></code></pre></div></div>
<p>Cabe mencionar que la última línea tarda demasiado, así que solo la usaré cuando realmente necesite saber qué hay dentro de la carpeta en cuestión.</p>
<p>Lo ideal ahora es cerrar <code>lftp</code> y ejecutarlo dentro del directorio raíz de mi proyecto (lo tengo hecho en <code>Quarto</code>), para de esa manera repetir todo lo anterior (menos el <code>ls</code>) y ejecutar lo siguiente:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode zsh code-with-copy"><code class="sourceCode zsh"><span id="cb5-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">open</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-u</span> USUARIO,CONTRASENA ftp://holztank.top:21</span></code></pre></div></div>
<p>El comando anterior permite abrir el puerto, básicamente. Para ya “subir” mis archivos al servidor, ejecuto</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode zsh code-with-copy"><code class="sourceCode zsh"><span id="cb6-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">mirror</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-R</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--delete</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--verbose</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--only-newer</span> _site/ public_html/</span></code></pre></div></div>
<p>Este comando borra archivos que no estén en la carpeta origen y copia solamente los que hayan sido modificados. Cabe decir que Quarto genera los sitios web en la carpeta <code>_site</code> y que mi servidor los debe alojar en la carpeta <code>public_html</code>. Es probable que se tarde también lo suyo.</p>
<p>Había olvidado un punto: que para salir de <code>lftp</code> hay que ejecutar un simple <code>quit</code>.</p>
<p>Y si todo ha salido bien, el sitio debe estar actualizado y por eso lo podrá estar viendo el <em>yo</em> del futuro o tú lo estarás leyendo.</p>
<p>EDIT: Pues resulta que FileZilla sí funciona, pero como mi proveedor de hosting actualizó un no-sé-qué sobre asuntos de privacidad, pues el certificado SSL ya no coincidía. Cosas de la vida, supongo. Tenía que permitir al programa que pudiera esperar hasta 300 segundos para que el diálogo que me tenía que preguntar si aceptaba el certificado apareciera. Y pues eso, apareció, lo acepté y ya funciona la transferencia por FileZilla.</p>
<p>EDIT 2: Ahora la transferencia es lentísima. Más de 30 segundos para volver a conectarse al servidor. Esto no era así hace un par de semanas.</p>
<p>EDIT 3: Vuelvo a <code>lftp</code>, pero ahora con el uso de scripts que incluyan notificaciones de escritorio (en KDE Plasma) y quizá un arreglo a lo lento que se han vuelto las transferencias. Veremos qué tal.</p>
<p>Repito, cosas de la vida.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Linux</category>
  <category>Manjaro</category>
  <guid>https://holztank.top/blog/entradas/lftp.html</guid>
  <pubDate>Mon, 18 May 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Lectura del estado de un botón</title>
  <link>https://holztank.top/blog/entradas/boton.html</link>
  <description><![CDATA[ 





<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Estaremos utilizando un botón <em>switch</em> y leeremos su estado, imprimiéndolo mediante el monitor serial. Haremos uso de la propiedad <em>pull up</em> de los pines de la ESP32 para así prescindir de una resistencia en el circuito.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/boton.png" class="img-fluid figure-img"></p>
<figcaption>Leyendo el estado de un botón</figcaption>
</figure>
</div>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> boton <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-2"></span>
<span id="cb1-3"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-4">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-5">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>boton<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> INPUT_PULLUP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-6"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-7"></span>
<span id="cb1-8"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-9">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> estado_boton <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> digitalRead<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>boton<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-10">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>estado_boton<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-11"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/boton.html</guid>
  <pubDate>Thu, 07 May 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Encendiendo un led gradualmente (con un pot)</title>
  <link>https://holztank.top/blog/entradas/ledPot.html</link>
  <description><![CDATA[ 





<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Controlaremos el brillo del led tras manipular el potenciómetro.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/ledPot.png" class="img-fluid figure-img"></p>
<figcaption>Encendiendo gradualmente un led con un pot</figcaption>
</figure>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-2"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> pot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-3"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> valorpot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-4"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> valorled <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-5"></span>
<span id="cb1-6"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span></span>
<span id="cb1-7"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-8">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9600</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-9"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-10"></span>
<span id="cb1-11"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span></span>
<span id="cb1-12"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-13">  valorpot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> analogRead<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>pot<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-14">  valorled <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> map<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>valorpot<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4095</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">255</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-15">  analogWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> valorled<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-16">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lectura del pot = "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-17">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>valorpot<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-18">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>print<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\t</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> Brillo del led = "</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-19">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>valorled<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-20">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-21"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/ledPot.html</guid>
  <pubDate>Thu, 07 May 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Lectura de valores de un potenciómetro</title>
  <link>https://holztank.top/blog/entradas/pot.html</link>
  <description><![CDATA[ 





<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Realizaremos la lectura de los valores de un potenciómetro. Es importante saber que este es un dispositivo analógico, por lo que la lectura sí permite valores graduales (no solamente unos y ceros).</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/pot.png" class="img-fluid figure-img"></p>
<figcaption>Leyendo los valores del pot</figcaption>
</figure>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Se ejecuta cada vez que el Arduino se inicia</span></span>
<span id="cb1-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-3">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">34</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> INPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-4">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Inicia comunicación serial</span></span>
<span id="cb1-5">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-6"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//------------------------------------</span></span>
<span id="cb1-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Funcion cíclica</span></span>
<span id="cb1-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//------------------------------------</span></span>
<span id="cb1-10"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Esta funcion se mantiene ejecutando</span></span>
<span id="cb1-11"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-12"> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// cuando este energizado el Arduino</span></span>
<span id="cb1-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Guardar en una variable entera el valor del potenciómetro 0 a 1023</span></span>
<span id="cb1-14"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> valor <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> analogRead<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">34</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Imprime en la consola serial el valor de la variable</span></span>
<span id="cb1-16">Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>valor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Retardo para la visualización de datos en la consola</span></span>
<span id="cb1-18">delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-19"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/pot.html</guid>
  <pubDate>Thu, 07 May 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Encendiendo un led con un botón</title>
  <link>https://holztank.top/blog/entradas/ledBoton.html</link>
  <description><![CDATA[ 





<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Combinaremos lo aprendido con el led y el botón para controlar al primero con el segundo.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/ledBoton.png" class="img-fluid figure-img"></p>
<figcaption>Encendiendo un led presionando un botón</figcaption>
</figure>
</div>
</section>
<section id="código" class="level2">
<h2 class="anchored" data-anchor-id="código">Código</h2>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> boton <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-3"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> estado_boton <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-4"></span>
<span id="cb1-5"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-6">  Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>begin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115200</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-7">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>boton<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> INPUT_PULLUP<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-8">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-9"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-10"></span>
<span id="cb1-11"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-12">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> estado_boton <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> digitalRead<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>boton<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-13">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>estado_boton <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">)</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-14">    Serial<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>println<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>estado_boton<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-15">    digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-16">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-17">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-18">    digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span></span>
<span id="cb1-19">  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-20"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <guid>https://holztank.top/blog/entradas/ledBoton.html</guid>
  <pubDate>Wed, 06 May 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>TexLive</title>
  <link>https://holztank.top/blog/entradas/texlive.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/latexHMundo.png" class="img-fluid figure-img"></p>
<figcaption>Hola, mundo en LaTex</figcaption>
</figure>
</div>
<section id="instalando-texlive" class="level2">
<h2 class="anchored" data-anchor-id="instalando-texlive">Instalando texlive</h2>
<p>Si estamos en Linux, especialmente ArchLinux o sus derivadas, la instalación de un entorno de “desarrollo” para <em>LaTex</em> puede ser un tanto más sencilla que en otros sistemas operativos. Sin embargo, también depende, aunque en menor medida, del entorno de escritorio que estemos utilizando. En mi caso, en el día a día uso <em>KDE Plasma</em>, por lo que la elección para editar documentos es <em>Kile</em>. Pero toca instalar antes una distribución <em>LaTex</em>, que será <em>texlive</em>.</p>
<p>Hay que instalar</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> texlive-latex texlive-latexrecommended</span></code></pre></div></div>
<p>Esto nos dejará tener un sistema básico y funcional. Pero como hablamos y escribimos en español, toca incluir un paquete más:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> texlive-langspanish</span></code></pre></div></div>
<p>Ahora sí, nos ponemos a instalar <em>Kile</em>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> kile</span></code></pre></div></div>
<p>Ejecutamos Kile y lo primero que nos mostrará será su “Verificador del sistema”, el cual es un cuadro de diálogo que revisará si podemos renderizar documentos en tiempo real en nuestro equipo. Presionamos <em>Siguiente</em> y esperamos a que escanee nuestro equipo. Si seguimos los pasos anteriores, debería pasar todas las pruebas. Dejamos seleccionadas las tres opciones que nos muestra y clicamos en <em>Aceptar</em>.</p>
</section>
<section id="probando-la-instalación" class="level2">
<h2 class="anchored" data-anchor-id="probando-la-instalación">Probando la instalación</h2>
<p>Nos vamos al menú <em>Archivo -&gt; Nuevo</em> o presionamos <span class="visually-hidden">Ctrl+N</span> y clicamos en <em>Archivo vacío</em> y en <em>Aceptar</em>. Para poder ver la vista en vivo, debemos guardar el archivo en <em>Archivo -&gt; Guardar</em> o presionamos <span class="visually-hidden">Ctrl+S</span>. Kile nos indicará que hay algo mal, pero vamos a ignorarlo. Marca error al renderizar porque no hay algo que renderice. Lo guardamos donde deseemos con el nombre <code>prueba</code> (el programa agregará la extensión <code>.tex</code>) y comenzamos a escribir lo siguiente:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode latex code-with-copy"><code class="sourceCode latex"><span id="cb4-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">\documentclass</span>{<span class="ex" style="color: null;
background-color: null;
font-style: inherit;">article</span>}</span>
<span id="cb4-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">\begin</span>{<span class="ex" style="color: null;
background-color: null;
font-style: inherit;">document</span>}</span>
<span id="cb4-3"> ¡Hola, mundo!</span>
<span id="cb4-4"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">\end</span>{<span class="ex" style="color: null;
background-color: null;
font-style: inherit;">document</span>}</span></code></pre></div></div>
<p>Le damos en <em>Guardar</em> y a la derecha debe verse nuestro documento en su “forma final”. Si queremos generar el documento PDF, nos vamos a la pestaña <em>Konsole</em> que está abajo a la izquierda y escribimos</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb5-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pdflatex</span> prueba</span></code></pre></div></div>
<p>Esto debe hacer que aparezca el archivo en el mismo sitio donde guardamos <code>prueba.tex</code>. Y ya está, hemos creado nuestro primer documento <code>LaTex</code>.</p>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Ofimática</category>
  <category>Linux</category>
  <category>LaTex</category>
  <guid>https://holztank.top/blog/entradas/texlive.html</guid>
  <pubDate>Mon, 04 May 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>Encendiendo un led</title>
  <link>https://holztank.top/blog/entradas/encenderLED.html</link>
  <description><![CDATA[ 





<section id="lo-necesario" class="level2">
<h2 class="anchored" data-anchor-id="lo-necesario">Lo necesario</h2>
<ul>
<li>Tablilla de prototipado</li>
<li>ESP32 / cable USB</li>
<li>Led</li>
<li>Resistencia de 220R</li>
<li>Dos cables macho-hembra</li>
</ul>
</section>
<section id="circuito" class="level2">
<h2 class="anchored" data-anchor-id="circuito">Circuito</h2>
<p>Es el más básico. Solo hay que asegurarse de siempre conectar una resistencia al led, puede ser en cualquiera de sus terminales, aunque por costumbre la conectamos a la tierra de este (la terminal corta).</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/practica01.png" class="img-fluid figure-img"></p>
<figcaption>Encendiendo un led</figcaption>
</figure>
</div>
</section>
<section id="código-en-c" class="level2">
<h2 class="anchored" data-anchor-id="código-en-c">Código en C++</h2>
<p>Ya una vez armado nuestro circuito, pasamos a programarlo. El código necesario es:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode cpp code-with-copy"><code class="sourceCode cpp"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Declaración de variables</span></span>
<span id="cb1-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">const</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">int</span> led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb1-3"></span>
<span id="cb1-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Código que solo corre al inicio</span></span>
<span id="cb1-5"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> setup<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-6">  pinMode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>ledPin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> OUTPUT<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Pin 2 como salida</span></span>
<span id="cb1-7"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Código que se estará ejecutando indefinidamente</span></span>
<span id="cb1-10"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">void</span> loop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">()</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-11">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> HIGH<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Enciende el pin 2</span></span>
<span id="cb1-12">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// durante un segundo.</span></span>
<span id="cb1-13">  digitalWrite<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span>led<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">,</span> LOW<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// Apaga el pin 2</span></span>
<span id="cb1-14">  delay<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">(</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">);</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// durante otro segundo</span></span>
<span id="cb1-15"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
</section>
<section id="código-en-micropython" class="level2">
<h2 class="anchored" data-anchor-id="código-en-micropython">Código en MicroPython</h2>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Importamos los módulos necesarios</span></span>
<span id="cb2-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> machine</span>
<span id="cb2-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> time</span>
<span id="cb2-4"></span>
<span id="cb2-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Declaramos el pin 2 como salida</span></span>
<span id="cb2-6">led <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> machine.Pin(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, machine.Pin.OUT)</span>
<span id="cb2-7"></span>
<span id="cb2-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Ejecutamos un ciclo</span></span>
<span id="cb2-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>:</span>
<span id="cb2-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Enciende el led</span></span>
<span id="cb2-11">    led.on()</span>
<span id="cb2-12">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># por un segundo</span></span>
<span id="cb2-13">    time.sleep(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb2-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Apaga el led</span></span>
<span id="cb2-15">    led.off()</span>
<span id="cb2-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># por otro segundo</span></span>
<span id="cb2-17">    time.sleep(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span></code></pre></div></div>
<script src="https://giscus.app/client.js" data-repo="lemendozaru/HolzTankWebsite" data-repo-id="R_kgDOSQYBIA" data-category="Announcements" data-category-id="DIC_kwDOSQYBIM4C8JRB" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="bottom" data-theme="preferred_color_scheme" data-lang="es" crossorigin="anonymous" async="">
</script>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <category>microPython</category>
  <guid>https://holztank.top/blog/entradas/encenderLED.html</guid>
  <pubDate>Thu, 30 Apr 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>ESP32 y Arduino IDE</title>
  <link>https://holztank.top/blog/entradas/esp32ArduinoIDE.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/arduinoIDE.png" class="img-fluid figure-img"></p>
<figcaption>Pantalla principal de Arduino IDE</figcaption>
</figure>
</div>
<p>Si ya te decidiste a desarrollar tus prácticas con la ESP32, pero no te quieres agobiar con su propio <em>framework</em>, puedes optar por programarla en <em>Arduino IDE</em> y con <code>C++</code>. Sin embargo, no es algo tan simple como conectar y ya. Debe prepararse tu entorno de desarrollo. Pasemos a ello.</p>
<section id="placas-soportadas" class="level2">
<h2 class="anchored" data-anchor-id="placas-soportadas">Placas soportadas</h2>
<p>Prácticamente todas, pero un par de ellas con un matiz: la <em>C2</em> y la <em>C61</em> requieren reconstruir las bibliotecas estáticas. Si tu placa no es una de ellas, podemos continuar.</p>
</section>
<section id="arduino-ide" class="level2">
<h2 class="anchored" data-anchor-id="arduino-ide">Arduino IDE</h2>
<ol type="1">
<li><p>Lo primero es descargar e instalar Arduino IDE desde la página oficial de <a href="https://www.arduino.cc/en/software/">Descargas</a> de Arduino, que al momento de escribir esta entrada iba en la versión 2.3.8. Al ejecutarlo por primera vez comenzará a descargar e instalar librerías y demás. Es normal.</p></li>
<li><p>Enseguida nos vamos al menú <em>File -&gt; Preferences</em>, lo que abrirá una nueva ventana en la que podemos modificar la carpeta en la que se estarán guardando los archivos que vayamos generando, además del tema y el lenguaje. En lo personal, prefiero cambiar la carpeta y el idioma.</p></li>
</ol>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Importante
</div>
</div>
<div class="callout-body-container callout-body">
<p>A partir de este momento, todas las referencias a la interfaz de Arduino IDe estarán en español.</p>
</div>
</div>
<ol start="3" type="1">
<li>Lo importante está al final de la ventana: hay una caja de texto que dice “URLs adicionales de gestor de placas” y en la cual podemos pegar cualquiera de las direcciones de las cuales sacaremos los archivos necesarios:</li>
</ol>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Versión estable</span></span>
<span id="cb1-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">https://espressif.github.io/arduino-esp32/package_esp32_index.json</span></span></code></pre></div></div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Versión en desarrollo</span></span>
<span id="cb2-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json</span></span></code></pre></div></div>
<p>Incluso si queremos pegar ambas, las separamos con una coma. Aunque no es muy recomendable hacerlo. Damos clic en <em>Aceptar</em>.</p>
<ol start="4" type="1">
<li><p>Nos vamos al menú <em>Herramientas -&gt; Placa -&gt; Gestor de placas</em> y veremos aparecer un panel a la izquierda del programa. Ahí tendrá su propia caja de búsqueda. Escribimos esp32 y nos instalamos la subida por Espressif Systems, que a abril de 2026 va en la versión 3.3.8. El proceso de instalación puede ser tardado. Una vez que haya terminado nos avisará de ello.</p></li>
<li><p>Lo siguiente es buscar y seleccionar nuestra placa en el menú <em>Herramientas -&gt; Placa -&gt; esp32</em>. Muy probablemente no encontremos nuestro modelo específico, pero algunos funcionan muy bien con los que normalmente se consiguen en el país. Uno es <em>DOIT ESP32 DEVKIT V1</em>.</p></li>
<li><p>Conectamos la placa a la computadora y esta debería ser reconocida. Si no, muy probablemente la instalación automática de los controladores en Windows no funcionó. Toca instalarlos manualmente.</p></li>
</ol>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Controladores para Windows
</div>
</div>
<div class="callout-body-container callout-body">
<p>Se obtienen en el sitio de <a href="https://www.silabs.com/software-and-tools/usb-to-uart-bridge-vcp-drivers?tab=downloads">Silicon Labs</a>, siendo suficiente el comprimido <em>CP210x Universal Windows Drivers</em>. En este se encuentra un archivo llamado <code>silabser.inf</code>. Darle clic derecho y luego <em>Instalar</em>.</p>
</div>
</div>
<ol start="7" type="1">
<li>Una vez reconocida, ya podemos subir nuestros programas a la placa. En una posterior entrada encenderemos un led con ella.</li>
</ol>
<p>Si deseas desarrollar en microPython para esta placa, la siguiente entrada aborda el proceso de preparación del entorno.</p>
<script src="https://giscus.app/client.js" data-repo="lemendozaru/HolzTankWebsite" data-repo-id="R_kgDOSQYBIA" data-category="Announcements" data-category-id="DIC_kwDOSQYBIM4C8JRB" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="bottom" data-theme="preferred_color_scheme" data-lang="es" crossorigin="anonymous" async="">
</script>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>C++</category>
  <category>Arduino IDE</category>
  <guid>https://holztank.top/blog/entradas/esp32ArduinoIDE.html</guid>
  <pubDate>Thu, 30 Apr 2026 06:00:00 GMT</pubDate>
</item>
<item>
  <title>ESP32 y MicroPython</title>
  <link>https://holztank.top/blog/entradas/esp32MicroPython.html</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://holztank.top/blog/entradas/media/arduinoLabMP.png" class="img-fluid figure-img"></p>
<figcaption>Ventana principal de Arduino Labs for microPython</figcaption>
</figure>
</div>
<section id="windows" class="level2">
<h2 class="anchored" data-anchor-id="windows">Windows</h2>
<p>Para poder desarrollar nuestras aplicaciones embebidas con microPython en Windows necesitamos tener los controladores UART para la PC y Python instalado tanto en la misma como en la placa ESP32.</p>
<section id="controladores-uart" class="level3">
<h3 class="anchored" data-anchor-id="controladores-uart">Controladores UART</h3>
<p>Se obtienen en el sitio de <a href="https://www.silabs.com/software-and-tools/usb-to-uart-bridge-vcp-drivers?tab=downloads">Silicon Labs</a>, siendo suficiente el comprimido <em>CP210x Universal Windows Drivers</em>. En este se encuentra un archivo llamado <code>silabser.inf</code>. Darle clic derecho y luego <em>Instalar</em>.</p>
</section>
<section id="python" class="level3">
<h3 class="anchored" data-anchor-id="python">Python</h3>
<p>Lo primero se consigue descargando el instalador en <a href="https://www.python.org/downloads/">python.org</a>. Una vez instalado, podemos instalar la siguiente herramienta.</p>
</section>
<section id="esptool" class="level3">
<h3 class="anchored" data-anchor-id="esptool">ESPtool</h3>
<p>En la terminal (el CMD en Windows) escribimos el comando</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">pip</span> install esptool</span></code></pre></div></div>
<p>Cabe mencionar que en ocasiones este comando no funciona, por lo que tocará buscar otras alternativas, del estilo de:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">python.exe</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-m</span> install esptool</span></code></pre></div></div>
</section>
</section>
<section id="linux" class="level2">
<h2 class="anchored" data-anchor-id="linux">Linux</h2>
<p>Python viene instalado por defecto en la mayoría de las distribuciones Linux, por lo que solo será necesario instalar <code>esptool</code>, lo cual dependerá de la distro en sí. En el caso de ArchLinux y derivadas basta con</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> pacman <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-S</span> esptool</span></code></pre></div></div>
</section>
<section id="micropython" class="level2">
<h2 class="anchored" data-anchor-id="micropython">MicroPython</h2>
<section id="detectando-la-placa" class="level3">
<h3 class="anchored" data-anchor-id="detectando-la-placa">Detectando la placa</h3>
<p>Conectamos la ESP32 a la PC y nos aseguramos que ha sido detectada. En Windows podemos verlo en el <em>Gestor de Dispositivos -&gt; Puertos</em>, típicamente estando en los <code>COMx</code> (siendo <code>x</code> un número).</p>
<p>En Linux hay que escribir en la terminal</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb4-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">lsusb</span></span></code></pre></div></div>
<p>Entonces nos dirigimos al sitio de descargas de microPython (https://micropython.org/download/?port=esp32) y elegimos el binario correspondiente a nuestra placa. Típicamente es la ESP32/WROOM, pero debemos verificar con la imagen de referencia que el mismo sitio coloca. Descargamos el <em>firmware</em> más reciente y lo dejamos en la carpeta que nos parezca más adecuada.</p>
</section>
<section id="borrando-el-firmware" class="level3">
<h3 class="anchored" data-anchor-id="borrando-el-firmware">Borrando el <em>firmware</em></h3>
<p>Después debemos borrar la memoria flash de la placa. Basta con escribir en la terminal de Windows:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb5-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">esptool.py</span> erase-flash</span></code></pre></div></div>
<p>O en Linux:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb6-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">esptool</span> erase-flash</span></code></pre></div></div>
<p>Es probable que en Linux debamos hacerlo con permisos de superusuario. Además, si ocurre un error de escritura, sobretodo si la placa es nueva, debemos habilitar el modo escritura, lo cual se logra presionando el botón <code>BOOT</code> de la misma cuando aparezca el mensaje <code>Connecting...</code> y soltarlo cuando ya haya comenzado a escribir.</p>
<p>Si no es encontrada la placa, podemos forzar la escritura del comando agregando el parámetro <code>--port COMx</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb7-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">esptool.py</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--port</span> COMx erase-flash</span></code></pre></div></div>
</section>
<section id="instalando-micropython-en-la-placa" class="level3">
<h3 class="anchored" data-anchor-id="instalando-micropython-en-la-placa">Instalando microPython en la placa</h3>
<p>Estando en la terminal, nos dirigimos a la carpeta en la que dejamos el firmware descargado y procedemos a instalarlo en la placa. Escribimos el comando</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb8-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">esptool.py</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--baud</span> 460800 write-flash 0x1000 ESP32_GENERIC-20260406-v1.28.0.bin</span></code></pre></div></div>
<p>Es probable que la versión de microPython haya cambiado, por lo que el nombre del archivo difiera del mostrado (<code>ESP32_GENERIC-20260406-v1.28.0.bin</code>).</p>
</section>
</section>
<section id="el-ide" class="level2">
<h2 class="anchored" data-anchor-id="el-ide">El IDE</h2>
<p>En sí no existe un buen IDE para microPython, pero uno que resulta aceptable es <em>Arduino Lab for microPython</em>, del cual puede descargarse un portable desde su <a href="https://labs.arduino.cc/en/labs/micropython">sitio</a>.</p>
<p>Una vez descargado, descomprimimos y ejecutamos. Lo primero que hará será preguntarnos en dónde queremos guardar los archivos que vayamos generando. Es importante tener en cuenta que deberíamos crear una carpeta para cada proyecto, ya que los archivos que estaremos enviando a la placa se llaman indistintamente <code>main.py</code>.</p>
<p>Elegimos la ubicación y, si tenemos conectada la placa a la PC, podemos optar por presionar el botón <em>Conectar</em> y esperar a que aparezca el diálogo que nos da a elegir el puerto en el que se encuentra la placa. Si todo se realiza bien, ya estaremos en condiciones de ejecutar nuestros programas en la ESP32 con microPython.</p>
<p>Probablemente en Linux surjan problemas de permisos. En Arch y derivadas se resuelve reiniciando después de ejecutar el siguiente comando en consola (donde <code>usuario</code> es el nombre de quien inicia la sesión en Linux):</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb9-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sudo</span> usermod <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-a</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-G</span> uucp <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span>usuario<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span></code></pre></div></div>
<p>Ya estaremos en condiciones de subir nuestros programas a la placa, lo cual abordaremos en la siguiente entrada.</p>
<script src="https://giscus.app/client.js" data-repo="lemendozaru/HolzTankWebsite" data-repo-id="R_kgDOSQYBIA" data-category="Announcements" data-category-id="DIC_kwDOSQYBIM4C8JRB" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="bottom" data-theme="preferred_color_scheme" data-lang="es" crossorigin="anonymous" async="">
</script>


</section>

<a onclick="window.scrollTo(0, 0); return false;" id="quarto-back-to-top"><i class="bi bi-arrow-up"></i> Back to top</a> ]]></description>
  <category>Embebidos</category>
  <category>esp32</category>
  <category>microPython</category>
  <guid>https://holztank.top/blog/entradas/esp32MicroPython.html</guid>
  <pubDate>Thu, 30 Apr 2026 06:00:00 GMT</pubDate>
</item>
</channel>
</rss>
