Índice
1. Introducción
En Izertis sabemos que la tecnología base marca la diferencia entre un prototipo y un producto fiable. Por eso, cuando desarrollamos dispositivos conectados y de bajo consumo, apostamos por Zephyr: un sistema operativo que nos permite crear soluciones sólidas y afrontar retos en sectores muy diversos, adaptándose a múltiples casos de uso incluso en entornos exigentes.
2. Qué es Zephyr
Zephyr es un sistema operativo en tiempo real (RTOS) diseñado para dispositivos embebidos: el “cerebro” que vive dentro de productos como sensores, localizadores, wearables, dispositivos médicos, electrónica industrial o soluciones de movilidad conectada.

Es modular, eficiente y orientado a producto. Además, es open source y cuenta con la gobernanza y el respaldo de la Linux Foundation, lo que garantiza su evolución constante, una comunidad activa y soporte a largo plazo.
3. Ventajas que marcan la diferencia
Zephyr nos permite conectar y controlar prácticamente cualquier componente que un producto moderno necesite, de forma ordenada, escalable y mantenible. Estas son algunas de sus fortalezas más relevantes:
Modularidad
Se compila únicamente lo necesario mediante su sistema de configuración (Kconfig y prj.conf). Esto permite construir firmware más ligero, rápido y optimizado para cada dispositivo, reduciendo el consumo de memoria y mejorando el rendimiento.
Ecosistema amplio de drivers
Incluye soporte para sensores, almacenamiento, buses de comunicación y conectividad. Esto reduce tiempos de desarrollo y riesgos técnicos, al evitar implementar desde cero funcionalidades ya probadas por la comunidad.
Seguridad y estabilidad
Es un proyecto revisado y mantenido por una comunidad amplia y activa. Incorpora buenas prácticas habituales en producto, como actualizaciones seguras (OTA), arranque verificado y mecanismos de aislamiento, según las necesidades del caso.
Escalabilidad real de prototipo a producto
Permite comenzar en placas de desarrollo y evolucionar hacia hardware propio sin reescribir la lógica principal del firmware, desacoplando aplicación y hardware mediante DeviceTree y drivers internos.
Respaldo industrial
Cuenta con el apoyo de múltiples fabricantes de semiconductores y con la gobernanza de la Linux Foundation, lo que garantiza continuidad, mantenimiento a largo plazo y compatibilidad con nuevas plataformas.
En conjunto, estas características convierten a Zephyr en una base sólida para desarrollar dispositivos conectados preparados para entornos exigentes y ciclos de vida largos.
4. Lo que podemos construir con Zephyr
La versatilidad de Zephyr facilita el desarrollo de soluciones que integran múltiples tecnologías dentro de un mismo dispositivo, manteniendo una arquitectura limpia y escalable. Algunos ejemplos de lo que puede incorporar un producto basado en Zephyr:
- GPS / GNSS para geolocalización precisa.
- Conectividad (4G, NB-IoT, LTE-M, WiFi, Bluetooth) para comunicación con la nube o entre dispositivos.
- Sensores (movimiento, temperatura, humedad, presión, luz, etc.) para aplicaciones de salud, seguridad o control ambiental.
- Interfaces de usuario como LEDs, pantallas o botones físicos.
- Buses industriales (CAN, I2C, SPI, UART) para integración con maquinaria, vehículos u otros sistemas electrónicos.
- Almacenamiento y registro de datos para trazabilidad y análisis posterior.
- Actualizaciones OTA que permiten mantener el firmware actualizado sin intervención física.
Esta combinación permite construir desde dispositivos IoT de bajo consumo hasta soluciones industriales robustas, adaptadas a entornos reales y exigentes.
5. Por qué Zephyr frente a otras tecnologías
La palabra clave es equilibrio. Zephyr combina la ligereza de un RTOS —ideal para sistemas con recursos limitados y bajo consumo— con un ecosistema moderno pensado para proyectos reales y entornos de producción.
En la práctica:
Frente a entornos orientados a prototipos
Zephyr está diseñado con mentalidad de producto: mantenibilidad, escalabilidad, soporte amplio de placas y periféricos, y una estructura de proyecto clara desde el inicio.
Frente a otros RTOS tradicionales
Ofrece un entorno más integrado (drivers, configuración y estructura del proyecto unificados), lo que puede acelerar el desarrollo y reducir la fragmentación habitual. Además, al ser open source, evita el bloqueo de proveedor presente en algunas soluciones comerciales.
Frente a Linux embebido
Resulta más adecuado cuando se busca bajo consumo, arranque rápido y un footprint reducido. Es especialmente útil en dispositivos que no requieren la complejidad de un sistema Linux completo.
Además, Zephyr utiliza conceptos familiares para equipos con experiencia en Linux embebido, como:
- DeviceTree (DTS y overlays) para describir el hardware.
- Kconfig / prj.conf para habilitar funcionalidades y ajustar el sistema.
- Configuraciones por placa similares a un defconfig.
Esto facilita la adopción y permite mantener una filosofía de desarrollo reproducible, ordenada y orientada a producto.
6. Un ejemplo que demuestra por qué Zephyr escala mejor que el típico firmware
Una de las ventajas más diferenciales de Zephyr es que permite desacoplar la lógica del producto del hardware concreto. En lugar de “hardcodear” pines y gestionar interrupciones manualmente —como ocurre en muchos firmwares tradicionales— Zephyr permite describir el hardware en DeviceTree y apoyarse en drivers internos ya implementados.
El resultado: menos código, menor riesgo y mayor portabilidad al cambiar de placa o evolucionar hacia hardware propio.
Para ilustrarlo de forma práctica, veremos un ejemplo sencillo dividido en tres pasos progresivos:
- Encender y apagar un LED mediante un botón utilizando drivers internos.
- Añadir un segundo periférico sin rehacer la lógica del firmware.
- Cambiar de placa sin modificar el código de aplicación.
Con ello veremos cómo Zephyr permite evolucionar un proyecto manteniendo la arquitectura limpia y desacoplada del hardware concreto.
Paso 1 — LED con botón usando drivers internos
En este ejemplo utilizamos:
gpio-ledspara describir LEDs como salidas GPIOgpio-keyspara generar eventos de entrada sin escribir ISR manuales
Primero habilitamos los módulos necesarios en prj.conf:
|
INI
|
|
|---|---|
|
# GPIO base
CONFIG_GPIO=y # Driver interno: gpio-keys -> eventos de input (evita ISR manual) CONFIG_INPUT=y CONFIG_INPUT_GPIO_KEYS=y # Logging por consola (util para el tutorial) CONFIG_LOG=y CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y |
|
Aquí activamos GPIO, el subsistema INPUT y el logging por consola.
A continuación, la aplicación en C se apoya en el subsistema de entrada sin necesidad de conocer números de pin, configurar pull-ups a mano, ni gestionar interrupciones:
|
C
|
|
|---|---|
|
#include <zephyr/kernel.h>
#include <zephyr/logging/log.h> #include <zephyr/device.h> #include <zephyr/drivers/gpio.h> #include <zephyr/input/input.h> LOG_MODULE_REGISTER(app, LOG_LEVEL_INF); #define LED0_NODE DT_ALIAS(led0) #if !DT_NODE_HAS_STATUS(LED0_NODE, okay) #error "No hay alias led0 en el DeviceTree" #endif static const struct gpio_dt_spec led0 = GPIO_DT_SPEC_GET(LED0_NODE, gpios); static bool led_on; static void set_led(bool on) { led_on = on; gpio_pin_set_dt(&led0, on ? 1 : 0); } static void toggle_led(void) { set_led(!led_on); } /* Este callback lo llama el subsistema INPUT cuando gpio-keys genera un evento */ static void input_cb(struct input_event *evt) { /* Nota: evt->code sale de zephyr,code del DeviceTree (0x01) */ if (evt->type == INPUT_EV_KEY && evt->code == 0x01 && evt->value == 1) { LOG_INF("Botón pulsado -> toggle LED"); toggle_led(); } } INPUT_CALLBACK_DEFINE(NULL, input_cb); int main(void) { if (!device_is_ready(led0.port)) { LOG_ERR("LED GPIO no está listo"); return 0; } if (gpio_pin_configure_dt(&led0, GPIO_OUTPUT_INACTIVE) != 0) { LOG_ERR("No se pudo configurar el LED"); return 0; } set_led(false); LOG_INF("Listo. Pulsa el botón para encender/apagar el LED."); return 0; } |
|
El callback input_cb() recibe el evento generado por gpio-keys y simplemente alterna el estado del LED.
Paso 2 — Añadir otro periférico sin rehacer el firmware
Para escalar el firmware añadimos un segundo LED.
La clave es que el cambio principal ocurre en el DeviceTree overlay, no en la lógica de aplicación.
|
C
|
|
|---|---|
|
/ {
aliases { led0 = &user_led0; led1 = &user_led1; sw0 = &user_button0; }; leds { compatible = "gpio-leds"; user_led0: led_0 { gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; label = "USER_LED0"; }; user_led1: led_1 { gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; label = "USER_LED1"; }; }; keys { compatible = "gpio-keys"; user_button0: button_0 { gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; label = "USER_BUTTON0"; zephyr,code = <0x01>; }; }; }; |
|
Aquí:
- Declaramos
led0yled1engpio-leds - Declaramos
sw0engpio-keys - Asociamos los alias (
led0,led1,sw0) que la aplicación utiliza
La aplicación no necesita conocer números de pin ni configuración eléctrica. Solo trabaja con alias.
Este patrón permite que el firmware crezca sin convertirse en un código rígido y difícil de mantener.
Paso 3 — Cambiar de placa: nRF52840 DK a nRF9160 DK
El último paso demuestra la verdadera escalabilidad: compilamos el mismo proyecto para dos placas distintas sin modificar el código C.
|
Bash
|
|
|---|---|
|
# nRF52840 DK
west build -b nrf52840dk/nrf52840 -p always . west flash # nRF9160 DK west build -b nrf9160dk/nrf9160 -p always . west flash |
|
El cambio de hardware se resuelve en el overlay específico de cada placa.
La aplicación permanece intacta.
Este enfoque es exactamente el que permite evolucionar un proyecto desde:
- Placa de desarrollo
- Prototipo funcional
- Hardware propio
Sin que el firmware se convierta en un conjunto de dependencias rígidas ligadas a un microcontrolador concreto.
Ahí es donde Zephyr demuestra su ventaja frente al “firmware típico” escrito directamente contra registros y pines físicos.
7. Nuestro modo de trabajar con Zephyr
En Izertis abordamos los proyectos con Zephyr con una visión integral: no solo desarrollamos firmware, sino que construimos una base tecnológica preparada para evolucionar hacia producción con garantías.
Nuestro enfoque combina metodología, herramientas y experiencia en múltiples plataformas:
Entornos de desarrollo embebido avanzados
Configuramos entornos reproducibles, con compilación y depuración en tiempo real, integración con herramientas como west, control de configuración y gestión estructurada de dependencias.
Experiencia en múltiples fabricantes
Trabajamos con plataformas como Nordic (nRF52, nRF91), STMicroelectronics (STM32), NXP y otras arquitecturas soportadas por Zephyr, lo que nos permite seleccionar el hardware más adecuado para cada caso de uso.
Control de versiones y trazabilidad
Utilizamos Git como base para la colaboración, con estrategias de ramas claras y control de cambios desde el primer prototipo hasta la versión de producción.
Integración y calidad desde el inicio
Aplicamos pruebas tempranas, validación funcional y revisión continua del firmware para reducir riesgos técnicos y evitar acumulación de deuda técnica.
Este enfoque nos permite no solo entregar firmware funcional, sino construir productos conectados robustos, mantenibles y preparados para evolucionar.
8. Ejemplos reales
La versatilidad de Zephyr no es solo teórica. La hemos aplicado en distintos contextos donde fiabilidad, bajo consumo y conectividad son requisitos clave.
Control bucal para dispositivos electrónicos
Desarrollo de una férula personalizada con joystick molar y control por lengua para manejar PCs, tablets y móviles. El dispositivo integra detección de gestos de cabeza, bajo consumo y comunicación eficiente, priorizando ergonomía y autonomía.
Tracker de ganado
Solución de localización autónoma con conectividad híbrida, diseñada para operar en entornos rurales exigentes. El foco estuvo en la robustez, la eficiencia energética y la fiabilidad en campo durante largos periodos sin mantenimiento.
eBike conectada
Sistema de gestión de localización y antirrobo con comunicación por bus CAN e integración con la nube. La arquitectura permite registrar datos, gestionar eventos en tiempo real y actualizar el firmware de forma remota.
En Izertis lo elegimos porque nos ayuda a entregar productos que funcionan desde el primer día y que pueden evolucionar con el tiempo. En definitiva, Zephyr no es solo un sistema operativo: es una base tecnológica que nos permite crear soluciones conectadas, eficientes y mantenibles.