La placa Arduino Nano Matter siempre apuntó al lado de bajo consumo de la casa inteligente. Hasta ahora los sketches tenían dos caminos para entrar en ella, Matter sobre Thread y Bluetooth LE, ambos sobre su módulo MGM240S de Silicon Labs. El 15 de septiembre llegó un tercero. Si se actualiza el núcleo de Arduino para Silicon Labs a la versión 5.0, los sketches también pueden hablar Zigbee, la red que ya comparten ampolletas, sensores e interruptores.
El protocolo nuevo vive donde estaban los otros dos. En el IDE se abre Tools › Protocol stack, se elige Zigbee y el sketch que se sube queda compilado con la pila Zigbee 3.0. Misma placa, mismo IDE y otra pila de comunicación.
Un proyecto para partir
Antes de las hojas de datos, Arduino muestra cómo se ve todo funcionando junto.
El Zigbee Smart Clock es un reloj de escritorio armado con una Nano Matter, un Modulino Thermo, un Modulino Light y una matriz LED de 32×8. Se desarrolló en paralelo con la biblioteca nueva, como prueba real de lo que puede hacer. Cuando se une a la red, Home Assistant recibe sus lecturas de temperatura, humedad y luz, y puede encender o apagar la pantalla. El reloj le pide la hora a la red, así que nunca hay que ajustarlo a mano, y sube o baja su brillo según la luz de la pieza.
El montaje completo (el cableado, la base imprimible en 3D y el código) está en Arduino Project Hub.
¿Cuánto código pide un primer dispositivo Zigbee?
Cabe en una pantalla. La biblioteca Zigbee envuelve la pila EmberZNet de Silicon Labs en clases al estilo Arduino. Un sensor es un objeto. Se le da un nombre al dispositivo, se llama a begin() y se reportan valores. Esta es una versión recortada del ejemplo zigbee_temp_sensor:
ZigbeeTemperatureSensor sensor;
void setup()
{
Serial.begin(115200);
Zigbee.setVendorName("Arduino");
Zigbee.setProductName("Zigbee Temperature Sensor");
Zigbee.begin();
sensor.begin();
// Espera hasta que el coordinador deje entrar a la placa
Serial.println("Connecting to Zigbee network...");
while (!Zigbee.isConnectedToNetwork()) {
delay(200);
}
Serial.print("Connected to Zigbee network; Channel: ");
Serial.print(Zigbee.getChannel());
Serial.print(" | PAN ID: 0x");
Serial.println(Zigbee.getPanId(), HEX);
}
void loop()
{
// Mide la temperatura del propio chip y la reporta por Zigbee
float celsius = getCPUTemp();
sensor.set_measured_value_celsius(celsius);
Serial.printf("Current CPU temperature: %.02f C\n", celsius);
delay(2000);
}Se pone el coordinador Zigbee en modo de emparejamiento y se sube el sketch. La unión puede tardar algunos minutos, según la red, y el Monitor Serie informa en qué canal quedó la placa. La integración ZHA de Home Assistant la detecta como a cualquier otro dispositivo Zigbee.
La red emparejada queda guardada en la memoria no volátil de la placa. Después de un reinicio o de subir otro sketch, la placa sigue siendo parte de ella.
¿Qué trae la biblioteca?
Son 14 ejemplos listos que cubren 11 tipos de dispositivo. Las luces vienen como ampolleta de encendido y apagado, regulable y de color, además de un enchufe de encendido y apagado. Hay un tipo de interruptor, que envía órdenes de encendido, apagado y regulación. Los sensores reportan temperatura, humedad y nivel de luz, y un sensor de contacto avisa si una puerta, una ventana o un cajón está abierto. Completan el grupo dos ayudantes, uno que informa la fuente de alimentación y un cliente de hora que se la pide a la red.
Los dispositivos se unen como router (la opción por defecto, que retransmite el tráfico de la malla) o como dispositivo final.
Arduino destaca dos funciones:
- Control directo con enlaces (bindings). Cuando un interruptor queda enlazado a una luz, la controla directamente, sin esperar una automatización del hub. Para el interruptor de la propia biblioteca, el enlace se crea una sola vez en Home Assistant ZHA. Las clases de luz y de enchufe también pueden actuar como destino de Find-and-Bind. Al llamar a start_find_and_bind() (por ejemplo al apretar un botón, como muestra la documentación), los controles Zigbee compatibles con Find-and-Bind se enlazan con ellas sin que el hub configure nada.
- Identificación. Cuando el hub envía una solicitud Identify, la biblioteca se lo avisa al sketch para que haga parpadear un LED. El ejemplo zigbee_lightbulb_identify hace justamente eso, y sirve cuando hay cinco placas iguales sobre el escritorio.
Hay una advertencia que la propia Arduino pone por escrito. Tal como vienen, los ejemplos de humedad y de nivel de luz envían valores inventados, y el de temperatura mide el chip MG24 y no la pieza. Con un sensor real (un Modulino Thermo, por ejemplo) y unas pocas líneas cambiadas, los datos pasan a ser reales.
Los dos extremos de la red
Una red Zigbee doméstica se arma alrededor de un coordinador, la radio que forma la red y deja entrar a los dispositivos. Los hubs comerciales cumplen ese rol, y la sección Zigbee del manual de usuario de la Nano Matter nombra varios que funcionan con la placa. Entre ellos están modelos de Amazon Echo y SmartThings, Hubitat Elevation (C-8), el hub IKEA DIRIGERA y Home Assistant con una radio Zigbee.
El coordinador también puede ser otra Nano Matter. El núcleo incluye un firmware precompilado de coordinador Zigbee EZSP (desde la versión 4.0), y un script en Python que viene con el núcleo convierte una placa en la radio Zigbee de la integración ZHA de Home Assistant.
Hay que abrir una terminal en la carpeta extra/firmware del núcleo. En macOS está en ~/Library/Arduino15/packages/SiliconLabs/hardware/silabs/5.0.0/extra/firmware, en Windows en %LOCALAPPDATA%\Arduino15\packages\SiliconLabs\hardware\silabs\5.0.0\extra\firmware (donde el comando es py en vez de python3) y en Linux en ~/.arduino15/packages/SiliconLabs/hardware/silabs/5.0.0/extra/firmware. Ahí se ejecuta esto:
python3 extra_firmware_flasher.py nano_matter zigbeeSe necesita Python 3. Sin argumentos, el script muestra las placas que admite.
Esa placa se conecta al equipo donde corre Home Assistant (una Raspberry Pi funciona bien), se agrega en ZHA como radio Zigbee y con las demás placas se arman las luces, los interruptores y los sensores. Así, cada radio de la red es una placa que se programa con Arduino. Para volver a convertir el coordinador en dispositivo se usa Tools › Burn Bootloader con Tools › Programmer en OpenOCD, lo que borra el firmware de coordinador y su red, y después se sube un sketch Zigbee.
Ideas para probar el fin de semana
- Una alerta de puerta abierta. El ejemplo del sensor de contacto con un interruptor reed en un pin libre y una automatización de Home Assistant que mande un aviso.
- Un sensor de ambiente real. El ejemplo de temperatura con un Modulino Thermo, reportando a Home Assistant.
- Una lámpara de escritorio y su interruptor. Dos placas con los ejemplos de luz regulable y de interruptor, enlazadas una vez en Home Assistant ZHA, para que el botón de una encienda y apague la lámpara directamente.
- Un reloj que se ajusta solo. El ejemplo del cliente de hora es la base del Smart Clock descrito más arriba.
Una placa con tres pilas, una a la vez
El menú de protocolos es solo una de las formas en que crece la Nano Matter. Zigbee queda junto a Matter sobre Thread y Bluetooth LE. Corre una pila por sketch, así que para cambiar se elige otra y se sube de nuevo.
Cuando un proyecto necesita más que los tipos de dispositivo comunes (un cluster propio, un equipo poco habitual u otra distribución de endpoints), el mismo hardware corre el SDK Zigbee completo de Silicon Labs en Simplicity Studio. Para proyectos con Bluetooth LE, la Nano Matter también puede correr Zephyr nativo.
¿Cómo se activa Zigbee en la Nano Matter?
1. En el IDE de Arduino se abre Boards Manager, se busca Silicon Labs y se instala la versión 5.0.0. 2. Se elige Nano Matter como placa y se configura Tools › Protocol stack en Zigbee. Si la placa es nueva o viene de Matter o BLE, hay que poner Tools › Programmer en OpenOCD y ejecutar Tools › Burn Bootloader una vez. Eso borra la placa, incluida cualquier red guardada. 3. Se abre File › Examples › Zigbee, se elige un ejemplo y se sube. 4. Se pone el coordinador en modo de emparejamiento y se espera a que la placa se una.
La sección Zigbee del manual de usuario de la Nano Matter recorre cada paso, y la documentación de la biblioteca cubre todas las clases. El núcleo es de código abierto y recibe reportes de errores y pull requests en GitHub.




