En el tutorial anterior, se demostró la comunicación IoT entre dos dispositivos a través del protocolo Zigbee utilizando dos módulos Xbee. Los dos módulos se comunicaron entre sí automáticamente, sin ninguna intervención humana. En el diseño anterior, los dos módulos también funcionaban en modo transparente.
En este proyecto, se diseña un controlador de luz LED donde un dispositivo controla el LED conectado a otro comunicando datos en modo API. En este tutorial, se diseñarán y configurarán dos dispositivos IoT basados en módulos Xbee para comunicarse entre sí a través del protocolo Zigbee. Uno de estos dispositivos en la red Zigbee será un dispositivo Coordinador y el otro será un dispositivo Enrutador. El dispositivo enrutador controlará el LED conectado al dispositivo Coordinador. Hay un interruptor conectado al enrutador Xbee. El enrutador Xbee lee el estado de este conmutador cada 1 segundo y envía el estado de forma inalámbrica al Coordinador Xbee. El coordinador Xbee envía la información a su controlador mediante comunicación serie. El Arduino controla el LED conectado a él con esta información y lo notifica en el monitor serie.
El protocolo Zigbee es uno de los estándares más populares para redes de sensores inalámbricos. Zigbee se usa comúnmente en aplicaciones industriales de IoT.
Los dispositivos Xbee se comunican entre sí de forma inalámbrica por aire. No disponen de ningún microcontrolador ni procesador propio, por lo que no pueden gestionar los datos recibidos o enviados. Simplemente pueden transferir la información que reciben. Pero se pueden interconectar con otros microcontroladores y procesadores como Arduino, Raspberry Pi o PC mediante interfaz serie.
Básicamente, los módulos Xbee son capaces de realizar dos tipos de comunicación: comunicación inalámbrica y comunicación en serie. La comunicación inalámbrica se produce entre dispositivos Xbee para que actúen como dispositivos de radiofrecuencia (RF). Para que los datos se transmitan y reciban de un módulo Xbee a otro, ambos dispositivos deben estar en la misma red. Los datos entre dos dispositivos se transmiten de forma inalámbrica. A través de comunicación serie (UART), los módulos Xbee pueden comunicarse con microcontroladores y procesadores.
Un microcontrolador, procesador o PC puede enviar datos a través de la interfaz serie al módulo Xbee (transmisor) y el módulo Xbee transmite los datos de forma inalámbrica a otro módulo Xbee (receptor). El módulo receptor Xbee transmite datos a través de la interfaz serie al controlador, procesador o PC al que está conectado. El controlador conectado al módulo Xbee procesa la información recibida por los dispositivos Xbee. De esta manera, los controladores pueden monitorear y controlar dispositivos remotos enviando mensajes a través de módulos Xbee locales.
Los módulos Xbee se comunican entre sí en dos modos: modo transparente y modo API (interfaz periférica de aplicación). Este proyecto se basa en el modo transparente. En modo transparente, los módulos Xbee actúan como sustituto de la línea serie. Todos los datos recibidos a través de la entrada en serie se transmiten inmediatamente por aire. Cuando otro módulo Xbee recibe datos de forma inalámbrica, los envía exactamente como los recibe a través de la interfaz serie y viceversa. A diferencia de esto, en el modo API, los datos se transmiten con información adicional.
En este proyecto, se interconectarán dos módulos Xbee con placas Arduino. Se configurarán para comunicar datos entre sí en modo API. Uno de los dispositivos Arduino tendrá interfaz con un LED y se configurará como Coordinador Zigbee. El otro dispositivo Arduino se configurará como un enrutador Zigbee. El dispositivo enrutador controlará el LED conectado al dispositivo coordinador, pasando mensajes a través del protocolo Zigbee en modo API. Los módulos Xbee interconectados en ambos dispositivos se configurarán como coordinador o enrutador mediante el software XCTU.
Este proyecto es una demostración sencilla de los servicios de domótica sobre protocolo Zigbee. Al igual que el LED, cualquier electrodoméstico se puede controlar de forma remota de forma similar.
El modo API proporciona una interfaz estructurada donde los paquetes se transfieren de forma organizada a través de la interfaz serie y en un orden determinado. De forma predeterminada, los dispositivos Xbee están configurados para funcionar en modo transparente. El modo transparente tiene algunas limitaciones importantes como las siguientes:
1) Para leer o escribir la configuración de un dispositivo, el dispositivo debe ingresar al modo de comando.
2) Cuando Xbee recibe datos de forma inalámbrica, no conoce la dirección de origen de los datos. Si Xbee recibe los datos de varios dispositivos, le resultará muy difícil distinguir qué dispositivo envió los datos a Xbee. Para hacer esto, en modo transparente, se debe configurar un protocolo personalizado en la pila de protocolos estándar Xbee. Toda la información adicional debe incluirse en el protocolo personalizado.
3) Si un dispositivo necesita transmitir diferentes mensajes a diferentes dispositivos, su configuración debe actualizarse cada vez y se establece un nuevo destino.
Para superar estos problemas, surge el modo API. En el modo API, existen las siguientes disposiciones para combatir las limitaciones mencionadas anteriormente:
1) Hay diferentes marcos para diferentes propósitos (como configuración y comunicación), los dispositivos de lectura o escritura se pueden configurar sin ingresar al modo de comando.
2) Los marcos API incluyen la dirección de origen del mensaje para que los dispositivos se puedan diferenciar fácilmente cuando varios dispositivos envían datos a un dispositivo. Cuando el dispositivo recibe la información, también se notifica a la fuente sobre la entrega exitosa de la información.
3) La estructura del marco API incluye la dirección de destino para que se puedan enviar diferentes mensajes a diferentes dispositivos en modo API.
Componente requerido –

Fig. 1: Lista de componentes necesarios para el controlador de luz LED en modo Zigbee API
Software requerido –
• XCTU (6.3.1 o posterior)
• ArduinoIDE
Diagrama de bloques -

Fig. 2: Diagrama de bloques del controlador LED del modo API Xbee
Conexiones de circuito –
En este proyecto se utilizarán módulos Xbee Serie 2. El módulo X-Bee es un módulo de 20 pines con la siguiente configuración de pines:

Fig. 3: Tabla que enumera la configuración de pines del módulo Xbee Serie 2
Para conectar el módulo a la PC para su configuración, primero coloque el Xbee en el Xbee Shield y conecte el módulo a un Arduino. El Arduino UNO o Arduino Mega actúa como un convertidor USB para módulos Xbee. Antes de utilizar el Arduino UNO con módulos Xbee, se debe cargar en él un boceto mínimo o retirar el microcontrolador Atmega de la placa. El módulo Xbee puede funcionar con una fuente de alimentación externa o con Arduino. El módulo Xbee y la placa Arduino deben comunicarse en serie. El módulo Xbee debe conectarse al Arduino de acuerdo con la siguiente tabla:

Fig. 4: Tabla que enumera las conexiones del circuito entre Arduino y el módulo Xbee Serie 2
Ahora Arduino se puede conectar a la PC mediante un cable USB.
Después de conectar el módulo a la computadora, realice los siguientes pasos:
1) Abra el software XCTU. Asegúrese de que el software esté en modo operativo de configuración.
2) Haga clic en "Descubrir módulos de radio".
3) Haga clic en el puerto COM deseado al que está conectado el módulo.
4) Haga clic en Siguiente, en la ventana 'Establecer parámetros de puerto', cambie los valores según los requisitos y haga clic en Finalizar.
5) Cuando XCTU ubique los módulos de radio después de la exploración completa, seleccione los módulos de radio haciendo clic en 'Agregar dispositivos seleccionados'. Los módulos de radio seleccionados ahora deberían aparecer en la ventana del módulo de radio.
Para transmitir o recibir datos en los módulos Xbee, deben estar configurados correctamente en la misma red. Según el protocolo Zigbee, un dispositivo debe estar en modo coordinador y el resto pueden ser enrutadores o dispositivos finales. En este caso, un dispositivo es el coordinador y el otro es el enrutador. El Coordinador Xbee interactúa con el LED y recibe tramas API del enrutador Xbee. Así, el coordinador Xbee estará en modo API. El Xbee Router envía exactamente la información recibida en serie del PC para que esté en modo AT.
Ahora, restaure la configuración predeterminada de todos los módulos Xbee con el botón 'Cargar configuración de firmware predeterminada' en la parte superior de la sección de configuración de radio y use XCTU para configurar el siguiente parámetro:

Fig. 5: Tabla que enumera los parámetros de configuración para el módulo Xbee Serie 2

Fig. 6: Tabla que enumera los parámetros de configuración del módulo Xbee Serie 2
Mantenga el resto de los valores por defecto y escriba las configuraciones de todos los módulos Xbee con el botón 'escribir módulos de radio' en la parte superior de la configuración de radio. Una vez completada la configuración, haga clic en el botón descubrir módulos de radio en la misma red de cualquier módulo de radio. Ahora se pueden encontrar módulos de radio para la misma red.
Ahora los módulos Xbee se pueden conectar a los circuitos respectivos.
Uno de estos dispositivos actuará como Coordinador Zigbee. Conecte el módulo Xbee configurado como coordinador en su circuito. El módulo Xbee puede comunicarse con Arduino a través de comunicación en serie. El serial del software Arduino se usa para leer datos del Xbee y el serial del hardware se usa para leer los datos seriales del controlador. Dado que Xbee opera a nivel lógico CMOS y Arduino opera a nivel lógico TTL, se necesita un convertidor de nivel lógico. Como convertidor de nivel lógico se utiliza un módulo convertidor de nivel de interfaz de nivel lógico IIC I2C de 5 V a 3,3 V para Arduino. El módulo Xbee puede alimentarse de una fuente externa o de Arduino. Para la comunicación en serie entre la placa Arduino y el módulo Xbee, el pin RX del Xbee está conectado al TX del Arduino y el pin TX del Xbee está conectado al RX del Arduino. El pin de tierra está conectado a tierra común. Un LED interactúa con el Arduino en su pin PD2 (pin 4) a través de una resistencia pull-up de 220 ohmios.
El otro dispositivo funciona como un enrutador Zigbee. Conecte el módulo Xbee configurado como enrutador a su circuito. Se conecta un interruptor al pin 15 del enrutador Xbee. El pin 15 por defecto está conectado a tierra, pero cuando se presiona el interruptor recibe VCC. También puede alimentarse mediante una placa Arduino o una fuente de alimentación externa.
Se deben tomar las siguientes precauciones al interconectar módulos Xbee:
1) Los módulos Xbee funcionan a 3V3 con una corriente de 40 mA para transmitir y recibir datos. No suministre 5V desde Arduino.
2) Los módulos Xbee tienen una tolerancia de nivel de señal 3V3. Para proporcionar comunicación entre Arduino y Xbee, utilice un convertidor de nivel lógico CMOS a TTL (bidireccional).
3) A veces, al intentar descubrir Xbee, puede ocurrir un error como: 'No se pudo encontrar ningún dispositivo en el puerto COM6 > Para la cadena de entrada: "ERROR" o error al inicializar el parámetro del dispositivo = tiempo de espera de conexión o parámetro del dispositivo' no se pudo encontrar, entonces el error puede deberse a una velocidad de baudios incorrecta.
Para hacer esto, conecte el módem usando un cable FTDI a la PC, abra XCTU, seleccione el puerto COM y varias velocidades en baudios como 9600, 115200, 57600 y busque el módulo de radio y posiblemente allí se pueda encontrar el módulo de radio. Pero si no se encuentra, abra la XCTU heredada (versión anterior), seleccione la velocidad de baudios posible y en la ventana de configuración del módem seleccione el firmware/conjunto de funciones del módem correcto, habilite 'actualizar siempre el firmware' y seleccione grabar. Después de eso, cuando aparezca el cuadro de información (acción requerida), reinicie el Xbee conectando RST a GND o simplemente saque el Xbee y colóquelo nuevamente en el asiento. Ahora el cuadro de información desaparecerá. Entonces los módulos de radio volverán a parpadear automáticamente.
4) Si se produce un error de diferencia de velocidad en baudios, el error puede ser que la PC y el módulo de radio no estén funcionando a la misma velocidad en baudios. En este caso, intente cambiar de PC y actualizar el firmware con otra PC. El módulo Xbee también se puede recuperar de esta forma.
5) Configurar el módulo (Router) correctamente cuando trabaje en modo API.

Fig. 7: Imagen que muestra las conexiones del circuito del controlador LED del modo API Xbee
Cómo funciona el circuito –
Es importante comprender la estructura del marco API para saber cómo se comunican los datos en modo API. Los paquetes de datos estructurales en modo API se denominan marcos. Se envían y reciben a través de la interfaz serie del dispositivo. Contienen el mensaje inalámbrico y alguna información adicional, como la dirección de origen/destino de los datos. Principalmente, la longitud de la trama es de 22 bytes y contiene la siguiente información:

Fig. 8: Tabla que enumera la estructura del marco API
Delimitador de inicio : el delimitador de inicio es el primer byte de una trama que consta de una secuencia específica de la trama que indica el inicio de la trama de datos. A partir de esto se puede saber que ha llegado el nuevo paquete recibido.
Longitud : el campo de longitud especifica el número total de bytes incluidos en el campo de datos de la trama.
Datos de trama : este campo contiene el mensaje recibido o transmitido. Esto incluye tipo de trama, ID de trama, dirección de origen o destino de 64 bits, dirección de origen o destino de 16 bits, opciones de envío o recepción (paquete reconocido o no, si se reconoce, el valor es 01, para el paquete de transmisión, es 02 , para paquetes cifrados con seguridad APS es 20 y para paquetes enviados con tiempo de espera extendido habilitado es 0x40), Número de conjuntos de muestras, Máscara de canal digital, Máscara de canal analógico y datos de RF (digitales o analógicos).
Suma de comprobación : especifica la integridad de los datos de prueba.
Cuando se presiona o no el interruptor conectado al extremo del enrutador, el estado se notifica al extremo del coordinador y el LED local también se iluminará cuando se presione el botón. El enrutador recibe la señal 0 en el pin de entrada digital D3 cuando no se presiona el interruptor y 1 cuando se presiona el interruptor. El enrutador envía la información de la señal al coordinador inalámbrico Xbee en un período continuo de 1 segundo, independientemente de si se presiona el botón o no. El coordinador Xbee al recibir la información envía la información al serial Arduino vía comunicación serial. El paquete recibido se parece al siguiente:
7E, 0, 12, 92, 0, 13, A2, 0, 41, 26, 85, 81, 25, 4B, 1, 1, 0, 8, 0, 0, 8, suma de comprobación.
0.8 es una máscara de canal digital, lo que significa:

Fig. 9: Valores de bits del primer y segundo byte en el marco API
00001000 es 0x8 en hexadecimal y 8 en decimal.
El serial Arduino imprime información en el monitor serial, independientemente de si se presiona el botón o no. El Arduino no quiere imprimir toda la información. Después de 19 bytes está el mensaje real que está recibiendo, por lo que descartará los primeros 19 bytes de la trama y comenzará a comparar con los bytes del mensaje. El siguiente código se utiliza para extraer el mensaje original del marco API recibido.
si (estado_botón == 0)
{
Serial.println(”no presionado”);
escritura digital (ledPin, BAJO);
}
//Si recibe Button_status como 8, imprime el estado y deja el LED en alto.
de lo contrario si (Button_status == 8)
{
Serial.println(“presionado”);
escritura digital (ledPin, ALTA);
}
Si se presiona el botón, el LED conectado al pin digital 2 del arduino comienza a brillar configurando el pin respectivo en ALTO; de lo contrario, dejará de brillar configurando el pin respectivo en BAJO. De esta forma, el Xbee (Router) remoto controla el LED conectado al controlador conectado al otro Xbee (Coordinador). Esta es una demostración sencilla de domótica sobre el protocolo Zigbee utilizando módulos Xbee en modo API.
En el siguiente tutorial, aprenderá sobre otro protocolo de IoT: MQTT-SN.
Código fuente del proyecto
###
//Programa para
/*
@Aplicación: Xbee_digital_button_state
Breve descripción:
Este código es para el coordinador xbee. Cuando se recibe información del enrutador xbee, el coordinador
xbee transmite la información a Arduino y
En base a esa información, Arduino controla el LED conectado a él e imprime el estado del botón en el monitor serie.
*/
//Variable para almacenar el estado del botón
int Estado_botón = 0;
intledPin = 2;
configuración vacía
{
//Inicia la comunicación serial
Serie.begin(9600);
pinMode(ledPin, SALIDA);
}
bucle vacío
{
//comprobamos si estamos recibiendo tramas o no
si (Serie.disponible > 21)
{
//7E indica el inicio de la trama. Ahora comenzamos a recibir los marcos.
//comprueba si la trama recibida es el inicio de la trama
si (Serial.read == 0x7E)
{
//cuenta los bytes de la trama hasta 19 y descarta esos bytes.
para (int i = 0; i < 19; i++)
{
byte byte_descartado = Serial.read;
}
//Después de descartar 19 bytes, almacena la señal de estado del botón
Button_status = Serial.read;
Serial.print("el botón es:");
//Si recibe el estado del botón como 0, imprima el estado y haga que el LED esté bajo
si (estado_botón == 0)
{
Serial.println("no presionado");
escritura digital (ledPin, BAJO);
}
//Si recibe Button_status como 8, imprima el estado y haga que el LED esté alto.
de lo contrario si (Button_status == 8)
{
Serial.println("presionado");
escritura digital (ledPin, ALTA);
}
Serial.println;
}
}
}
###
Diagramas de circuito
Diagrama de circuito-Xbee-API-Modo-Controlador-LED | ![]() |