IoT e IA

¿Qué es TinyML? Machine learning en microcontroladores explicado

TinyML es machine learning en microcontroladores que funcionan con milivatios y kilobytes. Esta guía explica las limitaciones, los frameworks, los casos de uso reales y por qué los dispositivos diminutos publican resultados de inferencia compactos por MQTT.

Ilustración de qué es TinyML: una placa con microcontrolador ejecuta una pequeña red neuronal y publica un breve mensaje de inferencia por MQTT
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

¿Qué es TinyML? Es machine learning que se ejecuta en microcontroladores, la misma clase de chips que hay dentro de termostatos, wearables y nodos de sensores, con memoria que se mide en kilobytes y un consumo que se mide en milivatios. Esta guía explica qué diferencia a TinyML de otras formas de edge AI, qué frameworks y placas usar, los casos de uso en los que destaca y por qué estos dispositivos deben publicar resultados de inferencia compactos por MQTT en lugar de datos de sensor en bruto.

TinyML en pocas palabras

Un microcontrolador (MCU) es un pequeño ordenador en un único chip: un procesador, algo de RAM, almacenamiento flash y periféricos para sensores. No hay sistema operativo en el sentido de un ordenador de escritorio, ni runtime de Python, y a menudo tampoco hardware de coma flotante. TinyML es el conjunto de técnicas que hacen que una red neuronal entrenada sea lo bastante pequeña y eficiente como para ejecutarse en ese entorno, de forma continua y, a menudo, con batería.

El resultado es un sensor que entiende lo que mide. En lugar de transmitir audio en bruto, un nodo de micrófono con TinyML informa de "palabra clave detectada". En lugar de muestrear vibración a alta frecuencia y subirla, un nodo de motor informa de "desequilibrio, confianza 0,9". TinyML es un subconjunto de edge AI; si primero quieres la visión general, lee qué es edge AI.

Las limitaciones que definen TinyML

Recurso Dispositivo TinyML típico Dispositivo edge típico con Linux
RAM De decenas a cientos de KB, a veces unos pocos MB de PSRAM Gigabytes
Almacenamiento De cientos de KB a unos pocos MB de flash Gigabytes
Cómputo Uno o dos núcleos, de decenas a cientos de MHz CPU multinúcleo a GHz, a veces GPU/NPU
Consumo Milivatios; puede funcionar con una pila de botón o una batería pequeña Vatios
Software Bare metal o RTOS, C/C++ Sistema operativo completo, Python, contenedores
Tamaño del modelo Rango de KB Rango de MB a GB

Estos límites condicionan todas las decisiones de diseño:

  1. Los modelos deben ser pequeños. Lo habitual son pequeñas redes convolucionales o densas con decenas de miles de parámetros.
  2. Aritmética entera. Los modelos se cuantizan a enteros de 8 bits, lo que reduce su tamaño aproximadamente a la cuarta parte frente a los flotantes de 32 bits y se ejecuta rápido en chips sin unidad de coma flotante o con instrucciones SIMD.
  3. Memoria estática. No hay asignación dinámica durante la inferencia. Los frameworks usan un bloque de memoria fijo (la tensor arena) dimensionado en tiempo de compilación.
  4. La extracción de características importa. Las señales en bruto se convierten en características compactas, como un espectrograma para el audio o el valor RMS y los picos espectrales para la vibración, antes de que el modelo las vea.

Cómo se construye un modelo TinyML

El flujo de trabajo es el de cualquier proyecto de ML, con un ajuste extra al final:

  1. Recoge datos de sensor etiquetados del dispositivo real en el entorno real.
  2. Diseña las características y un modelo pequeño, normalmente en TensorFlow/Keras o en una plataforma como Edge Impulse.
  3. Entrena y valida en una estación de trabajo o en la nube.
  4. Convierte y cuantiza el modelo, por ejemplo a un archivo .tflite con cuantización int8 completa.
  5. Incrusta el modelo en el firmware como un array de bytes y enlaza el runtime de inferencia.
  6. Mide en el dispositivo: tiempo de inferencia, uso de RAM (tamaño de la arena), uso de flash y precisión.
  7. Itera. Reducir la ventana de entrada o el número de características suele ayudar más que reducir la red.

Frameworks y herramientas de TinyML

  • TensorFlow Lite for Microcontrollers (ahora parte de la familia LiteRT de Google): el runtime abierto más utilizado. Cargas un modelo flatbuffer, registras solo los operadores que necesitas y ejecutas un intérprete sobre una arena estática. Consulta la guía de inicio de TensorFlow Lite Micro.
  • Edge Impulse: una plataforma integral para recoger datos, diseñar características, entrenar y exportar una librería C++ o una librería de Arduino para una placa de destino. Consulta el tutorial de Edge Impulse con MQTT.
  • Librerías de fabricantes: Arm CMSIS-NN ofrece kernels optimizados para Cortex-M; Espressif ofrece ESP-DL y una adaptación de TensorFlow Lite Micro optimizada para ESP32 (esp-tflite-micro); otros fabricantes de silicio tienen sus propias cadenas de herramientas.
  • Las librerías de Arduino y PlatformIO facilitan combinar la inferencia con los drivers de sensores y la conectividad en placas para aficionados.

Placas populares para TinyML

Las placas ESP32-S3 son una opción habitual para TinyML conectado porque combinan, en un solo chip económico, instrucciones vectoriales útiles para los kernels de redes neuronales, PSRAM opcional y Wi-Fi integrado. La Arduino Nano 33 BLE Sense y otras placas Cortex-M4 similares con sensores integrados son populares para aprender, y la familia Raspberry Pi Pico ofrece una opción Cortex-M de bajo coste. Las placas sin Wi-Fi también pueden formar parte de un sistema IoT enviando los resultados por puerto serie o Bluetooth a un gateway. Para una comparación directa entre clases de dispositivos, incluidos los aceleradores, consulta hardware para edge AI comparado.

En qué destaca TinyML

  • Detección de palabras clave y eventos sonoros: palabras de activación, alarmas, rotura de cristales, ruidos anómalos de máquinas.
  • Reconocimiento de movimiento y gestos a partir de acelerómetros y giroscopios en wearables y herramientas.
  • Mantenimiento predictivo: clasificación de patrones de vibración en motores, bombas y ventiladores.
  • Visión sencilla: presencia de personas, lectura de dígitos u "objeto presente" con cámaras de baja resolución en placas con PSRAM.
  • Monitorización ambiental: inferir ocupación o anomalías a partir de patrones de gases, temperatura y humedad.

TinyML no es adecuado para tareas que requieren vocabularios amplios, imágenes de alta resolución, contexto largo o cambios frecuentes del modelo. Esas tareas corresponden a un gateway o a la nube.

Por qué los dispositivos TinyML publican resultados compactos por MQTT

Los nodos TinyML conectados se enfrentan a dos límites a la vez: un cómputo diminuto y un tiempo de radio caro. En los dispositivos con batería, la radio suele consumir mucha más energía que la inferencia. Enviar un mensaje corto solo cuando ocurre algo interesante es el mayor ahorro de energía y de ancho de banda posible.

MQTT encaja con ese patrón. La sobrecarga del protocolo es pequeña, librerías cliente como PubSubClient y esp-mqtt funcionan con holgura en MCU y el broker distribuye cada mensaje a quien lo necesite. Un mensaje de inferencia TinyML típico ocupa bastante menos de 200 bytes:

{"dev":"fan-12","m":"vib-v2","label":"imbalance","p":0.91,"ms":7}

Las claves cortas son una elección deliberada en dispositivos limitados. Combínalas con un topic que aporte el contexto, como plant1/hvac/ahu3/fan-12/inference, y con un topic de estado retenido con Last Will para que los paneles sepan cuándo se desconecta el nodo. En el lado receptor, un broker MQTT permite que paneles, alertas y analítica en la nube se suscriban sin que el dispositivo sepa de su existencia.

Un patrón mínimo de publicación para microcontroladores

El bucle principal en un ESP32 con PubSubClient tiene este aspecto. La llamada de inferencia es un marcador de posición; el tutorial de TinyML en ESP32 muestra un modelo completo funcionando.

// Se llama tras cada inferencia; publica solo si hay cambio o cada 60 s.
void reportResult(PubSubClient &mqtt, const char *topic, const char *label, float p) {
  static char lastLabel[24] = "";
  static unsigned long lastSent = 0;
  if (strcmp(label, lastLabel) == 0 && millis() - lastSent < 60000) return;

  char payload[96];
  snprintf(payload, sizeof(payload),
           "{\"dev\":\"fan-12\",\"m\":\"vib-v2\",\"label\":\"%s\",\"p\":%.2f}", label, p);
  if (mqtt.publish(topic, payload)) {
    strncpy(lastLabel, label, sizeof(lastLabel) - 1);
    lastSent = millis();
  }
}

Puedes probar un nodo así con el servidor MQTT público gratuito en broker.connectmq.com, puerto 1883, con cualquier client ID único y un prefijo de topic único. Recuerda que cualquiera puede leer el área pública, así que pasa los despliegues reales a credenciales privadas, como un broker de ConnectMQ con TLS en el puerto 8883.

Errores habituales en TinyML

  1. Entrenar solo con datos de laboratorio. El montaje, la temperatura y el ruido de fondo sobre el terreno cambian la señal.
  2. Ignorar el tamaño de la arena. Si AllocateTensors() falla, la arena es demasiado pequeña; mide la necesidad real y añade un margen.
  3. Operadores no soportados. No todas las capas de TensorFlow tienen un kernel para microcontroladores. Comprueba los operadores del modelo convertido antes de diseñar en torno a ellos.
  4. Publicar cada inferencia. Un modelo que se ejecuta diez veces por segundo no debe publicar diez mensajes por segundo; agrega o publica cuando haya cambios.
  5. Sin versión del modelo. Inclúyela en cada mensaje para poder rastrear el comportamiento tras una actualización OTA.

Para ver cómo encaja TinyML en un sistema completo con analítica en la nube y agentes basados en LLM, lee la guía de IA e IoT.

Empieza con ConnectMQ

Cuando tu nodo TinyML funcione en el banco de trabajo, dale un hogar seguro. ConnectMQ es un broker MQTT gestionado con TLS en el puerto 8883, compatibilidad con MQTT 3.1.1 y 5.0 y un explorador de topics en directo para ver llegar los mensajes de inferencia. Crea un broker con el plan Serverless gratuito en app.connectmq.com, sin tarjeta de crédito.

Preguntas frecuentes

¿Para qué se usa TinyML?

TinyML se usa para tareas de detección siempre activas en dispositivos de bajo consumo, como la detección de palabras clave, el reconocimiento de gestos, la detección de fallos basada en vibraciones y la detección sencilla de presencia.

¿Puede un ESP32 ejecutar TinyML?

Sí. La familia ESP32, en especial el ESP32-S3 con instrucciones vectoriales y opciones de PSRAM, ejecuta modelos de TensorFlow Lite Micro y Edge Impulse y puede publicar resultados por Wi-Fi con MQTT.

¿TinyML es lo mismo que edge AI?

TinyML es una parte de edge AI centrada en los microcontroladores. Edge AI abarca también dispositivos más grandes, como ordenadores de placa única, aceleradores y módulos con GPU.

¿Los modelos TinyML necesitan internet?

No. La inferencia se ejecuta por completo en el dispositivo. La conectividad solo hace falta para informar de los resultados, recibir configuración o actualizar el modelo.

Artículos relacionados

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.