Durante una demostración en vivo ante un jurado o inversores, introducirás tu equipo en un entorno radioeléctrico nuevo. Los inversores usarán micrófonos inalámbricos, habrá proyectores induciendo ruido electromagnético en la sala, y la red Wi-Fi estará saturada. Si tu telemetría o tus buses de datos fallan aquí, todo el trabajo previo será cuestionado. El Toolbox de Despliegue es la doctrina de la redundancia: cables apantallados, terminaciones resistivas comprobadas y puertos de depuración expuestos pero seguros.
No confíes exclusivamente en tu conexión de AWS IoT para la presentación. Si el firewall del edificio bloquea el puerto MQTT (8883), te quedarás ciego. Tu máquina debe inyectar una trama ASCII local a través de una interfaz serial física (USB a UART/RS485) conectada a tu computadora, ejecutando un software de monitoreo local (como Tera Term, PuTTY, o un Dashboard en Python/Grafana local). La latencia debe ser cero.
Paso 1: Validación Física de la Red (Capa 1).
Antes de abrir el software en la computadora, usa tu multímetro. Mide la resistencia entre los cables CAN_H y CAN_L (o A y B en RS485) con el sistema apagado. Debe leer exactamente 60 Ohmios (dos resistencias de 120 Ohms en paralelo en los extremos). Si lee 120 Ohms, te falta un terminador y la señal rebotará en la demo. Si lee 0, tienes un cortocircuito.
Paso 2: Trama ASCII Pre-formateada en el STM32.
En el día de la presentación, no quieres que tu procesador Bare-Metal pierda tiempo armando cadenas de texto complejas ni usando funciones pesadas como `sprintf()`. Utilizaremos nuestras funciones algorítmicas de Punto Fijo (desarrolladas en los días 336/340) para convertir la telemetría en un flujo de bytes ASCII extremadamente rápido y directo. El Dashboard en la computadora será quien haga el trabajo pesado de dibujar las gráficas.
Este código inyecta el estado completo de la máquina en el bus serial. Notarás la ausencia deliberada de la librería estándar, aplicando la disciplina de memoria estricta exigida en un sistema metrológico.
/**
* @file demo_telemetry_validator.c
* @brief Empaquetado ligero de datos para monitoreo local en tiempo real
* Diseñado para evitar la sobrecarga de stdio.h (cero uso de sprintf).
*/
#include "stm32f4xx_hal.h"
#include <string.h>
// Variables críticas de la máquina
extern uint64_t total_volume_mL;
extern int32_t fluid_temperature_fixed; // Ej. 2450 = 24.50 C
extern uint8_t current_system_state; // Máquina de estados (IDLE, PUMPING, ERROR)
extern UART_HandleTypeDef huart2; // Puerto hacia la PC de monitoreo
// Prototipo de nuestra utilidad de punto fijo (creada en Fase 5)
extern uint8_t Fast_IntToStr_FixedPoint(uint32_t value, char* buffer, uint8_t decimal_places);
// =========================================================================
// TRANSMISIÓN DE TRAMA DE DIAGNÓSTICO EN VIVO
// =========================================================================
/**
* @brief Ensambla y transmite el latido local. Ejecutado a 5 Hz.
*/
void Broadcast_Demo_Telemetry(void) {
char tx_buffer[64];
char temp_str[15];
char vol_str[15];
// 1. Convertir datos matemáticos sin floats
// El volumen está en mililitros, lo pasamos a Litros con 3 decimales
Fast_IntToStr_FixedPoint((uint32_t)total_volume_mL, vol_str, 3);
// La temperatura ya viene multiplicada por 100
Fast_IntToStr_FixedPoint((uint32_t)fluid_temperature_fixed, temp_str, 2);
// 2. Ensamblaje manual de la trama (Ahorrando memoria flash y ciclos CPU)
strcpy(tx_buffer, "[SYNC] VOL:");
strcat(tx_buffer, vol_str);
strcat(tx_buffer, "L TMP:");
strcat(tx_buffer, temp_str);
strcat(tx_buffer, "C ST:");
// Inyectar el estado del sistema en un solo caracter para parseo rápido en la PC
char state_char[2] = { '0' + current_system_state, '\0' };
strcat(tx_buffer, state_char);
strcat(tx_buffer, "\r\n"); // Fin de trama
// 3. Transmisión No Bloqueante
// Enviar el paquete a la interfaz serial de la computadora de monitoreo.
HAL_UART_Transmit_IT(&huart2, (uint8_t*)tx_buffer, strlen(tx_buffer));
}
Objetivo del día: Eliminar los vectores de fallo físico y lógico antes de exponer la máquina al escrutinio del jurado o inversor.
Puedes ser el mejor programador de C del mundo, pero si el día de tu defensa llegas sin un cable de red de repuesto, una resistencia terminadora de 120 ohmios, o un multímetro para probar las tierras, estás jugando a la ruleta rusa. Los entornos de presentación están saturados de ruido eléctrico y las fuentes de alimentación de las aulas suelen ser inestables.
Al preparar este Toolbox de Despliegue, demuestras el máximo nivel de madurez ingenieril: la paranoia preventiva. Al separar el "Cerebro" (que corre en tu STM32 y solo escupe texto crudo a alta velocidad) del "Espectáculo" (que corre en tu computadora portátil dibujando gráficas coloridas de los datos recibidos), aíslas el riesgo. Si la computadora del jurado se congela, tu máquina sigue despachando gas sin enterarse. Has construido una muralla entre el procesamiento de misión crítica y la visualización externa.