X-NODE / XN01 - Entradas Digitales

El X-NODE Digital Inputs es un módulo que permite leer hasta 8 entradas digitales. Puede leer señales generadas por botones pulsadores, interruptores o sensores, a través de una interfaz digital (UART/I2C) que es configurable lo que permite conectar múltiples X-NODE Digital Inputs simultáneamente, expandiendo la cantidad de entradas que puede leer un sistema desde 8 hasta 1016.
Las entradas del X-NODE Digital Inputs utilizan resistencias pull-up. Para hacer uso de señales externas coloque el interruptor en la posición OFF, las señales externas deben ser de colector abierto. Las señales generadas por botones o interruptores externos deben conectarse a GND. Nunca conecte fuentes de voltaje al X-NODE Digital Inputs o podría dañar el dispositivo.
TABLA DE CONTENIDO
I. ¿Cómo funciona?
El módulo X-NODE Digital Inputs posee un controlador en hardware integrado con el cual es posible obtener la lectura de diversas entradas digitales sin tener conocimientos avanzados de hardware, ya que solo es necesario enviar una serie de comandos en formato ASCII por medio del protocolo de comunicación serial UART o usando el protocolo I2C, esto permite que el X-NODE sea compatible con cualquier sistema basado en un microcontrolador, microprocesador o equipos industriales. El módulo integra un switch deslizable de 8 interruptores tipo palanca los cuales pueden variar entre los estados ON<>OFF, conector tipo clema de 9 pines para cables AWG de calibre 26 a 18, ideales para realizar pruebas de escritorio y para conectar controles externos.
X-NODE Digital Inputs es compatible con el estándar mikroBUS™ de Mikroe® para un uso fácil con un gran ecosistema de kits para desarrollo de hardware, también posee conectores JST compatibles con el estándar Qwiic® de SparkFun® para una comunicación entre diversos módulos y tarjetas de desarrollo por medio del protocolo I2C de manera rápida y sencilla.
II. Descripción del hardware

Conector tipo clema de 9 pines para cables AWG de calibre 26 a 18
Switch deslizable
Conectores JST compatibles con Qwiic®
Controlador en hardware
Puertos de comunicación UART <> I2C
Modelo de X-NODE
Tipo de X-NODE
Conectores estándar mikroBUS™
Versión de hardware: R2
Componente principal en el X-NODE
III. Especificaciones
Tipo
Entradas digitales
Aplicaciones
Integración en proyectos de IoT y uso de propósito general, como en cambios de estado, secuencias o configuración en indicadores y actuadores de un circuito o proyecto electrónico.
Características
Switch deslizable de 8 interruptores tipo palanca, vida eléctrica de hasta 2000 ciclos, una resistencia de aislamiento de hasta 100 MΩ y puede operar en un rango de temperatura de -10 °C hasta 80 °C. Puerto de pines macho y clema para 8 entradas externas y GND.
Interfaz
UART, I2C
Tamaño
67.13 x 25.4 x 22 mm
Voltaje
3.3 V
Las entradas del X-NODE Digital Inputs utilizan resistencias pull-up. Para hacer uso de señales externas coloque el interruptor en la posición OFF, las señales externas deben ser de colector abierto. Las señales generadas por botones o interruptores externos deben conectarse a GND.
¡ Advertencia ! Nunca conecte fuentes de voltaje a las entradas del X-NODE Digital Inputs, hacerlo puede dañar el dispositivo.
IV. Pinout
La siguiente tabla muestra el pinout del X-NODE Digital Inputs con respecto al estándar mikroBUS™ (este último se encuentra en las dos columnas del centro).

V. Modo de uso
Para un uso fácil y rápido del X-NODE se puede hacer a través de los comandos en formato ASCII que proporciona el controlador en hardware integrado mediante una comunicación serial UART o de forma más avanzada a través del protocolo I2C.
Protocolo UART
Configuración
La comunicación UART utiliza la siguiente configuración:
Velocidad de comunicación: 115,200 bps
Paridad: Ninguna
Bits de datos: 8
Bits de paro: 1
Sintaxis
El protocolo UART permite enviar instrucciones en texto plano ASCII, cada instrucción se compone del identificador del X-NODE, un comando y un final de línea.
Identificador
El identificador ID, se conforma por el modelo del X-NODE, que puede localizar en el punto 6 del apartado “Descripción de hardware” y se complementa con un índice, que puede ser una letra del abecedario, por defecto es la letra A, siendo posible configurarlo hasta la letra Z. Para poder conectar más de un módulo del mismo modelo en un sistema, deberá configurar un identificador único para cada módulo, brindando la posibilidad de conectar hasta 26 módulos del mismo modelo a través del protocolo UART.

Nota: A partir de este punto se utilizará el índice predeterminado del X-NODE XN01 - Digital Inputs para el resto del manual: XN01A.
Lista de comandos
XN01A?
Verifica si se estableció una comunicación con éxito. Respuesta: OK
XN01A+V
Obtiene la versión del firmware actual que integra el X-NODE. Respuesta: XN01A=Versión Ejemplo: XN01A=0.1
XN01A+ID=(A-Z)
Cambia el índice del ID por una letra diferente del abecedario de la A a la Z, la nueva letra debe ser en mayúscula. Una vez modificado, para volver a cambiarlo es necesario colocar el ID con el nuevo índice. Respuesta: OK Ejemplo de envío: XN01C+ID=H
XN01A+TW=(1-126)
Cambia la dirección I2C que viene de fábrica por uno diferente. La nueva dirección se escribe en decimal seleccionando un valor de 1 a 126. Respuesta: OK Ejemplo de envío: XN01A+TW=28
XN01A+GS
Obtiene el estado de cada una de las 8 entradas, sea en los interruptores o en el puerto. Retorna números 1 (Alto) y 0 (Bajo) dependiendo del estado de cada entrada. La entrada 1 es el primer valor de la izquierda, interpretándolo así el valor de izquierda a derecha. Respuesta: XN01A=int1, int2, int3, int4, int5, int6, int7, int8 Ejemplo: XN01A=11011011
Comandos avanzados
XN01A+ETW=(0-1)
Habilita (1) o deshabilita (0) la interfaz I2C del dispositivo. Nota: Esta configuración es volátil, desconectar el dispositivo del suministro de energía o enviar el comando de reinicio restaurará la interfaz I2C. Respuesta: OK Ejemplo de envío: XN01A+ETW=0
XN01A+SLP
Habilita el modo de descanso profundo del dispositivo para reducir el consumo de energía, durante el descanso profundo el dispositivo no responderá a comandos UART, para despertar el dispositivo envíe un lógico bajo (0) al pin WAKEUP/UPDI Respuesta: OK Ejemplo de envío: XN01A+SLP
XN01A+RST
Reinicia el dispositivo, los valores no volátiles (ej. ID, address I2C) se conservarán y los valores volátiles volverán a su configuración por defecto. Respuesta: OK
Nota: El modo de descanso profundo del X-NODE XN01 - Digital Inputs tiene un consumo típico de 5 uA, sin embargo, cada entrada tiene una resistencia pull-up de ~10kOhm, cuando se activa la entrada a través de los interruptores o una señal externa el consumo será aproximadamente 330uA por entrada.
Final de línea
El X-NODE solo responderá a un comando cuando se envíe un conjunto de caracteres finalizadores de línea, cada comando debe terminar con estos caracteres: <CR+LF>
CR significa retorno de carro (carriage return), este carácter se utiliza para indicar a un sistema que la entrada de texto debe moverse al principio.
LF significa alimentación de línea (line feed), este carácter le indica a un sistema que la entrada de texto corresponde a una nueva línea.
La combinación de ambos caracteres es una manera común con el que las computadoras representan una nueva línea, por ejemplo, en un procesador de texto para separar párrafos.
En el caso del X-NODE los caracteres <CR+LF>, se utilizan para identificar cuando se ha terminado de enviar un comando. Si el identificador corresponde al nodo, si el comando existe y si se finalizó inmediatamente con los caracteres <CR+LF>, entonces el nodo enviará una respuesta.
Dependiendo del sistema, deberá configurar el envío de estos caracteres de diferentes maneras.
Ejemplo UART Arduino Framework
// Este ejemplo muestra el estado de las entradas
// del X-NODE. Deslice la posición del interruptor
// para observar los cambios de estado.
#include "Arduino.h"
void setup()
{
// Inicializa el monitor serial
Serial.begin(115200);
// Inicializa la comunicación UART en el puerto MikroBUS
Serial2.begin(115200, SERIAL_8N1, 9, 10);
}
void loop()
{
// Limpiamos el buffer antes de mandar el comando
while( Serial2.available() ) {
Serial2.read();
}
// Envía el comando para leer las entradas:
// ID+GS:
// Donde el ID por defecto es XN01A
// Los caracteres \r\n representan los caracteres
// <CR+LF> en Arduino
Serial2.print( "XN01A+GS\r\n" );
// Espera hasta recibir una respuesta
String inputs = Serial2.readStringUntil('\n');
// Si la respuesta comienza por el ID
// entonces la comunicación fue exitosa
if ( inputs.startsWith( "XN01A=" ) ) {
Serial.println( inputs );
} else {
Serial.println( "Error" );
}
delay( 1000 );
}
Protocolo I2C
Para poder establecer comunicación se debe conocer la dirección I2C del X-NODE, el valor de fábrica se compone por los dos últimos dígitos del modelo después de “XN”. Las direcciones I2C suelen representarse en sistema hexadecimal, mientras que el modelo del X-NODE está en sistema decimal, asegúrese de utilizar el sistema numérico adecuado.

Configuración
Velocidad de comunicación: 100 kHz
Address: 7 bits
Escritura
Para escribir en un registro del X-NODE Digital Inputs el maestro I2C debe generar las siguientes operaciones:
Enviar una condición de inicio: El maestro genera un lógico bajo (0) en el pin SDA, mientras SCL permanece en alto (1).
Enviar la dirección del X-NODE: El maestro envía la dirección de 7 bits.
Enviar el tipo de operación: El maestro indica si la operación es de lectura (0) o de escritura (1).
Esperar una señal de reconocimiento (ACK): El maestro espera a recibir un lógico bajo (0), como confirmación (Acknowledgment) que exista un dispositivo con la dirección enviada previamente en el BUS I2C. Si no se recibe respuesta (1), significa que hubo un error en la comunicación o la dirección es incorrecta.
Escribir n bytes de datos: El maestro escribirá en secuencias de 8 bits (1 byte) y en orden del bit más significativo primero (MSB) n cantidad de bytes que desea escribir en el registro, el dispositivo enviará una señal de reconocimiento (ACK) por cada byte escrito.
Enviar una condición de paro: El maestro debe liberar el BUS I2C generando un lógico alto (1) en el pin SDA mientras que SCL se encuentra en un lógico alto (1).
Lectura
Para leer en un registro del X-NODE Digital Inputs el maestro I2C debe generar las siguientes operaciones:
Enviar una condición de inicio: El maestro genera un lógico bajo (0) en el pin SDA, mientras SCL permanece en alto (1).
Enviar la dirección del X-NODE: El maestro envía la dirección de 7 bits.
Enviar el tipo de operación: El maestro indica si la operación es de lectura (0) o de escritura (1).
Esperar una señal de reconocimiento (ACK): El maestro espera a recibir un lógico bajo (0), como confirmación (Acknowledgment) que exista un dispositivo con la dirección enviada previamente en el BUS I2C. Si no se recibe respuesta (1), significa que hubo un error en la comunicación o la dirección es incorrecta.
Leer n bytes de datos: El dispositivo enviará secuencias de 8 bits (1 byte) y en orden del bit más significativo primero (MSB) n cantidad de bytes, al recibir un byte, el maestro deberá generar una señal de reconocimiento (ACK) para solicitar 1 byte más, o una señal de no reconocimiento (NACK) para indicar que ha finalizado la transmisión y solicitar el dispositivo que libere el BUS.
Enviar una condición de paro: El maestro debe liberar el BUS I2C generando un lógico alto (1) en el pin SDA mientras que SCL se encuentra en un lógico alto (1).
Lista de registros
En un dispositivo I2C los registros son direcciones de memoria que permiten configurar u obtener datos del dispositivo. Existen dos tipos de operaciones: de lectura (R) y de escritura (W).
INPUT
0x01
R
1
Cada bit representa un estado lógico de una entrada, donde el bit más significativo (el que se recibe primero) corresponde al estado de la entrada I8, siguiendo un orden de mayor a menor.
STAT
0x37
R
1
Estado del XNODE, 0x00 si no hay errores, cualquier otro valor significa error en la comunicación.
FW
0x38
R
3
Versión de firmware, en versión mayor, menor y parche: 0x02.0x00.0x00
UART_ID
0x39
R/W - NV
1
Permite leer y escribir el índice del ID por una letra diferente del abecedario de la A (0x41) a la Z (0x5A)
TW_ADD
0x3A
R/W - NV
1
Permite leer y escribir la dirección I2C del dispositivo por uno diferente de 1 (0x01) a 126 (0x7D).
UART_EN
0x3B
W
1
Habilita (0x01) o deshabilita (0x00) la interfaz UART del dispositivo.
SLEEP
0x3C
W
1
Habilita (0x01) o deshabilita (0x00) el descanso profundo del dispositivo, el dispositivo despertará si el maestro escribe la dirección I2C del dispositivo en el BUS.
RESET
0x3D
W
1
Si se escribe un 0x01 reinicia el dispositivo.
WHO_AM_I
0x3E
R
2
El primer byte es el modelo del XNODE, el segundo byte es la revisión de hardware
Nota: El modo de descanso profundo del X-NODE XN01 - Digital Inputs tiene un consumo típico de 5 uA, sin embargo, cada entrada tiene una resistencia pull-up de ~10kOhm, cuando se activa la entrada a través de los interruptores o una señal externa el consumo será aproximadamente 330uA por entrada.
Registros No volatiles (NV)
Los registros no volátiles se guardan en la memoria EEPROM del dispositivo, lo que significa que conservarán los valores escritos en ellos incluso si el dispositivo se apaga.

Ejemplo I2C Arduino Framework
// Este ejemplo muestra el estado de las entradas
// del X-NODE. Deslize la posición del interruptor
// para observar los cambios de estado.
#include <Arduino.h>
#include <Wire.h>
void setup()
{
// Inicializa el monitor serial
Serial.begin(115200);
// Configura los pines de la comunicación I2C
Wire.setPins( 12, 13 );
// Inicializa la comunicación I2C
Wire.begin();
}
void loop()
{
uint8_t bytes_recv = 0;
uint8_t inputs = 0;
// Enviar condición de inicio + dirección
// + tipo operación
Wire.beginTransmission(0x01);
// Escribe la dirección del registro de entradas (0x01)
Wire.write(0x01);
// Verificar si la operación fue exitosa
if (Wire.endTransmission() != 0) {
Serial.println("Error al solicitar el registro");
delay(1000);
return;
}
// Enviar condición de inicio + dirección
// + tipo operación + cantidad de bytes a leer
bytes_recv = Wire.requestFrom( 0x01, 1 );
// Confirmar que se recibió 1 byte
if ( bytes_recv != 1 ) {
Serial.println( "Error" );
delay( 1000 );
return;
}
inputs = Wire.read();
// Mostrar el estado en formato binario (omite
// 0's a la izquierda)
Serial.print( "XN01A=" );
Serial.println( inputs, BIN );
delay( 1000 );
}
VI. Descargas
Última actualización
¿Te fue útil?