<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programación Archives &#8226; HUE CAT INGENIERÍA ESPAÑA</title>
	<atom:link href="https://huecat.es/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>https://huecat.es/category/programacion/</link>
	<description>Diseño, Programación y Electrónica</description>
	<lastBuildDate>Fri, 30 Jan 2026 02:28:03 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://huecat.es/wp-content/uploads/2020/10/cropped-huecat-logo-1-1-512-32x32.png</url>
	<title>Programación Archives &#8226; HUE CAT INGENIERÍA ESPAÑA</title>
	<link>https://huecat.es/category/programacion/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Manual de Ingeniería: Buck Converter PID</title>
		<link>https://huecat.es/manual-de-ingenieria-buck-converter-pid/</link>
					<comments>https://huecat.es/manual-de-ingenieria-buck-converter-pid/#respond</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 15:15:36 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Arduino IDE]]></category>
		<category><![CDATA[Buck]]></category>
		<category><![CDATA[DC]]></category>
		<category><![CDATA[IDE]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=7633</guid>

					<description><![CDATA[<p>Vin12.0 V Vout5.0 V Inductor100 µH Switching50 kHz Documentación técnica para la implementación de un convertidor DC-DC Buck (Step-down) utilizando control digital PID en lazo cerrado. El sistema migra de una simulación HIL (Hardware-in-the-Loop) en MATLAB a una ejecución standalone en microcontrolador AVR (Arduino). 1. Lista de Materiales, Bill of Materials (BOM) Componente Especificación Crítica [&#8230;]</p>
<p>The post <a href="https://huecat.es/manual-de-ingenieria-buck-converter-pid/">Manual de Ingeniería: Buck Converter PID</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-medium is-resized is-style-default"><img fetchpriority="high" decoding="async" width="300" height="294" src="https://huecat.es/wp-content/uploads/2026/01/image-300x294.png" alt="" class="wp-image-7721" style="aspect-ratio:1.020501138952164;width:221px;height:auto" srcset="https://huecat.es/wp-content/uploads/2026/01/image-300x294.png 300w, https://huecat.es/wp-content/uploads/2026/01/image-768x753.png 768w, https://huecat.es/wp-content/uploads/2026/01/image-600x588.png 600w, https://huecat.es/wp-content/uploads/2026/01/image.png 946w" sizes="(max-width: 300px) 100vw, 300px" /></figure>


<p><style>
    .tech-doc-wrapper {<br />
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;<br />
        background-color: #121212;<br />
        color: #e0e0e0;<br />
        padding: 30px;<br />
        border-radius: 8px;<br />
        line-height: 1.6;<br />
        max-width: 100%;<br />
    }</p>
<p>    .tech-doc-wrapper h2 {<br />
        color: #ffffff;<br />
        border-bottom: 2px solid #3b82f6;<br />
        padding-bottom: 10px;<br />
        margin-top: 40px;<br />
        font-size: 1.5rem;<br />
        text-transform: uppercase;<br />
        letter-spacing: 0.05em;<br />
    }</p>
<p>    .tech-doc-wrapper h3 {<br />
        color: #60a5fa;<br />
        margin-top: 25px;<br />
        font-size: 1.1rem;<br />
    }</p>
<p>    /* Grid de Especificaciones */<br />
    .specs-grid {<br />
        display: grid;<br />
        grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));<br />
        gap: 15px;<br />
        margin-bottom: 30px;<br />
    }</p>
<p>    .spec-card {<br />
        background: #1e1e1e;<br />
        padding: 15px;<br />
        border: 1px solid #333;<br />
        border-radius: 4px;<br />
        text-align: center;<br />
    }</p>
<p>    .spec-card strong {<br />
        display: block;<br />
        color: #a1a1aa;<br />
        font-size: 0.8rem;<br />
        margin-bottom: 5px;<br />
    }</p>
<p>    .spec-card span {<br />
        font-family: "Consolas", monospace;<br />
        font-size: 1.2rem;<br />
        color: #fff;<br />
    }</p>
<p>    /* Tablas */<br />
    .tech-table {<br />
        width: 100%;<br />
        border-collapse: collapse;<br />
        margin: 20px 0;<br />
        background: #1e1e1e;<br />
        font-size: 0.9rem;<br />
    }</p>
<p>    .tech-table th, .tech-table td {<br />
        padding: 12px;<br />
        border-bottom: 1px solid #333;<br />
        text-align: left;<br />
    }</p>
<p>    .tech-table th {<br />
        color: #60a5fa;<br />
        text-transform: uppercase;<br />
        font-size: 0.8rem;<br />
    }</p>
<p>    /* Comparativa */<br />
    .diff-box {<br />
        display: flex;<br />
        flex-wrap: wrap;<br />
        gap: 20px;<br />
        margin-top: 20px;<br />
    }<br />
    .diff-col {<br />
        flex: 1;<br />
        min-width: 280px;<br />
        background: #18181b;<br />
        padding: 20px;<br />
        border-left: 4px solid #333;<br />
    }<br />
    .diff-col.sim { border-color: #eab308; } /* Amarillo */<br />
    .diff-col.real { border-color: #22c55e; } /* Verde */</p>
<p>    /* Bloques de Código */<br />
    .code-block {<br />
        background: #0f0f10; /* Fondo más oscuro para código */<br />
        padding: 20px;<br />
        border-radius: 6px;<br />
        overflow-x: auto;<br />
        border: 1px solid #333;<br />
        font-family: "Consolas", "Monaco", monospace;<br />
        font-size: 0.85rem;<br />
        color: #d4d4d4;<br />
    }</p>
<p>    .code-keyword { color: #c586c0; }<br />
    .code-type { color: #4ec9b0; }<br />
    .code-comment { color: #6a9955; }<br />
    .code-func { color: #dcdcaa; }</p>
<p>    /* Alerta Técnica */<br />
    .tech-alert {<br />
        background: rgba(239, 68, 68, 0.1);<br />
        border: 1px solid #ef4444;<br />
        color: #fca5a5;<br />
        padding: 15px;<br />
        margin: 20px 0;<br />
        border-radius: 4px;<br />
        font-size: 0.9rem;<br />
    }<br />
</style>
</p>
<div class="tech-doc-wrapper">
<div class="specs-grid">
<div class="spec-card"><strong>Vin</strong>12.0 V</div>
<div class="spec-card"><strong>Vout</strong>5.0 V</div>
<div class="spec-card"><strong>Inductor</strong>100 µH</div>
<div class="spec-card"><strong>Switching</strong>50 kHz</div>
</div>
<p>Documentación técnica para la implementación de un convertidor DC-DC Buck (Step-down) utilizando control digital PID en lazo cerrado. El sistema migra de una simulación HIL (Hardware-in-the-Loop) en MATLAB a una ejecución <em>standalone</em> en microcontrolador AVR (Arduino).</p>
<h2>1. Lista de Materiales, Bill of Materials (BOM)</h2>
<table class="tech-table">
<thead>
<tr>
<th>Componente</th>
<th>Especificación Crítica</th>
<th>Función</th>
</tr>
</thead>
<tbody>
<tr>
<td>MCU</td>
<td>ATmega328p (Nano/Uno)</td>
<td>Controlador Digital (PID Discreto)</td>
</tr>
<tr>
<td>MOSFET</td>
<td>IRFZ44N / IRF540</td>
<td>Conmutación de Potencia</td>
</tr>
<tr>
<td>Gate Driver</td>
<td><strong>IR2110 / TC4420</strong></td>
<td>Interfaz TTL 5V a Gate 12V. <em>Esencial para f &gt; 20kHz.</em></td>
</tr>
<tr>
<td>Inductor</td>
<td>100 µH (Núcleo Ferrita)</td>
<td><strong>Isat &gt; 2.5A</strong>. Evitar bobinas de señal SMD.</td>
</tr>
<tr>
<td>Capacitor</td>
<td>33 µF (Low ESR)</td>
<td>Filtrado de rizado de salida.</td>
</tr>
</tbody>
</table>
<div class="tech-alert"><strong>⚠️ Nota de Diseño &#8211; Feedback:</strong><br />El algoritmo PID utiliza una referencia interna de <strong>2.5V</strong>. Para obtener 5V en la salida, es obligatorio implementar un divisor de tensión 2:1 (Resistencias 10kΩ/10kΩ) en el pin de lectura (A0).</div>
<h2>2. Migración: Simulación vs. Hardware Real</h2>
<p>El código base original estaba diseñado como «esclavo» de Simulink. Para el despliegue físico, se modificó la arquitectura de software para eliminar la dependencia del puerto Serial y activar la lectura ADC directa.</p>
<div class="diff-box">
<div class="diff-col sim">
<h3>Versión A: Simulación (HIL)</h3>
<p>El Arduino espera datos de MATLAB para actuar. No funciona solo.</p>
<div class="code-block">if (Serial.available()) {<br />DVout = recepcion(); <span class="code-comment">// Lee valor virtual</span><br />u = PID(DVout);<br />Serial.write(u); <span class="code-comment">// Devuelve dato a PC</span><br />}</div>
</div>
<div class="diff-col real">
<h3>Versión B: Standalone (Real)</h3>
<p>Operación autónoma con lectura de sensores y Anti-Windup activo.</p>
<div class="code-block"><span class="code-comment">// Lee Hardware real</span><br />y = analogRead(A0) * (5.0/1023.0);<br />u = PID(y);<br /><span class="code-comment">// Actúa sobre el MOSFET</span><br />pwmWrite(9, u * 255);</div>
</div>
</div>
<h2>3. Firmware Implementado (C++)</h2>
<p>Código fuente optimizado para despliegue en campo. Se corrigió el error de saturación integral (Windup) que causaba inestabilidad en la versión de simulación.</p>
<div class="code-block">
<pre><span class="code-comment">// Firmware Control Buck PID - v1.0 Release</span>
<span class="code-keyword">#include</span> &lt;pwm.h&gt;

<span class="code-keyword">const</span> <span class="code-type">int</span> PIN_SENSOR = A0;  <span class="code-comment">// Entrada Divisor (Vout/2)</span>
<span class="code-keyword">const</span> <span class="code-type">int</span> PIN_PWM = 9;      <span class="code-comment">// Salida Gate Driver</span>

<span class="code-comment">// Constantes PID (L=100uH, C=33uF)</span>
<span class="code-type">float</span> Kp = 0.272253;
<span class="code-type">float</span> Ti = 0.0015285;
<span class="code-type">float</span> Ts = 20e-6;           <span class="code-comment">// 50kHz Loop</span>

<span class="code-comment">// Variables PID</span>
<span class="code-type">float</span> u = 0.0, u_1 = 0.0;
<span class="code-type">float</span> e = 0.0, e_1 = 0.0;
<span class="code-type">float</span> q0, q1;
<span class="code-type">float</span> Vref = 2.5;           <span class="code-comment">// Target (2.5V leídos = 5.0V reales)</span>

<span class="code-keyword">void</span> <span class="code-func">setup</span>() {
    <span class="code-comment">// Coeficientes Tustin</span>
    q0 = Kp * (1 + (Ts / (2 * Ti)));
    q1 = -Kp * (1 - (Ts / (2 * Ti)));
    
    <span class="code-comment">// Configurar PWM Asíncrono</span>
    InitTimersSafe();
    SetPinFrequencySafe(PIN_PWM, 50000); 
    pinMode(PIN_PWM, OUTPUT);
}

<span class="code-keyword">void</span> <span class="code-func">loop</span>() {
    <span class="code-comment">// 1. Lectura ADC y Normalización</span>
    <span class="code-type">float</span> y_medida = analogRead(PIN_SENSOR) * (5.0 / 1023.0);
    
    <span class="code-comment">// 2. PID Discreto</span>
    e = Vref - y_medida;
    u = u_1 + q0 * e + q1 * e_1;
    
    <span class="code-comment">// 3. Saturación y Anti-Windup (Crítico)</span>
    <span class="code-keyword">if</span> (u &gt; 0.95) u = 0.95; 
    <span class="code-keyword">if</span> (u &lt; 0.00) u = 0.00;
    
    <span class="code-comment">// 4. Actualización Estados</span>
    u_1 = u;
    e_1 = e;
    
    <span class="code-comment">// 5. Actuación</span>
    pwmWrite(PIN_PWM, (<span class="code-type">int</span>)(u * 255));
    
    <span class="code-comment">// Estabilización de Ciclo</span>
    delayMicroseconds(10);
}
</pre>
</div>
</div>

<p>The post <a href="https://huecat.es/manual-de-ingenieria-buck-converter-pid/">Manual de Ingeniería: Buck Converter PID</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/manual-de-ingenieria-buck-converter-pid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Electrónica para sistema de Sanitización controlado por ESP8266 y base de datos MySQL para gestión de consumibles</title>
		<link>https://huecat.es/electronica-para-sistema-de-sanitizacion-controlado-por-esp8266-y-base-de-datos-mysql-para-gestion-de-consumibles/</link>
					<comments>https://huecat.es/electronica-para-sistema-de-sanitizacion-controlado-por-esp8266-y-base-de-datos-mysql-para-gestion-de-consumibles/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 12:21:18 +0000</pubDate>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sensores]]></category>
		<category><![CDATA[STEM]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Trabajos Realizados]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=7574</guid>

					<description><![CDATA[<p>La higiene industrial ya no puede depender del error humano. En un entorno post-pandémico, la sanitización efectiva no es un lujo, es una exigencia operativa. Sin embargo, los sistemas tradicionales de desinfección (UV y químicos) presentan dos grandes riesgos: la exposición accidental de las personas a agentes nocivos y la falta de control sobre los [&#8230;]</p>
<p>The post <a href="https://huecat.es/electronica-para-sistema-de-sanitizacion-controlado-por-esp8266-y-base-de-datos-mysql-para-gestion-de-consumibles/">Electrónica para sistema de Sanitización controlado por ESP8266 y base de datos MySQL para gestión de consumibles</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>La higiene industrial ya no puede depender del error humano.</strong> En un entorno post-pandémico, la sanitización efectiva no es un lujo, es una exigencia operativa. Sin embargo, los sistemas tradicionales de desinfección (UV y químicos) presentan dos grandes riesgos: la exposición accidental de las personas a agentes nocivos y la falta de control sobre los consumibles. Este proyecto nace para resolver esa ecuación mediante IoT: creamos un sistema de sanitización autónomo que es lo suficientemente inteligente para detenerse ante la presencia humana y lo suficientemente comunicativo para gestionar su propio mantenimiento, eliminando las «zonas ciegas» de la limpieza industrial.</p>



<figure class="wp-block-image size-large"><a href="https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-scaled.jpg"><img decoding="async" width="1024" height="531" src="https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-1024x531.jpg" alt="" class="wp-image-7619" srcset="https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-1024x531.jpg 1024w, https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-300x156.jpg 300w, https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-768x398.jpg 768w, https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-1536x796.jpg 1536w, https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-2048x1062.jpg 2048w, https://huecat.es/wp-content/uploads/2026/01/microcontrolador-stm-32-uno-placa-ingenieria-espana-taller-600x311.jpg 600w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">Sistema de luminarias UV (sanitización por Ultravioletas) y sistema automatizado para pulverización de producto ambientador para la Industria, controlado por IoT</h3>



<p><br>Detalles: Conexión a base de datos MySQL, sensor de movimiento, sensor de nivel de líquido por ultrasonido (SR-04), conexión por WiFi, LCD1602</p>



<figure class="wp-block-image size-large"><a href="https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql.jpg"><img decoding="async" width="1024" height="659" src="https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-1024x659.jpg" alt="" class="wp-image-7525" srcset="https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-1024x659.jpg 1024w, https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-300x193.jpg 300w, https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-768x494.jpg 768w, https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-1536x988.jpg 1536w, https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-2048x1317.jpg 2048w, https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-700x450.jpg 700w, https://huecat.es/wp-content/uploads/2022/09/sistema_iot_mysql-600x386.jpg 600w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p></p>
<p>The post <a href="https://huecat.es/electronica-para-sistema-de-sanitizacion-controlado-por-esp8266-y-base-de-datos-mysql-para-gestion-de-consumibles/">Electrónica para sistema de Sanitización controlado por ESP8266 y base de datos MySQL para gestión de consumibles</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/electronica-para-sistema-de-sanitizacion-controlado-por-esp8266-y-base-de-datos-mysql-para-gestion-de-consumibles/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Proyecto de Reproducción de MP3 con ESP32 y DFPlayer Mini</title>
		<link>https://huecat.es/proyecto-de-reproduccion-de-mp3-con-esp32-y-dfplayer-mini/</link>
					<comments>https://huecat.es/proyecto-de-reproduccion-de-mp3-con-esp32-y-dfplayer-mini/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Thu, 01 Aug 2024 13:31:50 +0000</pubDate>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Imagen y Sonido]]></category>
		<category><![CDATA[Programación]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=7176</guid>

					<description><![CDATA[<p>Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa [&#8230;]</p>
<p>The post <a href="https://huecat.es/proyecto-de-reproduccion-de-mp3-con-esp32-y-dfplayer-mini/">Proyecto de Reproducción de MP3 con ESP32 y DFPlayer Mini</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat.png"><img decoding="async" width="1024" height="683" src="https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat-1024x683.png" alt="" class="wp-image-7293" srcset="https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat-1024x683.png 1024w, https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat-300x200.png 300w, https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat-768x512.png 768w, https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat-1500x1000.png 1500w, https://huecat.es/wp-content/uploads/2024/08/mp3_proyecto_2025_huecat.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>


<p>Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa para la implementación de este sistema de reproducción de audio.</p>
<p>El DFPlayer Mini es un módulo de reproducción de audio compacto y de bajo costo que puede reproducir archivos MP3 y WAV almacenados en una tarjeta microSD. Es ampliamente utilizado en proyectos de electrónica debido a su facilidad de uso y a su capacidad para manejar archivos de audio de manera autónoma, sin necesidad de una fuente de control compleja. El módulo cuenta con varias funciones, incluyendo el ajuste de volumen, control de reproducción, y la capacidad de seleccionar pistas mediante comandos simples.</p>
<h4>Conexiones del Proyecto</h4>
<p>Para conectar el DFPlayer Mini con el ESP32, es importante seguir las siguientes indicaciones:</p>
<ul>
<li><strong>VCC:</strong> Conectar a una fuente de alimentación de 5V. El ESP32 puede proporcionar esta salida.</li>
<li><strong>GND:</strong> Conectar al pin de tierra (GND) del ESP32.</li>
<li><strong>TX del DFPlayer Mini:</strong> Conectar al pin GPIO 16 del ESP32.</li>
<li><strong>RX del DFPlayer Mini:</strong> Conectar al pin GPIO 17 del ESP32.</li>
<li><strong>SPK1 y SPK2:</strong> Conectar a un altavoz pasivo, si se desea una salida de audio. Alternativamente, se puede usar un conector de auriculares para salida de línea.</li>
</ul>
<p>Es fundamental asegurarse de que las conexiones sean correctas para evitar daños en los componentes y garantizar un funcionamiento óptimo del sistema.</p>
<h4>3. Código de Programación</h4>
<p>El siguiente código muestra cómo configurar el ESP32 para comunicarse con el DFPlayer Mini y reproducir un archivo MP3 cada 10 segundos. Se utiliza el puerto Serial1 del ESP32/ESP8266 para la comunicación, aprovechando la capacidad del microcontrolador para manejar múltiples puertos UART de hardware.</p>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;
#include &lt;DFPlayerMini_Fast.h&gt;

#if defined(ESP32)
  // En ESP32 podemos usar HardwareSerial en un segundo puerto
  HardwareSerial playerSerial(2);  // UART2: GPIO16=RX2, GPIO17=TX2 por defecto
  const int DF_RX = 16;  // al TX del DFPlayer
  const int DF_TX = 17;  // al RX del DFPlayer
#elif defined(ESP8266)
  #include &lt;SoftwareSerial.h&gt;
  const int DF_RX = D5;  // ESP8266: conecta a TX del DFPlayer
  const int DF_TX = D6;  // ESP8266: conecta a RX del DFPlayer
  SoftwareSerial playerSerial(DF_RX, DF_TX);
#else
  #error &quot;Este código sólo es para ESP32 o ESP8266&quot;
#endif

DFPlayerMini_Fast myDFPlayer;
const unsigned long intervalReproduccion = 10000;  // 10 s
unsigned long lastMillis = 0;

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println(&quot;=== DFPlayer en ESP32/ESP8266 ===&quot;);

  // Inicializar puerto al módulo
  #if defined(ESP32)
    playerSerial.begin(9600, SERIAL_8N1, DF_RX, DF_TX);
  #elif defined(ESP8266)
    playerSerial.begin(9600);
  #endif

  if (! myDFPlayer.begin(playerSerial)) {
    Serial.println(F(&quot;ERROR: No se detectó DFPlayer Mini&quot;));
    while (true) delay(100);
  }

  myDFPlayer.volume(20);   // 0–30
  myDFPlayer.play(1);      // empieza en pista 001
  lastMillis = millis();
}

void loop() {
  unsigned long now = millis();

  // Cada 10 s, reproducir siguiente pista
  if (now - lastMillis &gt;= intervalReproduccion) {
    lastMillis = now;
    myDFPlayer.playNext();
  }

  // Procesar eventos del DFPlayer (fin de pista, errores…)
  if (myDFPlayer.available()) {
    DFPlayerEventType type = myDFPlayer.readType();
    int state = myDFPlayer.readState();
    Serial.print(F(&quot;Evento DFPlayer: &quot;));
    Serial.print(type);
    Serial.print(F(&quot;  Estado interno: &quot;));
    Serial.println(state);
  }

  // Aquí puedes gestionar botones u otras tareas no bloqueantes

  delay(20);
}

</pre></div>


<p>En este código, se utilizan las siguientes funciones y configuraciones:</p>



<ul class="wp-block-list">
<li><strong>mySerial.begin(9600, SERIAL_8N1, 16, 17);</strong> Esta línea configura el puerto Serial1 del ESP32 con una velocidad de comunicación de 9600 baudios y establece los pines GPIO 16 y 17 como RX y TX, respectivamente.</li>



<li><strong>myDFPlayer.begin(mySerial);</strong> Esta función inicializa el DFPlayer Mini y lo prepara para recibir comandos.</li>



<li><strong>myDFPlayer.volume(20);</strong> Se ajusta el volumen del reproductor a un nivel de 20 (en una escala de 0 a 30).</li>



<li><strong>myDFPlayer.play(1);</strong> Este comando indica al DFPlayer Mini que reproduzca el archivo de audio numerado como 1 en la tarjeta microSD.</li>



<li><strong>delay(10000);</strong> Introduce una pausa de 10 segundos antes de repetir el ciclo.</li>
</ul>



<p>Este código permite la reproducción continua de un archivo MP3, con una espera de 10 segundos entre reproducciones. Es posible modificar el tiempo de espera o cambiar el archivo a reproducir ajustando los parámetros del código según las necesidades del proyecto.</p>



<figure class="wp-block-image size-large"><a href="https://huecat.es/wp-content/uploads/2024/08/Resproductor-de-mp3.jpg"><img decoding="async" width="1024" height="644" src="https://huecat.es/wp-content/uploads/2024/08/Resproductor-de-mp3-1024x644.jpg" alt="" class="wp-image-7179" srcset="https://huecat.es/wp-content/uploads/2024/08/Resproductor-de-mp3-1024x644.jpg 1024w, https://huecat.es/wp-content/uploads/2024/08/Resproductor-de-mp3-300x189.jpg 300w, https://huecat.es/wp-content/uploads/2024/08/Resproductor-de-mp3-768x483.jpg 768w, https://huecat.es/wp-content/uploads/2024/08/Resproductor-de-mp3.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<p>The post <a href="https://huecat.es/proyecto-de-reproduccion-de-mp3-con-esp32-y-dfplayer-mini/">Proyecto de Reproducción de MP3 con ESP32 y DFPlayer Mini</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/proyecto-de-reproduccion-de-mp3-con-esp32-y-dfplayer-mini/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Conociendo los CHAR ARRAY</title>
		<link>https://huecat.es/conociendo-los-char-array/</link>
					<comments>https://huecat.es/conociendo-los-char-array/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Sat, 26 Aug 2023 11:57:24 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[Char]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6790</guid>

					<description><![CDATA[<p>Los «char arrays» son una forma fundamental de trabajar con texto en muchos lenguajes de programación Un «char array» es una estructura de datos en programación que se utiliza para guardar una secuencia de caracteres. La palabra «char» se refiere a caracteres individuales, como letras o símbolos, y «array» significa que estos caracteres se almacenan [&#8230;]</p>
<p>The post <a href="https://huecat.es/conociendo-los-char-array/">Conociendo los CHAR ARRAY</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Los «char arrays» son una forma fundamental de trabajar con texto en muchos lenguajes de programación</p>



<p>Un «char array» es una estructura de datos en programación que se utiliza para guardar una secuencia de caracteres. La palabra «char» se refiere a caracteres individuales, como letras o símbolos, y «array» significa que estos caracteres se almacenan uno después del otro en la memoria.</p>



<p>Por ejemplo, si se tiene la palabra «Hola», un «char array» la representaría como una serie de caracteres: &#8216;H&#8217;, &#8216;o&#8217;, &#8216;l&#8217;, &#8216;a&#8217;. Cada uno de estos caracteres se guarda en una posición específica del array y se puede acceder a ellos por su posición. El primer carácter estará en la posición 0, el segundo en la posición 1, y así sucesivamente.</p>



<p></p>



<p>Ahora un ejemplo para compilar con cualquier placa con <a href="https://huecat.es/sintaxis-de-codigo-arduino/" target="_blank" rel="noreferrer noopener">Arduino IDE</a></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
void setup() {
  Serial.begin(9600);  // Inicializar la comunicación serial
  
  char mensaje&#x5B;] = &quot;Hola, este es un ejemplo de conteo de vocales&quot;;
  
  int cantidadVocales = contarVocales(mensaje);
  
  Serial.print(&quot;El mensaje es: &quot;);
  Serial.println(mensaje);
  
  Serial.print(&quot;La cantidad de vocales es: &quot;);
  Serial.println(cantidadVocales);
}

void loop() {
  // Tu código aquí
}

int contarVocales(char *cadena) {
  int contador = 0;
  
  for (int i = 0; cadena&#x5B;i] != &#039;\0&#039;; i++) {
    char caracter = toLowerCase(cadena&#x5B;i]); // Convertir el caracter a minúscula para hacer la comparación
    if (caracter == &#039;a&#039; || caracter == &#039;e&#039; || caracter == &#039;i&#039; || caracter == &#039;o&#039; || caracter == &#039;u&#039;) {
      contador++;
    }
  }
  
  return contador;
}
</pre></div>


<p>En este ejemplo, se ha creado una función llamada <code>contarVocales</code> que toma un puntero a una cadena de caracteres (<code>char *cadena</code>) como argumento. </p>



<p>Dentro de esta función, se recorre cada caracter en la cadena utilizando un bucle <code>for</code>. Convertimos cada carácter a minúscula usando la función <code>toLowerCase()</code> para asegurarnos de que se cuenten las vocales tanto en mayúscula como en minúscula.</p>



<p>Si el carácter es una vocal (&#8216;a&#8217;, &#8216;e&#8217;, &#8216;i&#8217;, &#8216;o&#8217;, &#8216;u&#8217;), incrementamos el contador. Al final, la función devuelve la cantidad total de vocales encontradas en la cadena.</p>



<p>Este ejemplo muestra cómo puedes utilizar funciones y bucles para realizar manipulaciones más avanzadas con cadenas y caracteres en Arduino IDE. Puedes construir sobre este concepto para crear funciones más complejas que realicen diferentes tareas con texto.</p>



<p></p>



<p>¿Por qué un puntero?</p>



<p>En C y C++, una cadena de caracteres es en realidad un array de caracteres, y se representa mediante un puntero al primer elemento del array. Cuando pasamos una cadena como argumento a una función, en realidad estamos pasando un puntero al primer carácter de la cadena. Esto se debe a cómo funcionan los arrays en C/C++.</p>



<p>Ergo, cuando se declaró <code>int contarVocales(char *cadena)</code>, se estaba indicando que la función toma un puntero a un carácter como argumento, lo que es técnicamente correcto. Sin embargo, también es válido declarar la función como <code>int contarVocales(char cadena[])</code>, ya que en C/C++, los arrays de caracteres se pasan como punteros al primer elemento.</p>
<p>The post <a href="https://huecat.es/conociendo-los-char-array/">Conociendo los CHAR ARRAY</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/conociendo-los-char-array/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>La diferencia entre struct y typedef struct.</title>
		<link>https://huecat.es/la-diferencia-entre-struct-y-typedef-struct-ejemplos-orientados-a-arduino-ide/</link>
					<comments>https://huecat.es/la-diferencia-entre-struct-y-typedef-struct-ejemplos-orientados-a-arduino-ide/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Mon, 24 Jul 2023 14:23:15 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Estructuras]]></category>
		<category><![CDATA[Structs]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6743</guid>

					<description><![CDATA[<p>Estructuras en C/C++: De la Sintaxis Básica a la Arquitectura de Datos En el desarrollo de software embebido y sistemas críticos, la organización de la memoria es fundamental. En lenguaje C y C++, una estructura (struct) es un tipo de dato que te permite combinar diferentes variables de tipos distintos en una sola entidad lógica. [&#8230;]</p>
<p>The post <a href="https://huecat.es/la-diferencia-entre-struct-y-typedef-struct-ejemplos-orientados-a-arduino-ide/">La diferencia entre struct y typedef struct.</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Estructuras en C/C++: De la Sintaxis Básica a la Arquitectura de Datos</h2>



<figure class="wp-block-image size-large"><a href="https://huecat.es/wp-content/uploads/2023/07/imagen-scaled.png"><img decoding="async" width="1024" height="506" src="https://huecat.es/wp-content/uploads/2023/07/imagen-1024x506.png" alt="" class="wp-image-7604" srcset="https://huecat.es/wp-content/uploads/2023/07/imagen-1024x506.png 1024w, https://huecat.es/wp-content/uploads/2023/07/imagen-300x148.png 300w, https://huecat.es/wp-content/uploads/2023/07/imagen-768x380.png 768w, https://huecat.es/wp-content/uploads/2023/07/imagen-1536x759.png 1536w, https://huecat.es/wp-content/uploads/2023/07/imagen-2048x1012.png 2048w, https://huecat.es/wp-content/uploads/2023/07/imagen-600x297.png 600w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>En el desarrollo de software embebido y sistemas críticos, la organización de la memoria es fundamental. En lenguaje C y C++, una estructura (struct) es un tipo de dato que te permite combinar diferentes variables de tipos distintos en una sola entidad lógica. Por ejemplo, puedes tener una estructura llamada «Punto» que almacene las coordenadas x e y.</p>



<p>&nbsp;</p>



<p><strong>La definición estándar (lo que todos enseñan):</strong></p>



<pre class="wp-block-preformatted">struct Punto { int x; int y; };</pre>



<p>Luego, para usar esta estructura y declarar variables de tipo «Punto», normalmente deberías hacerlo así:</p>



<pre class="wp-block-preformatted">struct Punto miPunto; miPunto.x = 10; miPunto.y = 5;</pre>



<p>La palabra clave <code>struct</code> debe ir antes del nombre de la estructura cada vez que declares una variable. Esto, en código moderno, genera ruido visual y verbosidad innecesaria.</p>



<h3 class="wp-block-heading">La evolución: Typedef y Abstracción</h3>



<p>Sin embargo, si usas «typedef struct», puedes crear un nuevo nombre para esta estructura. Esto te permite omitir la palabra clave <code>struct</code> al declarar variables de esa estructura, limpiando el código y acercándolo a una semántica de tipos de alto nivel.</p>



<p>Ejemplo con «typedef struct»:</p>



<pre class="wp-block-preformatted">typedef struct { int x; int y; } Punto;</pre>



<p>Ahora la instanciación es directa y limpia:</p>



<pre class="wp-block-preformatted">Punto miPunto; miPunto.x = 7; miPunto.y = 3;</pre>



<p>La diferencia entre «struct» y «typedef struct» es cómo declaras variables de ese tipo de estructura. Con «typedef struct», puedes crear un alias para la estructura y usar ese alias directamente sin necesidad de escribir la palabra <code>struct</code>.</p>



<h3 class="wp-block-heading">¿Por qué importa esto en tu Arquitectura?</h3>



<p>Aquí es donde dejamos de picar código y empezamos a diseñar sistemas. Aunque el resultado funcional parece el mismo, la elección tiene implicaciones estratégicas dependiendo de tu entorno (C puro vs C++):</p>



<ul class="wp-block-list">
<li><strong>En C (Puro):</strong> El uso de <code>typedef</code> es casi obligatorio para mantener un código legible y profesional. Sin él, estás obligado a arrastrar la palabra <code>struct</code> por todo tu código, lo cual ensucia la lectura de las firmas de tus funciones.</li>



<li><strong>En C++ (Arduino/ESP32):</strong> Aquí está el error común. En C++, <code>struct Punto</code> define automáticamente el tipo <code>Punto</code>. <strong>El <code>typedef</code> es redundante en C++</strong>. Si estás programando en Arduino (que es C++), usar <code>typedef struct</code> suele ser una «muletilla» heredada de programadores de C de la vieja escuela.</li>



<li><strong>Ocultación de Información (Opaque Pointers):</strong> Si estás diseñando una librería (para un cliente o para compartir), el <code>typedef</code> es tu mejor aliado para crear «Tipos Opacos». Puedes declarar <code>typedef struct Config Config;</code> en el archivo de cabecera (.h) sin revelar los detalles internos de la estructura, forzando al usuario a interactuar solo a través de tu API pública. Eso es arquitectura sólida.</li>
</ul>
<p>The post <a href="https://huecat.es/la-diferencia-entre-struct-y-typedef-struct-ejemplos-orientados-a-arduino-ide/">La diferencia entre struct y typedef struct.</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/la-diferencia-entre-struct-y-typedef-struct-ejemplos-orientados-a-arduino-ide/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Utilización de Estructuras struct{};</title>
		<link>https://huecat.es/utilizacion-de-estructuras-struct/</link>
					<comments>https://huecat.es/utilizacion-de-estructuras-struct/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Wed, 19 Jul 2023 13:24:34 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6715</guid>

					<description><![CDATA[<p>Así como las matrices permiten definir el tipo de variables que pueden contener varios elementos de datos del mismo tipo, ee manera similar, las Estructuras son otro tipo de datos definido por el usuario que permite combinar elementos de datos de diferentes tipos. En C, las estructuras son una colección de variables agrupadas por conveniencia. [&#8230;]</p>
<p>The post <a href="https://huecat.es/utilizacion-de-estructuras-struct/">Utilización de Estructuras struct{};</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Así como las matrices permiten definir el tipo de variables que pueden contener varios elementos de datos del mismo tipo, ee manera similar, las E<strong>structuras </strong>son otro tipo de datos definido por el usuario  que permite combinar elementos de datos de diferentes tipos.</p>



<p></p>



<p>En C, las estructuras son una colección de variables agrupadas por conveniencia.</p>



<p>En C++ son lo mismo que una <strong>clase </strong>excepto que los miembros de la estructura son públicos por defecto.</p>



<p></p>



<p></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
struct pcb
{
  String model ; // Nombre del modelo
  int npd ;       // Numero de pines digitales
  int npa ;       // Numero de pines analogicos
  float volt ;    // Tension de funcionamiento
} ;

void setup() {

  Serial.begin(115200);
  pcb PLACA_UNO_R3;

  // Asignación de valores
  PLACA_UNO_R3.model = &quot;uno&quot; ;
  PLACA_UNO_R3.npd = 13 ;
  PLACA_UNO_R3.npa = 5 ;
  PLACA_UNO_R3.volt = 5.0F ;

  // Lectura de valores
  int numpd = PLACA_UNO_R3.npd ;
  float voltage = PLACA_UNO_R3.volt ;

  Serial.print(&quot;\nVoltaje: &quot;);
  Serial.println(voltage);
  
  Serial.print(&quot;Numero de pines digitales: &quot;);
  Serial.println(numpd);
  
  Serial.print(&quot;Numero de pines analogicos: &quot;);
  Serial.println(PLACA_UNO_R3.npa);  
    
  Serial.print(&quot;Modelo de PCB: &quot;);
  Serial.println(PLACA_UNO_R3.model);

}

void loop() {

}
</pre></div><p>The post <a href="https://huecat.es/utilizacion-de-estructuras-struct/">Utilización de Estructuras struct{};</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/utilizacion-de-estructuras-struct/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>ESP32 y Node-RED + MQTT (Publicar/Subscribir o Susbribir)</title>
		<link>https://huecat.es/esp8266-and-node-red-with-mqtt-publish-and-subscribe/</link>
					<comments>https://huecat.es/esp8266-and-node-red-with-mqtt-publish-and-subscribe/#respond</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Mon, 19 Jun 2023 15:22:54 +0000</pubDate>
				<category><![CDATA[ESP32]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Embebidos]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6531</guid>

					<description><![CDATA[<p>Utilización de Node-RED para controlar las entradas/salidas del ESP8266/ESP32 y mostrar los datos de sensores en su interfaz. El software Node-RED se ejecuta en una Raspberry Pi y la comunicación entre el ESP8266 y el software Node-RED se realiza a través del protocolo de comunicación MQTT. Se programará el ESP32 usando Arduino IDE Requisitos: Primeros [&#8230;]</p>
<p>The post <a href="https://huecat.es/esp8266-and-node-red-with-mqtt-publish-and-subscribe/">ESP32 y Node-RED + MQTT (Publicar/Subscribir o Susbribir)</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Utilización de Node-RED para controlar las entradas/salidas del ESP8266/ESP32 y mostrar los datos de sensores en su interfaz.</p>



<p>El software Node-RED se ejecuta en una Raspberry Pi y la comunicación entre el ESP8266 y el software Node-RED se realiza a través del protocolo de comunicación MQTT.</p>



<p>Se programará el ESP32 usando Arduino IDE</p>



<p>Requisitos:</p>



<p><a href="https://huecat.es/primeros-pasos-con-node-red-en-raspberry-pi/" target="_blank" rel="noreferrer noopener">Primeros pasos con NodeRed y Raspberry Pi</a></p>



<figure class="wp-block-image size-full"><a href="https://huecat.es/wp-content/uploads/2023/06/NodeRed-con-Arduino-IDE-y-Platformio-con-SIM-7000-G.jpg"><img decoding="async" width="474" height="251" src="https://huecat.es/wp-content/uploads/2023/06/NodeRed-con-Arduino-IDE-y-Platformio-con-SIM-7000-G.jpg" alt="" class="wp-image-6970" srcset="https://huecat.es/wp-content/uploads/2023/06/NodeRed-con-Arduino-IDE-y-Platformio-con-SIM-7000-G.jpg 474w, https://huecat.es/wp-content/uploads/2023/06/NodeRed-con-Arduino-IDE-y-Platformio-con-SIM-7000-G-300x159.jpg 300w" sizes="(max-width: 474px) 100vw, 474px" /></a></figure>



<p>La comunicación entre Arduino IDE y Node-RED a través del protocolo MQTT permite intercambiar datos y comandos entre un dispositivo basado en ESP8266 o ESP32 (programado con Arduino IDE) y un servidor Node-RED que se ejecuta en otra máquina, como una Raspberry Pi.</p>



<ol class="wp-block-list">
<li><strong>Preparación del entorno:</strong>
<ul class="wp-block-list">
<li>Asegurarse que Node-RED esté instalado y en funcionamiento en la máquina que actuará como servidor.</li>



<li>Configurar un servidor MQTT y verifica que esté en funcionamiento en la misma máquina que Node-RED.</li>



<li>Conecta tu ESP8266 o ESP32 a la red Wi-Fi para que pueda acceder al servidor MQTT.</li>
</ul>
</li>



<li><strong>Uso de la librería PubSubClient en Arduino IDE:</strong>
<ul class="wp-block-list">
<li>En Arduino IDE, instalar la librería PubSubClient para facilitar la comunicación MQTT.</li>



<li>Configura tu dispositivo ESP8266 o ESP32 para conectarse a la red Wi-Fi y establecer una conexión con el servidor MQTT utilizando la dirección IP y el puerto correspondientes.</li>
</ul>
</li>



<li><strong>Envío* de mensajes MQTT desde Arduino IDE:</strong>
<ul class="wp-block-list">
<li>Una vez establecida la conexión MQTT, utilizar la función <code>client.publish()</code> para enviar mensajes al servidor Node-RED.</li>



<li>Define un «topic» específico para cada tipo de mensaje que desees enviar. Esto permitirá que el servidor Node-RED identifique y procese la información adecuadamente.</li>
</ul>
</li>



<li><strong>Opcional: Recepción de mensajes MQTT en Arduino IDE*:</strong>
<ul class="wp-block-list">
<li>Para recibir mensajes del servidor Node-RED, puedes utilizar la función <code>client.subscribe()</code> para suscribirte a ciertos «topics» MQTT desde tu código de Arduino. De esta manera, tu dispositivo puede recibir comandos o información desde el servidor.</li>
</ul>
</li>



<li><strong>Configuración de Node-RED:</strong>
<ul class="wp-block-list">
<li>En Node-RED, configurar el nodo MQTT para que se conecte al servidor MQTT que está en funcionamiento en la Raspberry Pi u otra máquina.</li>



<li>Utiliza el nodo MQTT para escuchar los «topics» a los que tu ESP8266/ESP32 está publicando y/o suscrito.</li>
</ul>
</li>



<li><strong>Procesamiento de mensajes en Node-RED:</strong>
<ul class="wp-block-list">
<li>Una vez que Node-RED reciba los mensajes de un dispositivo ESP8266/ESP32, puedes procesarlos utilizando diferentes nodos para la lógica y la visualización. Esto te permitirá realizar acciones o presentar los datos recibidos según tus necesidades.</li>
</ul>
</li>



<li><strong>Prueba y Depuración</strong>.</li>
</ol>
<p>The post <a href="https://huecat.es/esp8266-and-node-red-with-mqtt-publish-and-subscribe/">ESP32 y Node-RED + MQTT (Publicar/Subscribir o Susbribir)</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/esp8266-and-node-red-with-mqtt-publish-and-subscribe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Funciones y métodos integrados en Arduino IDE</title>
		<link>https://huecat.es/funciones-y-metodos-integrados-en-arduino-ide/</link>
					<comments>https://huecat.es/funciones-y-metodos-integrados-en-arduino-ide/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Tue, 06 Jun 2023 20:37:18 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Embebidos]]></category>
		<category><![CDATA[analogWrite]]></category>
		<category><![CDATA[Arduino IDE]]></category>
		<category><![CDATA[digitalRead]]></category>
		<category><![CDATA[digitalWrite]]></category>
		<category><![CDATA[Funciones]]></category>
		<category><![CDATA[Serial]]></category>
		<category><![CDATA[Wire]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6505</guid>

					<description><![CDATA[<p>Cuando se trata de desarrollar proyectos electrónicos, Arduino IDE se ha convertido en una plataforma popular gracias a sus características únicas y su versatilidad. Además de su similitud con la sintaxis de C y C++, Arduino ofrece una serie de funciones y métodos específicos que permiten interactuar de manera eficiente con los componentes electrónicos. En [&#8230;]</p>
<p>The post <a href="https://huecat.es/funciones-y-metodos-integrados-en-arduino-ide/">Funciones y métodos integrados en Arduino IDE</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cuando se trata de desarrollar proyectos electrónicos, Arduino IDE se ha convertido en una plataforma popular gracias a sus características únicas y su versatilidad. Además de su similitud con la sintaxis de C y C++, Arduino ofrece una serie de funciones y métodos específicos que permiten interactuar de manera eficiente con los componentes electrónicos. En este artículo, destacaremos algunas de las particularidades de Arduino y cómo aprovechar al máximo su potencial en tus proyectos.</p>



<p>Una de las grandes ventajas de Arduino IDE es la amplia variedad de bibliotecas predefinidas disponibles. Estas bibliotecas contienen funciones listas para usar que simplifican la interacción con dispositivos y módulos comunes. Al importar una biblioteca específica, se obtiene acceso instantáneo a métodos que facilitan tareas como leer sensores, controlar motores, comunicarse con pantallas y mucho más. La biblioteca estándar de Arduino es solo el comienzo; existen innumerables bibliotecas de terceros creadas por la comunidad Arduino que ofrecen aún más funcionalidades especializadas.</p>



<p>Además de las bibliotecas, Arduino también ofrece una serie de funciones y métodos integrados que son fundamentales para el desarrollo de proyectos electrónicos. Algunos ejemplos destacados son:</p>



<ol class="wp-block-list">
<li><code>digitalRead()</code> y <code>digitalWrite()</code>: Estas funciones permiten leer y escribir valores digitales en los pines de Arduino. Son esenciales para interactuar con botones, interruptores y otros dispositivos que funcionan con señales digitales.</li>



<li><code>analogRead()</code> y <code>analogWrite()</code>: Arduino también cuenta con pines analógicos, y estas funciones permiten leer y escribir valores analógicos. Son especialmente útiles para trabajar con sensores de luz, temperatura y otros dispositivos que generan señales analógicas.</li>



<li><code>Serial</code>: Arduino tiene soporte para la comunicación serial, lo que permite establecer una conexión con otros dispositivos, como una computadora. La clase <code>Serial</code> ofrece métodos para enviar y recibir datos a través del puerto serie, lo que es esencial para la depuración y la interacción con otros sistemas.</li>



<li><code>Wire</code>: Esta biblioteca permite la comunicación I2C, un protocolo ampliamente utilizado para conectar múltiples dispositivos en un bus de dos hilos. Con los métodos proporcionados por la biblioteca <code>Wire</code>, es posible enviar y recibir datos entre Arduino y otros dispositivos compatibles con I2C.</li>
</ol>



<p>Estas son solo algunas de las particularidades de Arduino que te permitirán aprovechar al máximo su potencial en tus proyectos. Explorar las bibliotecas, funciones y métodos específicos de Arduino te brindará un mayor control sobre tus componentes electrónicos y te permitirá crear proyectos más sofisticados. Además, no olvides que la comunidad Arduino es muy activa, por lo que siempre puedes buscar ejemplos, tutoriales y proyectos similares para inspirarte y aprender nuevas formas de utilizar Arduino en tus creaciones.</p>



<p>En conclusión, al destacar las particularidades de Arduino, como sus funciones y métodos específicos, los lectores podrán comprender mejor cómo aprovechar al máximo el potencial de Arduino en sus proyectos electrónicos. Explorar las bibliotecas predefinidas, aprender sobre las funciones integradas y estar al tanto de la comunidad Arduino te abrir</p>
<p>The post <a href="https://huecat.es/funciones-y-metodos-integrados-en-arduino-ide/">Funciones y métodos integrados en Arduino IDE</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/funciones-y-metodos-integrados-en-arduino-ide/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Sintaxis de código Arduino IDE</title>
		<link>https://huecat.es/sintaxis-de-codigo-arduino/</link>
					<comments>https://huecat.es/sintaxis-de-codigo-arduino/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Sat, 06 May 2023 20:21:44 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Programación]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6499</guid>

					<description><![CDATA[<p>Arduino IDE utiliza un lenguaje de programación basado en el estándar de C++, aunque proporciona una serie de funciones y bibliotecas específicas para facilitar la interacción con los componentes electrónicos. Aunque existen algunas diferencias y limitaciones en comparación con el C++ estándar, los principios básicos de la sintaxis son los mismos. La sintaxis general para [&#8230;]</p>
<p>The post <a href="https://huecat.es/sintaxis-de-codigo-arduino/">Sintaxis de código Arduino IDE</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">Arduino IDE utiliza un lenguaje de programación basado en el estándar de C++, aunque proporciona una serie de funciones y bibliotecas específicas para facilitar la interacción con los componentes electrónicos. Aunque existen algunas diferencias y limitaciones en comparación con el C++ estándar, los principios básicos de la sintaxis son los mismos.</p>



<figure class="wp-block-image size-full"><a href="https://huecat.es/wp-content/uploads/2023/05/logaritmos-arduino-ide.jpg"><img decoding="async" width="1024" height="322" src="https://huecat.es/wp-content/uploads/2023/05/logaritmos-arduino-ide.jpg" alt="" class="wp-image-6676" srcset="https://huecat.es/wp-content/uploads/2023/05/logaritmos-arduino-ide.jpg 1024w, https://huecat.es/wp-content/uploads/2023/05/logaritmos-arduino-ide-300x94.jpg 300w, https://huecat.es/wp-content/uploads/2023/05/logaritmos-arduino-ide-768x242.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="has-medium-font-size">La sintaxis general para escribir el programa Arduino es casi similar a la del C y C++ ordinario. Aquellos que estén familiarizados con el C y C++ básico podrán comenzar a utilizarlo fácilmente.</p>



<p></p>



<p>Un programa Arduino se estructura principalmente en dos funciones: <code>setup()</code> y <code>loop()</code>. La función <code>setup()</code> se ejecuta una sola vez al inicio del programa y se utiliza para realizar la configuración inicial, como la inicialización de pines y la configuración de la comunicación serial. La función <code>loop()</code> es la parte principal del programa y se ejecuta continuamente en un ciclo infinito después de que <code>setup()</code> ha finalizado. Aquí es donde se colocan las instrucciones que se deben repetir una y otra vez, como leer sensores, tomar decisiones y controlar los actuadores.</p>



<p>La mayoría de las instrucciones en Arduino IDE siguen la estructura de la programación en C y C++. Por ejemplo, para asignar un valor a una variable, se utiliza el operador de asignación (<code>=</code>). Los operadores aritméticos como suma (<code>+</code>), resta (<code>-</code>), multiplicación (<code>*</code>), división (<code>/</code>) y módulo (<code>%</code>) también se utilizan de la misma manera.</p>



<p>Las estructuras de control como las condicionales (<code>if</code>, <code>else if</code>, <code>else</code>) y los bucles (<code>for</code>, <code>while</code>, <code>do-while</code>) se utilizan para tomar decisiones y repetir bloques de código, al igual que en C y C++. Estas estructuras permiten controlar el flujo del programa en función de ciertas condiciones o realizar iteraciones hasta que se cumpla una condición específica.</p>



<p>Además de la sintaxis básica, Arduino proporciona una amplia gama de bibliotecas predefinidas que contienen funciones listas para usar. Estas bibliotecas simplifican la interacción con dispositivos y módulos comunes, como sensores, pantallas LCD, motores, comunicación inalámbrica, entre otros. Al incluir una biblioteca específica, puedes aprovechar las funciones y métodos que ofrece para facilitar el desarrollo de tu proyecto.</p>



<p>En resumen, la sintaxis de código Arduino se basa en el lenguaje de programación C++ estándar, pero con algunas diferencias y bibliotecas adicionales. Aquellos familiarizados con C y C++ básico encontrarán que Arduino es fácil de aprender y utilizar. Con su sintaxis intuitiva y bibliotecas convenientes, Arduino se ha convertido en una plataforma popular para el desarrollo de proyectos electrónicos, desde simples experimentos hasta complejas aplicaciones embebidas.</p>
<p>The post <a href="https://huecat.es/sintaxis-de-codigo-arduino/">Sintaxis de código Arduino IDE</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/sintaxis-de-codigo-arduino/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Utilizar ambos núcleos de un ESP32</title>
		<link>https://huecat.es/utilizar-ambos-nucleos-de-un-esp32/</link>
					<comments>https://huecat.es/utilizar-ambos-nucleos-de-un-esp32/#comments</comments>
		
		<dc:creator><![CDATA[HUECAT]]></dc:creator>
		<pubDate>Sat, 06 May 2023 19:32:00 +0000</pubDate>
				<category><![CDATA[ESP32]]></category>
		<category><![CDATA[Programación]]></category>
		<guid isPermaLink="false">https://huecat.es/?p=6773</guid>

					<description><![CDATA[<p>FreeRTOS (Free Real-Time Operating System) es un sistema operativo de tiempo real de código abierto diseñado para sistemas embebidos y aplicaciones en tiempo real. Un sistema operativo es un software que administra los recursos del hardware y proporciona una interfaz para que las aplicaciones se ejecuten en un dispositivo, como un microcontrolador o microprocesador. En [&#8230;]</p>
<p>The post <a href="https://huecat.es/utilizar-ambos-nucleos-de-un-esp32/">Utilizar ambos núcleos de un ESP32</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>FreeRTOS (Free Real-Time Operating System) es un sistema operativo de tiempo real de código abierto diseñado para sistemas embebidos y aplicaciones en tiempo real. Un sistema operativo es un software que administra los recursos del hardware y proporciona una interfaz para que las aplicaciones se ejecuten en un dispositivo, como un microcontrolador o microprocesador.</p>



<p>En el contexto de los microcontroladores, como el ESP32, los sistemas operativos en tiempo real (RTOS) como FreeRTOS son útiles para administrar tareas concurrentes que deben ejecutarse de manera independiente y en un orden específico. Esto permite que las tareas se ejecuten en paralelo y que el sistema pueda responder rápidamente a eventos en tiempo real.</p>



<p>Las tareas son como pequeños programas que se ejecutan de forma independiente y tienen su propia parte de la memoria (pila) para almacenar datos locales y trabajar en una tarea específica. Un RTOS permite que las tareas compartan el tiempo de ejecución del procesador, lo que permite una mejor utilización de los recursos del sistema.</p>



<p></p>



<p>En FreeRTOS, <code>xTaskCreatePinnedToCore</code> es una función utilizada para crear tareas que se ejecutarán en un núcleo de procesador específico en sistemas multi-núcleo, como el ESP32.</p>



<p></p>



<p>Se utiliza FreeRTOS para crear dos tareas: <code>parpadearLedNucleo0</code> y <code>parpadearLedNucleo1</code>. Cada tarea controla un LED y los hace parpadear con diferentes intervalos de tiempo. Al usar FreeRTOS, estas tareas se pueden ejecutar en núcleos diferentes del ESP32, lo que permite que las tareas de parpadeo se realicen en paralelo sin bloquear la ejecución del programa principal.</p>



<p>FreeRTOS también proporciona mecanismos para sincronización y comunicación entre tareas, lo que permite que las tareas se comuniquen y cooperen en la resolución de problemas complejos.</p>



<p></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: csharp; title: ; notranslate">
const int ledPinNucleo0 = 2;
const int ledPinNucleo1 = 4;

void parpadearLedNucleo0(void *parameter) {
  (void)parameter; // Ignorar el parámetro, ya que no lo usamos en este ejemplo

  while (true) {
    digitalWrite(ledPinNucleo0, HIGH);
    Serial.println(&quot;LED Núcleo 0 encendido&quot;);
    delay(500);
    digitalWrite(ledPinNucleo0, LOW);
    Serial.println(&quot;LED Núcleo 0 apagado&quot;);
    delay(500);
  }
}

void parpadearLedNucleo1(void *parameter) {
  (void)parameter; // Ignorar el parámetro, ya que no lo usamos en este ejemplo

  while (true) {
    digitalWrite(ledPinNucleo1, HIGH);
    Serial.println(&quot;LED Núcleo 1 encendido&quot;);
    delay(300);
    digitalWrite(ledPinNucleo1, LOW);
    Serial.println(&quot;LED Núcleo 1 apagado&quot;);
    delay(300);
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(ledPinNucleo0, OUTPUT);
  pinMode(ledPinNucleo1, OUTPUT);

  xTaskCreatePinnedToCore(parpadearLedNucleo0, &quot;Nucleo 0 LED&quot;, 10000, NULL, 1, NULL, 0);
  xTaskCreatePinnedToCore(parpadearLedNucleo1, &quot;Nucleo 1 LED&quot;, 10000, NULL, 1, NULL, 1);
}

void loop() {
  // Nada que hacer en loop, ya que las tareas se encargan del parpadeo de los LEDs
}

</pre></div>


<p>Con estos cambios, se mostrarán mensajes en el monitor serie cada vez que los LEDs cambien de estado, lo que te permitirá verificar el funcionamiento correcto del código y seguir el comportamiento de los LEDs. Recuerda que necesitarás abrir el Monitor Serie en el IDE de Arduino para ver los mensajes que se imprimen.</p>
<p>The post <a href="https://huecat.es/utilizar-ambos-nucleos-de-un-esp32/">Utilizar ambos núcleos de un ESP32</a> appeared first on <a href="https://huecat.es">HUE CAT INGENIERÍA ESPAÑA</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://huecat.es/utilizar-ambos-nucleos-de-un-esp32/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
	</channel>
</rss>
