> For the complete documentation index, see [llms.txt](https://docs.microside.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.microside.com/plataforma-xide-iot/x-nodes/xn02-salidas-digitales/r1/x-node-xn02-salidas-digitales-a-r1.md).

# X-NODE / XN02 - Salidas Digitales A-R1

<figure><img src="/files/r5hZiaSkX3s8NOfFLJ9X" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Este producto ya no se encuentra a la venta. Revisa nuestra versión actualizada:

[XN02 - R2](/plataforma-xide-iot/x-nodes/xn02-salidas-digitales/r2/x-node-xn02-salidas-digitales.md)
{% endhint %}

El **X-NODE Digital Outputs** es un módulo que permite generar hasta 8 salidas digitales. Puede generar señales que se pueden utilizar para controlar actuadores, módulos de relevadores, interfaces paralelas como pantallas LCD, multiplexores, etc., a través de una interfaz digital (UART/I2C) que es configurable lo que permite conectar múltiples **X-NODE Digital Outputs** simultáneamente, expandiendo la cantidad de salidas que puede generar un sistema desde 8 hasta 1016.

{% hint style="info" %}
El **X-NODE Digital Outputs** genera señales de voltaje de 3.3VDC. No intente utilizarlo para controlar cargas mayores a 20mA. Si requiere generar señales de voltaje con un rango entre 5-24VDC revise nuestro [**X-NODE XN27 - 4 x 24V Outputs**](/plataforma-xide-iot/x-nodes/x-node-xn27-4-x-salidas-24v-dc.md)**.**\
Si requiere controlar cargas DC de hasta 28VDC o AC de hasta 125VAC revise nuestra línea de **X-NODE** de relevadores: [**XN13**](/plataforma-xide-iot/x-nodes/x-node-xn13-1-relevador/r1/x-node-xn13-1-relevador-10a.md)**,** [**XN29**](/plataforma-xide-iot/x-nodes/x-node-xn29-4-relevadores-1a.md)**.**
{% endhint %}

### **TABLA DE CONTENIDO**

1. [**¿Cómo funciona?**](#i.-como-funciona)
2. [**Descripción del hardware**](#ii.-descripcion-del-hardware)
3. [**Especificaciones**](#iii.-especificaciones)
4. [**Pinout**](#iv.-pinout)
5. [**Modo de uso**](#v.-modo-de-uso)
   * [**Protocolo UART**](#protocolo-uart)
   * [**Ejemplo UART Arduino Framework**](#ejemplo-uart-arduino-framework)
   * [**Protocolo I2C**](#protocolo-i2c)
   * [**Ejemplo I2C Arduino Framework**](#ejemplo-i2c-arduino-framework)
6. [**Descargas**](#vi.-descargas)
   * [**Esquemático**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FwktweQcighTDhPfS9iHX%2FSCHEMATIC%20XN02%20-%20Digital%20Outputs.pdf?alt=media\&token=d293620a-7a17-4dd9-b196-9334eb350bb5)
   * [**Dimensiones**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fk57p6JdToSI40POPL4B9%2FDIMENSIONS%20%20XN02%20-%20Digital%20Outputs.pdf?alt=media\&token=3f1e6caa-14a3-441c-8909-613fde34d4d0)

## **I. ¿Cómo funciona?**

El módulo **X-NODE Digital Outputs** posee un controlador en hardware integrado con el cual es posible generar señales lógicas (3.3V TTL) 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, un microprocesador o equipos industriales. El módulo integra 8 LEDs de color verde como indicadores y un puerto de conexión con 8 salidas y GND. Los LED poseen un amplio ángulo de visión, una disipación de 40 mW, un flujo de 20 mA y pueden operar en un rango de temperatura de 0 °C hasta 80 °C. Estos pueden utilizarse como indicadores de propósito general para visualizar el estado de diferentes dispositivos, alertas o secuencias. El puerto de 9 pines permite enviar las señales a otros componentes como módulos de relevadores, interfaces paralelas como pantallas LCD, multiplexores, etc.

**X-NODE Digital Outputs** es compatible con el estándar [mikroBUS™](https://www.mikroe.com/mikrobus) de [Mikroe®](https://www.mikroe.com/) 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®](https://www.sparkfun.com/qwiic) de [SparkFun®](https://www.sparkfun.com/) 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** <a href="#ii.-descripcion-del-hardware" id="ii.-descripcion-del-hardware"></a>

<figure><img src="/files/iP5RKW4WWTv0V1yUZbq5" alt=""><figcaption></figcaption></figure>

1. Puerto serigrafiado con pines macho y orificios para salidas digitales
2. Indicadores LED
3. Conectores JST compatibles con [**Qwiic®**](https://www.sparkfun.com/qwiic)
4. Controlador en hardware
5. Puertos de comunicación UART <> I2C
6. Modelo de X-NODE
7. Tipo de X-NODE
8. Conectores estándar [**mikroBUS™**](https://www.mikroe.com/mikrobus)
9. Versión de hardware: R1
10. Componente principal en el X-NODE

### **III. Especificaciones** <a href="#iii.-especificaciones" id="iii.-especificaciones"></a>

CommentShare feedback on the editor

| **Tipo**            | Salidas digitales                                                                                                                                                                                                                                               |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Aplicaciones**    | Integración en proyectos de IoT donde se requiera generar señales digitales, como en el control de actuadores o indicadores. También donde se necesite una serie de indicadores LED para visualizar el estado de diferentes dispositivos, alarmas o secuencias. |
| **Características** | Indicadores LED con un amplio ángulo de visión, disipación de 40 mW, un flujo de corriente continua de 20 mA con un pico de 40 mA y operación en un rango de temperatura de 0 °C hasta 80 °C. Puerto de pines macho y orificios para 8 salidas externas y GND.  |
| **Interfaz**        | UART, I2C                                                                                                                                                                                                                                                       |
| **Compatibilidad**  | Estándar [mikroBUS™](https://www.mikroe.com/mikrobus) y estándar [Qwiic®](https://www.sparkfun.com/qwiic)                                                                                                                                                       |
| **Tamaño**          | 65.15 x 25.38 x 20.5 mm                                                                                                                                                                                                                                         |
| **Voltaje**         | 3.3 V                                                                                                                                                                                                                                                           |

## **IV. Pinout**

La siguiente tabla muestra el pinout del **X-NODE Digital Outputs** con respecto al estándar  [**mikroBUS™**](https://www.mikroe.com/mikrobus) (este último se encuentra en las dos columnas del centro).

<figure><img src="/files/7HcICuWHn2fvqlwQJ7t9" alt=""><figcaption></figcaption></figure>

## **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.

<figure><img src="/files/q8KOJSHHT1r0ciQXrUTU" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Nota:** A partir de este punto se utilizará el índice predeterminado del X-NODE **XN02 - Digital Outputs** para el resto del manual: **XN02A**.
{% endhint %}

**Lista de comandos**

<table data-header-hidden><thead><tr><th width="184"></th><th></th></tr></thead><tbody><tr><td><strong>XN02A?</strong></td><td>Verifica si se estableció una comunicación con éxito.<br><strong>Respuesta:</strong> OK</td></tr><tr><td><strong>XN02A+V</strong></td><td>Obtiene la versión del firmware actual que integra el X-NODE.<br><strong>Respuesta:</strong> XN02A=Versión<br><strong>Ejemplo:</strong> XN02A=0.1</td></tr><tr><td><strong>XN02A+ID=(A-Z)</strong></td><td>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.<br><strong>Respuesta:</strong> OK<br><strong>Ejemplo de envío:</strong> XN02C+ID=H</td></tr><tr><td><strong>XN02A+TW=(1-126)</strong></td><td>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.<br><strong>Respuesta:</strong> OK<br><strong>Ejemplo de envío:</strong> XN02A+TW=28</td></tr><tr><td><strong>XN02A+S=(Out1)(Out2)(Out3)(Out4)(Out5)(Out6)(Out7)(Out8)</strong></td><td>Cambia el estado de cada una de las 8 salidas digitales, sea en los indicadores LED o en el puerto, con dos opciones: 1 (Alto) y 0 (Bajo). La salida 1 será el primer valor de la izquierda, interpretándose de izquierda a derecha.<br><strong>Respuesta:</strong> OK<br><strong>Ejemplo de envío:</strong> XN02A+S=11001100</td></tr></tbody></table>

#### 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 maneras diferentes.

#### Ejemplo UART Arduino Framework

{% hint style="info" %}
Código de ejemplo para el [XC01 - R4](/plataforma-xide-iot/x-nodes/xc01-controlador-wifi-and-bluetooth/r4/x-node-xc01-esp32-wroom-controlador-wifi-and-bluetooth-r4.md), revisa el manual para utilizar nuestro [XC01 - R4](https://docs.microside.com/plataforma-xide-iot/x-nodes/xn02-salidas-digitales/r1/pages/HcLUnJPVDumIHk6xsEpi#v.-configuracion-para-su-uso) en **Arduino IDE/PlatformIO**
{% endhint %}

<pre class="language-cpp"><code class="lang-cpp"><strong>#include "Arduino.h"
</strong>
// Envía una secuencia binaria de longitud fija
// (0 a la izquierda) de 8 bits
void printBinary(uint8_t num) {
  for (int i = 0; i &#x3C; 8; i++) {
    Serial2.print((num >> i) &#x26; 0x01);
  }
  // La función println envía los caracteres &#x3C;CR+LF>
  Serial2.println();
}

void setup() {
  // Inicializa el monitor serial
  Serial.begin(115200);

  // Inicializa la comunicación UART en el puerto MikroBUS
  Serial2.begin(115200, SERIAL_8N1, 16, 17);
}

void loop() {
  // Genera un contador binario con los LEDs del XN02
  for (uint16_t binary_counter = 0; binary_counter &#x3C; 256; binary_counter++) {

    // Limpiamos el buffer
    if (Serial2.available()) {
      Serial2.read();
    }
    
    // Envía el comando
    Serial2.print("XN02A+S=");
    printBinary(binary_counter);

    String success = Serial2.readStringUntil('\n');

    // Verificar si la operación fue exitosa
    if ( !success.startsWith("OK") ) {
      Serial.println( "Error" );
      delay( 1000 );
      return;
    }

    delay(100);
  }

  delay(1000);
}

</code></pre>

### Protocolo I2C

Para poder establecer comunicación se debe conocer la dirección I2C del X-NODE, el valor de fábrica se conforma 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.

<figure><img src="/files/zpci3EWATl3QIj7KBhk9" alt=""><figcaption></figcaption></figure>

#### Configuración

* Velocidad de comunicación: 100 kHz
* Address: 7 bits

{% hint style="info" %}
**Nota:** Verifica que no cuentes con otro dispositivo con la misma dirección (Address) en el BUS I2C, de ser así recuerda que el X-NODE puede cambiar su dirección I2C con el comando **XN02A+TW=(1-126)**.
{% endhint %}

#### 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).

En el **X-NODE Digital Outputs** solo existe una operación, escritura del estado lógico de las entradas. Para leer el registro el dispositivo maestro I2C debe generar las siguientes operaciones:

1. Enviar una **condición de inicio**: El dispositivo maestro genera un lógico bajo (0) en el pin SDA, mientras SCL permanece en alto (1).
2. Enviar la dirección del **X-NODE**: El dispositivo maestro envía la dirección de 7 bits.
3. Enviar el **tipo de operación**: El dispositivo maestro indica si la operación es de lectura (0) o de escritura (1).
4. Esperar una señal de **reconocimiento (ACK)**: El dispositivo 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.
5. Escribir **1 byte** de datos: El dispositivo maestro enviará 8 bits (1 byte), cada bit representa un estado lógico de una salida, donde el bit más significativo (el que se envía primero) corresponde al estado de la salida O8, siguiendo un orden de mayor a menor.
6. Esperar una señal de **reconocimiento (ACK)**: El dispositivo enviará una señal de **reconocimiento (Acknowledgment)** al maestro, indicando que ha terminado de recibir información.
7. Enviar una **condición de paro**: El dispositivo 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).

<figure><img src="/files/AmHAgSQ92AwfaTo0m6Ke" alt=""><figcaption></figcaption></figure>

#### Ejemplo I2C Arduino Framework

{% hint style="info" %}
Código de ejemplo para el [XC01 - R4](/plataforma-xide-iot/x-nodes/xc01-controlador-wifi-and-bluetooth/r4/x-node-xc01-esp32-wroom-controlador-wifi-and-bluetooth-r4.md), revisa el manual para utilizar nuestro [XC01 - R4](https://docs.microside.com/plataforma-xide-iot/x-nodes/xn02-salidas-digitales/r1/pages/HcLUnJPVDumIHk6xsEpi#v.-configuracion-para-su-uso) en **Arduino IDE/PlatformIO**
{% endhint %}

```cpp
#include <Arduino.h>
#include <Wire.h>

void setup() {
  // Inicializa el monitor serial
  Serial.begin(115200);

  // Inicializa la comunicación I2C
  Wire.begin();
}

void loop() {
  // Genera un contador binario con los LEDs del XN02
  for (uint16_t binary_counter = 0; binary_counter < 256; binary_counter++) {

    // Escribe en el registro
    Wire.beginTransmission(0x02);
    Wire.write(binary_counter);

    // Verificar si la operación fue exitosa
    if (Wire.endTransmission() != 0) {
      Serial.println("Error");
      delay(1000);
      return;
    }

    delay( 100 );
  }

  delay(1000);
}

```

### **VI. Descargas** <a href="#vi.-descargas" id="vi.-descargas"></a>

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><mark style="color:green;"><strong>Esquemático</strong></mark></td><td><a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FwktweQcighTDhPfS9iHX%2FSCHEMATIC%20XN02%20-%20Digital%20Outputs.pdf?alt=media&#x26;token=d293620a-7a17-4dd9-b196-9334eb350bb5">https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FwktweQcighTDhPfS9iHX%2FSCHEMATIC%20XN02%20-%20Digital%20Outputs.pdf?alt=media&#x26;token=d293620a-7a17-4dd9-b196-9334eb350bb5</a></td></tr><tr><td align="center"><mark style="color:green;"><strong>Dimensiones</strong></mark></td><td><a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fk57p6JdToSI40POPL4B9%2FDIMENSIONS%20%20XN02%20-%20Digital%20Outputs.pdf?alt=media&#x26;token=3f1e6caa-14a3-441c-8909-613fde34d4d0">https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fk57p6JdToSI40POPL4B9%2FDIMENSIONS%20%20XN02%20-%20Digital%20Outputs.pdf?alt=media&#x26;token=3f1e6caa-14a3-441c-8909-613fde34d4d0</a></td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.microside.com/plataforma-xide-iot/x-nodes/xn02-salidas-digitales/r1/x-node-xn02-salidas-digitales-a-r1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
