Programar tarjetas IoT sin complicar al equipo de campo

Equipo Yubox
Equipo Yubox
29 de July, 2026
IoT Hardware Guías
Programar tarjetas IoT sin complicar al equipo de campo

Un despliegue IoT no lo instala el desarrollador que escribió el firmware: lo instala un técnico de campo que quizás nunca abrió Arduino IDE ni sabe qué es un toolchain. Si programar cada tarjeta requiere compilar código, editar credenciales en el fuente y usar la línea de comandos, ese técnico depende de alguien remoto para cada instalación —y cada error de compilación en el sitio detiene la obra. Este artículo explica, con los detalles reales de un microcontrolador ESP32, cómo se separa la parte que exige a un desarrollador de la que puede hacer cualquier persona del equipo de campo con una laptop y un cable USB.

Por qué programar un ESP32 no es solo “subir el código”

Cuando alguien flashea una tarjeta ESP32 desde Arduino IDE o PlatformIO, en realidad está grabando tres piezas distintas en direcciones específicas de la memoria flash: el bootloader en el offset 0x1000, la tabla de particiones en 0x8000, y la aplicación en 0x10000 (64 KB), alineada a bloques de esa misma medida porque así lo exige el diseño de particiones de ESP-IDF. Todo esto lo hace por debajo esptool, la herramienta de línea de comandos de Espressif que además negocia la velocidad de transferencia con el chip —desde 9.600 hasta 921.600 baudios, según qué tan estable sea la conexión USB-serial del cable que se esté usando.

El problema de campo no es que esto sea difícil de automatizar una vez: es que un instalador necesita repetirlo en veinte, cien o quinientas tarjetas, sin depender de tener el proyecto de código abierto en su máquina, la versión correcta de las herramientas de Espressif instalada, y sin arriesgarse a flashear la partición equivocada y dejar la tarjeta en un estado que no arranca.

Flashear sin cadena de compilación

La forma de resolver esto en producción es separar quién compila el firmware (una sola vez, en desarrollo) de quién lo graba en cada tarjeta (muchas veces, en campo). Yubox Toolbox sigue exactamente ese modelo: es una aplicación de escritorio para macOS, Windows y Linux donde el técnico elige el modelo de tarjeta —por ejemplo un Yubox Industrial— y el firmware de una lista, y la app descarga el binario correspondiente, calcula los offsets de bootloader, tabla de particiones y aplicación, y graba las tres piezas en una sola pasada. No hace falta instalar Arduino IDE, PlatformIO ni esptool por separado: la aplicación descarga esas herramientas de Espressif la primera vez que las necesita.

Esto cambia quién puede hacer la instalación: en vez de un desarrollador con el repositorio del firmware clonado, cualquier persona del equipo de campo con la laptop y un cable USB puede dejar una tarjeta lista, siguiendo el mismo flujo cada vez.

Configurar sin recompilar: el rol de la partición NVS

El error más común al escalar de un prototipo a una flota de tarjetas es grabar las credenciales de WiFi o las claves LoRaWAN dentro del código fuente, lo que obliga a compilar un binario distinto por cada dispositivo. La alternativa correcta es escribir esos valores en la partición NVS (Non-Volatile Storage) del ESP32, separada de la partición de aplicación: el mismo binario de firmware sirve para toda la flota, y lo que cambia entre tarjetas es solo el contenido de esa partición.

Yubox Toolbox aplica esto mismo desde su formulario de configuración: antes de flashear, el técnico completa credenciales de WiFi o claves LoRaWAN (DevEUI, AppEUI, AppKey) en campos de texto, y esos valores se escriben en la NVS al momento de grabar, sin tocar una línea de código. Es el mismo principio que usa YuboxNow una vez que el nodo ya está en campo: la configuración vive en el dispositivo, nunca en el firmware.

Programar lógica sin escribir código

Hay un tercer nivel, más allá de flashear y configurar: qué hace la tarjeta con sus pines. Para routinas simples —encender un relé bajo una condición, leer un sensor y mostrarlo en una pantalla OLED, repetir una secuencia— escribir y compilar C++ es una sobrecarga innecesaria para alguien que solo necesita ajustar un umbral o probar una idea en campo. El editor de bloques de Yubox Toolbox arma esa lógica encajando piezas visuales —GPIO, relés, sensores, pantalla OLED, envío por WiFi, LoRaWAN, RS485 o serial— y guarda la rutina como un archivo JSON que se puede descargar, compartir con otro técnico y volver a cargar para seguir editándola. No reemplaza un firmware de producción complejo, pero cubre el rango de casos donde antes hacía falta escribir código para algo que en realidad es una secuencia de pasos simple.

Diagnosticar en el sitio, sin volver a la oficina

Cuando una tarjeta no se une a la red LoRaWAN o el sensor no responde, la pregunta de campo es “¿qué está pasando ahora mismo adentro del chip?”. El monitor serie integrado muestra en vivo lo que imprime el firmware —con marca de tiempo en cada línea— y permite enviarle comandos, así que confirmar si el WiFi conectó o si un join OTAA se completó no requiere salir de la misma aplicación con la que se flasheó la tarjeta. El lector de particiones va un paso más allá: consulta la tabla real grabada en el chip —tipo, subtipo, offset y tamaño de cada partición: nvs, otadata, app0, app1, spiffs— y decodifica el contenido de la NVS con sus claves y valores, para verificar qué configuración quedó efectivamente grabada sin adivinar.

Por qué la tabla de particiones ya trae las dos ranuras de OTA

Vale la pena notar algo que suele pasar desapercibido en esa tabla de particiones: junto a la partición de aplicación normal (factory o app0), un esquema con soporte de actualización remota reserva una segunda ranura de aplicación (app1 o ota_0/ota_1) y una partición pequeña llamada otadata. Esa partición guarda un contador (ota_seq) que le dice al bootloader cuál de las dos ranuras debe arrancar; una actualización por aire (OTA) escribe el firmware nuevo en la ranura que no está activa y, si el nuevo firmware falla al iniciar, el bootloader puede volver a la ranura anterior en vez de dejar la tarjeta sin arrancar. Diseñar el firmware de fábrica con esta tabla de particiones —aunque el proyecto todavía no use actualizaciones remotas— es lo que permite, más adelante, actualizar cientos de tarjetas ya instaladas en campo sin enviar a nadie a desconectarlas y volver a flashearlas por USB una por una.

Conclusión

Programar una tarjeta IoT para una flota real tiene tres capas que conviene separar: flashear el binario (offsets de bootloader, particiones y aplicación, resueltos por una herramienta y no a mano), configurar sin recompilar (credenciales en la partición NVS, no en el código fuente) y, opcionalmente, programar lógica simple sin escribir C++ (un editor de bloques). Cuando esas tres capas están resueltas por una aplicación de escritorio en vez de una cadena de compilación completa, el equipo de campo deja de depender de un desarrollador para cada instalación —y el desarrollador se queda libre para lo que sí necesita su tiempo: el firmware en sí.

¿Va a desplegar una flota de tarjetas IoT y quiere simplificar cómo las programa e instala su equipo de campo? Descargue Yubox Toolbox o conversemos sobre su proyecto.