# X-NODE / XC08 - BG95 M3 Red celular 2G, LTE y GNSS

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FQymcHbZyNY10p1Ykiupq%2FX-NODE%20LTE%20GNSS%20BG95-M3%20XC08%20XIDE%20MICROSIDE.webp?alt=media&#x26;token=d21f7eb2-93b0-45ce-9b88-09682efaed69" alt=""><figcaption></figcaption></figure>

El **X-NODE 2G LTE GNSS (BG95-M3)** integra un módulo de conectividad celular [**BG95-M3**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series) de [**Quectel®**](https://www.quectel.com/), brindando soluciones **EGPRS, CAT-M1 y NB2-IoT** con cobertura global, geolocalización **GPS/GLONASS**, consumo de energía ultra bajo y soporte para **VoLTE** (solo en CAT-M1). Cuenta con una una bandeja para **nanoSIM – 4FF,** además de un footprint para **eSIM – MFF2 (No incluida)**. También cuenta con un administrador e indicador de carga de baterías lo que lo convierte en una solución ideal para la integración en dispositivos móviles portátiles, proyectos de IoT, Industria 4.0 y aplicaciones M2M como puntos de venta inalámbricos, medición inteligente en diversas industrias (agricultura, distribución de gas, distribución de agua), seguimiento de activos, monitoreo remoto, etc.

### **TABLA DE CONTENIDO**

1. [**¿Cómo funciona?**](#i.-como-funciona)
2. [**Descripción del hardware**](#ii.-descripcion-del-hardware)
3. [**Especificaciones**](#iii.-especificaciones)
   * [**Características de conectores SMA y U.FL**](#caracteristicas-de-conectores-sma-y-u.fl)
4. [**Pinout**](#iv.-pinout)
5. [**Configuración**](#v.-modo-de-uso)
   * [**Selección entre conector SMA y U.FL**](#id-1.-seleccion-entre-conector-sma-y-u.fl)
   * [**Selección del voltaje de alimentación**](#id-2.-seleccion-del-voltaje-de-alimentacion)
   * [**Insertar la batería**](#id-3.-insertar-la-bateria)
   * [**Selección del puerto de comunicación**](#id-4.-seleccion-del-puerto-de-comunicacion)
   * [**Selección de la tarjeta SIM**](#id-5.-seleccion-de-la-tarjeta-sim)
   * [**Configuración de la operadora**](#id-6.-configuracion-de-la-operadora)
   * [**Configuración del APN**](#id-7.-configuracion-del-apn)
6. [**Ejemplo de uso**](#vi.-ejemplo-de-uso)
   * [**Ping a un servidor remoto**](#ping-a-un-servidor-remoto)
   * [**Protocolo MQTT sobre comandos AT**](#protocolo-mqtt-sobre-comandos-at)
   * [**Protocolo MQTT con TinyGSM en Arduino Framework**](#protocolo-mqtt-con-tinygsm-en-arduino-framework)
   * [**GNSS sobre AT**](#gnss-sobre-at)
   * [**GNSS con TinyGSM en Arduino Framework**](#gnss-con-tinygsm-en-arduino-framework)
   * [**Indicador de carga de batería**](#indicador-de-carga-de-bateria)
   * [**Ciclo de aprendizaje de la batería**](#ciclo-de-aprendizaje-de-la-bateria)
   * [**Ejemplo Indicador de carga con Arduino Framework**](#ejemplo-indicador-de-carga-con-arduino-framework)
7. [**Solución de problemas y preguntas frecuentes**](#vii.-solucion-de-problemas-y-preguntas-frecuentes)
8. [**Descargas**](#vi.-descargas)
   * [**Software QCOM\_v1.6**](https://www.quectel.com/download/qcom_v1-8_en/)
   * [**Esquemático**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FNwfqiWCrn3x28Ir4TLzV%2Fxc08-r2-schematic.pdf?alt=media\&token=f6f17b00-b2ba-4573-8229-75452feac9b6)
   * [**Dimensiones**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FQzuHmnHsJcnfGMRbNHBb%2Fxc08-r2-dimensions.pdf?alt=media\&token=cb1ffdd7-c30b-4341-a208-a77d8ed6fe86)

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

El **X-NODE 2G LTE GNSS (BG95-M3)** cuenta con un conector **USB tipo C** para establecer una comunicación con el módulo [**BG95-M3**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series) de [**Quectel®**](https://www.quectel.com/) y para controlar/actualizar el dispositivo. Este módulo integra una antena conmutada para transmisión/recepción de datos y geolocalización, **solo una antena** puede utilizarse a la vez.

Este X-NODE es compatible con cualquier sistema basado en un microcontrolador, microprocesador o equipos industriales. **X-NODE 2G LTE GNSS (BG95-M3)** es compatible con el estándar [**mikroBUS™**](https://www.mikroe.com/mikrobus) de [**Mikroe®**](https://www.mikroe.com/) para un uso fácil, rápido y sencillo con un gran entorno de kits para desarrollo de hardware. Cuenta con bandeja para **nanoSIM – 4FF** y un footprint para **eSIM MFF2 (No incluida)**, solo es posible utilizar una SIM a la vez, consulte la sección Selección de la tarjeta SIM para configurar la SIM a utilizar.

{% hint style="danger" %}
El **X-NODE 2G LTE GNSS (BG95-M3)** puede incluir una **tarjeta SIM precargada con un plan de datos**, [consulte el plan y la vigencia al momento de realizar la compra del dispositivo](https://www.microside.com/shop), si se ha acabado es posible comprar más MB, solicita tu recarga en la página o a través de: [**ventas@microside.com**](mailto:ventas@microside.com). Considere que si el plan de datos de la tarjeta **nanoSIM** no se renueva por un largo periodo de tiempo la tarjeta SIM puede **desactivarse** definitivamente sin previo aviso.
{% endhint %}

Ideal para la integración en dispositivos móviles portátiles gracias a su administrador e indicador de carga para baterías Li-Po/Li-Ion de una sola celda (revise la polaridad/composición de la batería antes de insertarla).

El administrador de carga [MCP7383](https://ww1.microchip.com/downloads/en/DeviceDoc/MCP73831-Family-Data-Sheet-DS20001984H.pdf) de [Microchip Technology®](https://www.microchip.com/) entrega una corriente de carga de hasta 500mA. El indicador de carga de batería I2C [BQ27441](https://www.ti.com/lit/gpn/bq27441-g1) de [Texas Instruments](https://www.ti.com/) permite medir características de baterías de hasta 8000 mAh.

Para hacer uso del dispositivo debe utilizar comandos **AT** o protocolo punto a punto (**PPPoS**), puede encontrar la especificación completa en la hoja de datos del fabricante a través del siguiente enlace: [**Datos Técnicos**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series).

## **II. Descripción del hardware**

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FZO8L3JFvfSYSNvR0AAzv%2Fuser-manual-hardware-description.jpg?alt=media&#x26;token=274e4683-f5be-4373-9696-bc990c1c7e03" alt=""><figcaption></figcaption></figure>

1. Conectores SMA hembra y U.FL macho para antenas LTE y GNSS
2. Módulo SoC [**BG95-M3**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series)
3. Indicador del estado de carga de batería (<mark style="color:red;">**CHG**</mark>)
4. Selector de entrada para comandos **AT**, **mB** ([**mikroBUS™**](https://www.mikroe.com/mikrobus)) <> **USB** (puerto USB tipo C)
5. Modo de funcionamiento en el puerto USB tipo C, **AT** (Mandar comandos AT) <> **FW** (Actualizar firmware)
6. Conector USB tipo C
7. Push button conectado al pin **PWRKEY** (Al presionarlo por 1 segundo se activará o apagará el módulo y por más de 3 segundos se ejecutará RESET)
8. Puerto de comunicación UART e I2C
9. Modelo de X-NODE
10. Tipo de X-NODE
11. Multiplexor para selección entre **nanoSIM** o **eSIM**
12. Bandeja para tarjeta **nanoSIM – 4FF**
13. Footprint para **eSIM – MFF2** (eSIM no incluida)
14. Jumper para habilitar/deshabilitar el administrador e indicador de baterías.
15. Test Points: TP1: PWRKEY\
    TP2: USB Boot\
    TP3: 10k Pull to VDD Ext\
    TP4: 3.3V from regulator\
    TP5: DBG TXD\
    TP6: DBG RXD\
    TP7: VDD Ext
16. Indicador de carga de batería [**BQ27441**](https://www.ti.com/lit/gpn/bq27441-g1) de [**Texas Instruments**](https://www.ti.com/)
17. Conector JST PHR-2 de 2mm para uso con baterías Li-Po/Li-Ion de una celda.
18. Jumpers para alimentar el SoC [**BG95-M3**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series) desde el conector [**mikroBUS™**](https://www.mikroe.com/mikrobus) (3.3VmB) o desde el regulador de la tarjeta (VCC).

{% hint style="danger" %}
**¡ Advertencia !**: Revise la sección [Configuración](#v.-configuracion) antes de conectar el dispositivo y suelde los jumpers apropiadamente.
{% endhint %}

19. Conectores estándar [**mikroBUS™**](https://www.mikroe.com/mikrobus)
20. Versión de hardware: **R2**
21. Número de parte del componente principal en el **X-NODE**

## **III. Especificaciones**

<table data-header-hidden><thead><tr><th width="205"></th><th></th></tr></thead><tbody><tr><td>Tipo</td><td>Comunicación GPS / GLONASS / EGPRS / LTE CAT-M1 / NB2-IoT</td></tr><tr><td>Aplicaciones</td><td>Integración en proyectos para <strong>IoT</strong> y aplicaciones <strong>M2M</strong> de bajo consumo, como medición inteligente, seguimiento de activos, monitoreo remoto, puntos de venta inalámbricos, etc.</td></tr><tr><td>Módulo</td><td><a href="https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series">BG95-M3</a></td></tr><tr><td>Fabricante</td><td><a href="https://www.quectel.com">Quectel®</a></td></tr><tr><td>Características</td><td><strong>EDGE:</strong><br>* Enlace de subida de hasta 236.8 kbps<br>* Enlace de bajada de hasta 296 kbps<br><strong>GPRS:</strong><br>* Enlace de subida de hasta 85.5 kbps<br>* Enlace de bajada de hasta 107 kbps<br><strong>LTE CAT-M1:</strong><br>* Enlace de subida de hasta 1119 kbps<br>* Enlace de bajada de hasta 588 kbps<br><strong>NB1-IoT:</strong><br>* Enlace de subida de hasta 70 kbps<br>* Enlace de bajada de hasta 32 kbps<br><strong>NB2-IoT:</strong><br>* Enlace de subida de hasta 158 kbps<br>* Enlace de bajada de hasta 127 kbps</td></tr><tr><td>Bandas compatibles</td><td><strong>EGPRS:</strong><br>GSM 850 / EGSM 900 / DCS 1800 / PCS 1900<br><strong>Banda global LTE CAT-M1:</strong><br>B1 / B2 / B3 / B4 / B5 / B8 / B12 / B13 / B18 / B19 / B20 / B25 / B26 / B27 / B28 / B66 / B85;<br><strong>Banda global LTE NB-IoT:</strong><br>B1 / B2 / B3 / B4 / B5 / B8 / B12 / B13 / B18 / B19 / B20 / B25 / B28 / B66 / B71 / B85;</td></tr><tr><td>Administrador de carga</td><td><a href="https://ww1.microchip.com/downloads/en/DeviceDoc/MCP73831-Family-Data-Sheet-DS20001984H.pdf">MCP7383</a></td></tr><tr><td>Fabricante</td><td><a href="https://www.microchip.com/">Microchip Technology®</a></td></tr><tr><td>Características</td><td>Para baterías LiPo-Li-Ion de una sola celda, corriente de carga de hasta 500 mA. Con detección de batería automática y mecanismo de recarga automático.</td></tr><tr><td>Indicador de carga de batería</td><td><a href="https://www.ti.com/lit/gpn/bq27441-g1">BQ27441</a></td></tr><tr><td>Fabricante</td><td><a href="https://www.ti.com/">Texas Instruments</a></td></tr><tr><td>Características</td><td>Para baterías LiPo-Li-Ion de una sola celda de hasta 8000mAh, permite medir: estado de carga (SoC), estado de salud (SoH), capacidad (mAh), voltaje (mV) y corriente de carga/descarga (mA).</td></tr><tr><td>Interfaz</td><td>UART, USB, I2C</td></tr><tr><td>Compatibilidad</td><td>Estándar <a href="https://www.mikroe.com/mikrobus">mikroBUS™</a></td></tr><tr><td>Tamaño</td><td>86.55 x 26.92 x 20.5 mm</td></tr><tr><td>Voltaje</td><td>3.3 VDC</td></tr></tbody></table>

### **Características de conectores SMA y U.FL**

| Conector SMA:                                                                                                                                                                                                      | Conector IPEx UFL:                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ![](https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F0x6P386oSf2KkiGmAZSI%2Fimage.png?alt=media\&token=c52a84df-19b5-4903-b14d-52ac35830d89) | ![](https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Ft33mPE9LkGB4OO5ypb5r%2Fimage.png?alt=media\&token=d4a19f9a-2e0b-40c8-9abd-0a8cd50ca5ad) |
| <p>Frecuencia máxima: 18 GHz<br>Impedancia: 50 Ohms<br>Polaridad: Standard<br>Género: Hembra</p>                                                                                                                   | <p>Serie RF: RP-UMCC<br>Frecuencia máxima: 6 GHz<br>Impedancia: 50 Ohms<br>Polaridad: Reverse</p>                                                                                                                  |

## **IV. Pinout**

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FngEsX9WaQyeKDbMicPtP%2Fuser-manual-mikrobus-pinout-table.png?alt=media&#x26;token=49b6a7c6-b56a-4077-a2ab-0dcadcac64c4" alt=""><figcaption></figcaption></figure>

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

* **WK**: Pin GPOUT del indicador de baterías, puede configurarse por software para salir del modo de apagado del indicador o para indicar cuando la batería está por agotarse.
* **PK**: PWRKEY del módulo celular, enviar un 1 lógico (3.3VDC) a este pin permite encender, apagar y reiniciar el módulo.
* **TX** y **RX**: Puerto de comunicación para enviar comandos AT.
* **SCL** y **SDA**: Puerto de comunicación del indicador de batería.
* **5V**: Voltaje de alimentación 5VDC, si el jumper VCC está conectado este pin servirá para alimentar el módulo.
* **3V3**: Voltaje de funcionamiento del módulo 3.3VDC, si el jumper 3V3 mB está conectado este pin servirá para alimentar el módulo.

## **V. Configuración**

{% hint style="danger" %}
**¡ Advertencia !**: Lea cuidadosamente las siguientes instrucciones antes de operar el equipo y consúltelas si es necesario para garantizar el correcto funcionamiento del mismo. No hacerlo puede resultar en lesiones, daños a la propiedad o destrucción del dispositivo.
{% endhint %}

### **1. Selección entre conector SMA y U.FL**

El **X-NODE 2G LTE GNSS (BG95-M3)** viene configurado de fábrica para uso con antenas **SMA**, para utilizar antenas **U.FL** es necesario cambiar de posición la resistencia que viene cerca de los conectores, puede configurar la antena **LTE** y **GNSS** por separado para utilizar diferentes tipos de antena.&#x20;

{% hint style="warning" %}
Considere que cambiar el tipo de antena requiere habilidades para soldar componentes de montaje superficial (SMD).
{% endhint %}

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FyJjqwn2YeRdrmkDkfUDL%2FConector%20SMA%20y%20UFL.png?alt=media&#x26;token=dd53445c-63e0-43f7-8454-7a08deaacc6d" alt=""><figcaption></figcaption></figure>

También considere que los conectores **U.FL** tienen **menos ciclos de acoplamiento**, típicamente unas cuantas decenas de ciclos, mientras que los conectores **SMA** tienen típicamente al menos 100 ciclos. Superar el número de ciclos de acoplamiento resultará en una unión más frágil y propensa a desconectarse, además de causar una pérdida del rendimiento de la antena.

Se recomienda utilizar el conector **SMA** durante la etapa de pruebas y solo utilizar el conector **U.FL** durante el despliegue del dispositivo y solo si es absolutamente necesario. Si el módulo tiene problemas de cobertura revise que la antena instalada coincida con la antena seleccionada con la resistencia SMD.

### **2. Selección del voltaje de alimentación**

El **X-NODE 2G LTE GNSS (BG95-M3)** tiene cuatro fuentes de alimentación:

1. 5VDC a través del puerto USB tipo C
2. 5VDC a través del pin 5V en el zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus)
3. 3.3-4.2 VDC de una batería tipo Li-Po/Li-Ion a través del conector JST PHR-2 de 2mm.
4. 3.3VDC a través del pin 3V3 en el zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus)

Es importante configurar correctamente los jumpers soldables VCC, 3V3mB y EN para obtener el comportamiento deseado.

<details>

<summary>Pruebas de escritorio</summary>

Esta es la configuración por defecto y le permite probar todas las funcionalidades del dispositivo de manera segura. Configure los jumpers <mark style="color:green;">**VCC y EN**</mark>, desuelde el jumper **3V3mB** como se muestra en la figura:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FEzFD88m3C649sFUUmw10%2Fuser-manual-config-default.jpg?alt=media&#x26;token=65617147-036e-40aa-9926-1c8c21e02138" alt="" width="375"><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** puede alimentarse y **cargar la batería desde el puerto USB tipo C o el pin 5V** del zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus), pero desconectará la salida de 3.3VDC hacia el pin 3V3 del zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus). Bajo esta configuración la batería solo alimentará al **X-NODE 2G LTE GNSS (BG95-M3)** pero no otros dispositivos. Esta configuración es útil durante la etapa de desarrollo o si su sistema no puede entregar suficiente corriente para la transmisión/recepción de datos, la batería entregará la corriente faltante y se cargará mientras el dispositivo no esté en uso. Se recomienda cambiar esta configuración a otra más apropiada al desplegar la solución.

**Uso recomendado**: Durante la etapa de desarrollo para probar el funcionamiento del dispositivo de manera segura.

</details>

<details>

<summary>Dispositivo portátil: 5VDC + Batería Li-Po/Li-Ion</summary>

Configure todos los jumpers: <mark style="color:green;">**VCC, 3V3mB y EN**</mark> como se muestra en la figura:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FbgUs4I7hmUHSdpwwmfDQ%2Fuser-manual-config-5v%2Bbat.jpg?alt=media&#x26;token=da1fa55a-3e55-4d55-87d4-f9361b67a2eb" alt="" width="375"><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** puede alimentarse y **cargar la batería desde el puerto USB tipo C o el pin 5V** del zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus) y regulará un voltaje de 3.3VDC hacia el pin 3V3 del zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus) con una salida **máxima de&#x20;**<mark style="color:red;">**100mA**</mark>**&#x20;en redes 2G y&#x20;**<mark style="color:red;">**300mA**</mark>**&#x20;en redes LTE/NB**. Bajo esta configuración deberá **desactivar** cualquier otro regulador de 3.3VDC en el zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus), no hacerlo puede destruir el regulador integrado. **NO debe conectar** motores, servomotores, relevadores o cualquier tipo de carga inductiva o cargas superiores a <mark style="color:red;">**100mA**</mark> si utiliza **2G** o <mark style="color:red;">**300mA**</mark> si utiliza **LTE/NB**.

**Uso recomendado**: Sistemas de monitoreo portátiles de bajo consumo de corriente, dispositivos de uso personal, equipos de laboratorio, puntos de venta inalámbricos.

</details>

<details>

<summary>Fuente externa de 5VDC</summary>

Configure únicamente el jumper <mark style="color:green;">**VCC**</mark>, desuelde los jumpers **3V3mB y EN** como se muestra en la figura:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FyRuUzsWEyJTRixYqqgnd%2Fuser-manual-config-5v.jpg?alt=media&#x26;token=5a6ee253-ea59-46f6-bc01-86040b6e75d0" alt="" width="375"><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** se **alimenta desde el puerto USB tipo C o el pin 5V** del zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus), pero <mark style="color:red;">**no carga la batería**</mark>. Esto es útil si el sistema ya cuenta con una batería o una fuente de poder de mayor voltaje, en ese caso necesitará un regulador para entregar 5VDC y 3.3VDC al zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus), por ejemplo, nuestro **XN14 - Fuente de Alimentación 24V DC** admite fuentes de voltaje desde 7VDC hasta 24VDC. También al deshabilitar la carga de la batería la dirección I2C del indicador de la batería se deshabilita (**0x55**), esto puede <mark style="color:$success;">**resolver conflictos**</mark> si cuenta con otro dispositivo que utilice la **misma dirección I2C**.

**Uso recomendado**: Sistemas de monitoreo y control de mediano/alto consumo energético como robots, sistemas con motores eléctricos, electroválvulas, contactores, relevadores, rastreadores en vehículos.

</details>

<details>

<summary>Fuente externa de 3.3VDC</summary>

Configure únicamente el jumper <mark style="color:green;">**3V3mB**</mark>, desuelde los jumpers **VCC y EN** como se muestra en la figura:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FZ3bP54dy5w5TshjpmNcO%2Fuser-manual-config-3v3.jpg?alt=media&#x26;token=9a5c9254-e7be-47ad-a73a-25ae5b0d2bc2" alt="" width="375"><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** se alimenta desde el pin 3V3 del zócalo [**mikroBUS™**](https://www.mikroe.com/mikrobus), no carga la batería y se desactiva el regulador LDO. Esto es útil si el sistema ya cuenta con una fuente de 3.3VDC de al menos 2 amperios y un administrador de baterías de alta eficiencia energética. También al deshabilitar la carga de la batería la dirección I2C del indicador de la batería se deshabilita (**0x55**), que puede <mark style="color:$success;">**resolver conflictos**</mark> si cuenta con otro dispositivo que utilice la **misma dirección I2C**.

**Uso recomendado**: Sistemas de ultra bajo consumo energético que se encuentran en zonas aisladas o de difícil acceso, sin disponibilidad de redes de energía eléctrica. Sistemas alimentados por paneles solares, baterías de alta capacidad que no son recargables o baterías recargables de otro tipo de composición química, p.ej. plomo-ácido, NiCd, NiMH, o paquetes de 2 o más baterías en configuración serie/paralelo.

</details>

### **3. Insertar la batería**

Estas instrucciones solo aplican si el módulo se encuentra en la configuración [**Pruebas de escritorio**](#id-2.-seleccion-del-voltaje-de-alimentacion) o [**5VDC + Batería Li-Po/Li-Ion**](#id-2.-seleccion-del-voltaje-de-alimentacion), si no lo ha hecho, <mark style="color:red;">**lea cuidadosamente el paso anterior**</mark>.

{% hint style="danger" %}
**¡ Advertencia !**: Es importante que revise la polaridad antes de conectar la batería. No hacerlo puede dañar el módulo, causar fuego o explosión de la batería.

Solo conecte baterías tipo Li-Po o Li-Ion de **una celda**, nunca conecte baterías no recargables, baterías de múltiples celdas o baterías recargables de otro tipo de composición química.
{% endhint %}

Para usar la batería asegúrese de soldar los jumpers VCC, 3V3mB y EN de acuerdo a la configuración 5VDC + Batería Li-Po/Li-Ion. Se recomienda utilizar una batería con circuito de protección integrado (PCM), común en las baterías Li-Po.

**Revise que la polaridad** de la batería sea correcta, de ser necesario puede invertir la polaridad del conector PH de 2.0mm en la batería, no es necesario cortar ni soldar, simplemente retire los pines metálicos y reubíquelos en la posición correcta.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FqFhwI2GoCwH2GiBsGte4%2Fuser-manual-batt-insertion.jpg?alt=media&#x26;token=b8c38f02-3e25-427d-8205-4aa1a443875c" alt=""><figcaption></figcaption></figure>

Inserte la batería, para cargar solo conecte el cable USB tipo C a un regulador o una computadora, el indicador <mark style="color:red;">**CHG**</mark> se iluminará durante la carga y se apagará al finalizar.

### **4. Selección del puerto de comunicación**

El **X-NODE 2G LTE GNSS (BG95-M3)** cuenta con 2 interfaces de comunicación para su uso y configuración, el puerto de comandos **AT** y el puerto compuesto **USB**.

* **Puerto de comandos AT**: La comunicación utiliza el protocolo UART con la siguiente configuración:\
  Velocidad de comunicación: 115,200 bps\
  Paridad: Ninguna\
  Bits de datos: 8\
  Bits de paro: 1

{% hint style="info" %}
Los comandos AT puede encontrarlos en la hoja de datos del fabricante a través del siguiente enlace: [**Datos Técnicos**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series).
{% endhint %}

* **Puerto compuesto USB**: La comunicación utiliza el protocolo USB2.0 creando un dispositivo compuesto con hasta 4 interfaces:\
  **USB DM**: Puerto de depuración, permite enviar y recibir comandos AT.\
  **NMEA**: Puerto para recibir sentencias de geolocalización en formato NMEA.\
  **Módem**: Configurable con uno o dos puertos de módem bajo CDC ACM.\
  **RmNet**: Puerto de red remota **R**e**m**ote **Net**work, puerto de control y datos para la gestión de datos inalámbricos y comunicación con la tarjeta SIM, requiere un driver USB compatible con mensajes QMI (Qualcomm MSM Interface).\
  **ECM**: Puerto de comunicación bajo la clase USB CDC-Ethernet, lo que permite emular una interfaz de red Ethernet a través del puerto USB.

El puerto de comandos AT se recomienda para pruebas de escritorio y para microcontroladores con poca memoria o que no cuenten con periférico USB2.0 con modo huésped. El puerto compuesto USB se recomienda para sistemas que ejecuten Linux embebido.

Para configurar el puerto de comunicación el **X-NODE 2G LTE GNSS (BG95-M3)** cuenta con dos interruptores: **AT** y **FW**.

<details>

<summary>AT sobre USB</summary>

Esta es la configuración por defecto, le permite comunicarse con el módulo utilizando el puente USB a serial integrado utilizando comandos **AT** o protocolo **PPP**, ambos interruptores deben encontrarse en la posición **USB**:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fna7rVSMTGqANCAKw0S3n%2Fuser-manual-comm-at-usb.png?alt=media&#x26;token=b19d6650-7de8-4ab1-ba2f-50155f2961d9" alt=""><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** enumera una interfaz de comunicación serial (CDC-RS232) al conectarse a través del puerto USB tipo C. Para utilizar el dispositivo deberá tener instalado el driver de [Silicon Labs CP210x](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads), en macOS deberá reiniciar el equipo después de la instalación, en Linux deberá contar con privilegios de super usuario. Puede seguir nuestra guía para instalar estos drivers en el siguiente [enlace](https://docs.microside.com/ambientes-de-programacion-ides/platformio-ide-visual-studio-code#instalar-driver-usb-silicon-labs).

Puede identificar el puerto de comunicación con el nodo en Windows revisando el **Administrador de dispositivos**:

En el caso de macOS puede utilizar el comando:

```
ls -lha /dev/tty*
```

y en Linux el comando:

```
dmesg | grep tty
```

**Uso recomendado**: Permite seleccionar la tarjeta SIM a utilizar, editar configuración de la operadora/APN y explorar el funcionamiento de los comandos AT.

</details>

<details>

<summary>AT sobre mikroBUS™</summary>

Esta configuración le permite hacer lo mismo que la configuración **AT sobre USB** a través del puerto [mikroBUS™](https://www.mikroe.com/mikrobus), el interruptor **AT** deben encontrarse en la posición **mB**, la posición del interruptor **FW** es irrelevante:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F09ubVW4GASzmz5XEWmUV%2Fuser-manual-comm-at-mB.png?alt=media&#x26;token=386f5543-446b-40f8-85b4-d53b9f101636" alt=""><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** se comunica utilizando el protocolo UART usando comandos **AT** o protocolo **PPP**.

**Uso recomendado**: En proyectos que requieran comunicación celular utilizando microcontroladores con poca cantidad de memoria o que no cuenten con periférico USB2.0 con modo huésped.

</details>

<details>

<summary>Modem sobre USB</summary>

Esta configuración enumera un dispositivo compuesto USB, lo que le permite tener hasta 4 interfaces de 5 tipos: USB DM, NMEA, Modem, RmNet y ECM. Revise el comando **AT+QCFGEXT="usbnet"** del manual [**Quectel\_BG95\&BG77\&BG600L\_Series\_QCFGEXT\_AT\_Commands\_Manual**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/) para obtener más información.

El interruptor **FW** deben encontrarse en la posición **FW**, la posición del interruptor **AT** debe encontrarse en la posición USB:

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fj44CH8xCdWFeWF9KMfPE%2Fuser-manual-comm-modem-usb.png?alt=media&#x26;token=31caed92-f0f1-4f3e-85f7-3eef8984241c" alt=""><figcaption></figcaption></figure>

En esta configuración el **X-NODE 2G LTE GNSS (BG95-M3)** enumera un dispositivo compuesto al conectarse a través del puerto USB tipo C, dependiendo de la configuración **AT+QCFGEXT="usbnet"** el dispositivo requerirá una serie de drivers genéricos y propietarios que pueden encontrarse en la sección de drivers en la [página del fabricante](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/). Este puerto también permite realizar actualizaciones de firmware con la herramienta [QFlash](https://www.quectel.com/download/qflash_v7-5_en/).

**Uso recomendado**: En proyectos que requieran comunicación celular de baja potencia y área amplia (LPWA), con sistemas que ejecuten Linux embebido o computadoras de una sola tarjeta o durante el proceso de actualización del módulo.

</details>

### **5. Selección de la tarjeta SIM**

El **X-NODE 2G LTE GNSS (BG95-M3)** cuenta con una una bandeja para **nanoSIM – 4FF** y un footprint para soldar una **eSIM**, sin embargo, **solo puede usar una SIM a la vez**, al cambiar entre SIM deberá reiniciar el módulo y después **reconfigurar la operadora y el APN**.

El proceso requiere enviar comandos AT, por lo que requerirá una terminal serial, puede utilizar la terminal serial oficial de Quectel ***"QCOM"*** para Windows a través del siguiente [**enlace**](https://microside.com/?sdm_process_download=1\&download_id=19421), para macOS o Linux puede usar cualquier terminal serial, incluso la terminal de <mark style="color:blue;">**ArduinoIDE**</mark>.

En el **X-NODE 2G LTE GNSS (BG95-M3)** configure el puerto de comunicación en modo **AT sobre USB** y conecte el dispositivo a la computadora, no olvide **instalar los drivers** y colocar las antenas si no lo ha hecho todavía.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fna7rVSMTGqANCAKw0S3n%2Fuser-manual-comm-at-usb.png?alt=media&#x26;token=b19d6650-7de8-4ab1-ba2f-50155f2961d9" alt="" width="328"><figcaption></figcaption></figure>

Si está en Windows ejecute **QCOM**, en Linux/macOS ejecute la terminal serial, configure la comunicación con los siguientes parámetros:<br>

* Velocidad de comunicación: 115,200 bps
* Paridad: Ninguna
* Bits de datos: 8
* Bits de paro: 1
* Send with Enter/Send with CRLF

Después abra el puerto, en **QCOM** presione el botón **Open Port**, si la comunicación es correcta se mostrará el mensaje:

```
Open COM Port Success
```

Si tiene problemas consulte la sección de [Solución de problemas y preguntas frecuentes](#solucion-de-problemas-y-preguntas-frecuentes).

Inserte la tarjeta SIM en la bandeja para **nanoSIM – 4FF**, después presione brevemente el botón "PK" del **X-NODE 2G LTE GNSS (BG95-M3)** para encender el módulo, si la configuración es correcta se mostrarán los siguientes mensajes:

```
RDY

APP RDY
```

En **QCOM** escriba el comando en el campo **Input String**, marque la casilla **Send With Enter**, desmarque la casilla **HEX String** y presione el botón **Send Command** para enviar comandos.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FFatg2pB1kV8mvHym44Og%2Fuser-manual-qcom-config.png?alt=media&#x26;token=8939b499-bbf1-4570-9446-02cfe5f63f5d" alt=""><figcaption></figcaption></figure>

Para identificar la SIM seleccionada actualmente envíe el siguiente comando **AT+ICCID**, la respuesta mostrará el identificador de la tarjeta SIM, este número es importante para **administrar la tarjeta SIM** y solicitar recargas.

```
AT+ICCID
```

```
+ICCID: xxxxxxxxxxxxxxxxxxxx

OK
```

Si la respuesta muestra un error 13 y si la **tarjeta nanoSIM** está correctamente insertada, entonces significa que la tarjeta SIM configurada es la **eSIM**. Para el resto de los códigos de error revise la nota de aplicación [**Quectel\_BG95BG77BG600L\_Series\_AT\_Commands\_Manual**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/) sección 23.5. Summary of CME ERROR Codes.

```
+CME ERROR: 13
```

El multiplexor de la tarjeta SIM se controla por el pin 66 del módulo, para cambiar la SIM configurada deberá enviar comandos para controlar este pin, recuerde que para usar una tarjeta **eSIM** deberá soldar una en el footprint destinado para este propósito, a continuación, se muestran los comandos para seleccionar la tarjeta SIM actual:

<details>

<summary>Utilizar la eSIM</summary>

Inicializa el Pin 66 como salida

```
AT+QCFG="gpio",1,66,1,0,7,1
```

Escribe 0 en el pin 66

```
AT+QCFG="gpio",3,66,0,1
```

Reinicia el módulo para aplicar los cambios

```
AT+CFUN=1,1
```

</details>

<details>

<summary>Utilizar la nanoSIM</summary>

Inicializa el Pin 66 como salida

```
AT+QCFG="gpio",1,66,1,0,7,1
```

Escribe 1 en el pin 66

```
AT+QCFG="gpio",3,66,1,1
```

Reinicia el módulo para aplicar los cambios

```
AT+CFUN=1,1
```

</details>

{% hint style="warning" %}
Después de seleccionar la tarjeta SIM es importante que configure la operadora y el APN. De lo contrario no podrá conectarse a internet.
{% endhint %}

### **6. Configuración de la operadora**

Cada vez que cambie la tarjeta SIM deberá configurar la operadora y el APN. Primero deberá identificar las redes disponibles con el comando **AT+COPS=?** para confirmar que su operadora tenga cobertura en la región, este comando puede demorar hasta 5 minutos en finalizar la búsqueda de redes, por favor espere.

```
AT+COPS=?
```

Ejemplo de respuesta (en México):

{% code overflow="wrap" %}

```
+COPS: (1,"TELCEL","TELCEL","334020",8),(1,"AT&T","AT&T","334050",8),(1,"Movistar","TEMM","33403",8),(1,"AT&T","AT&T","334090",8),(1,"AT&T","AT&T","334050",9),(1,"TELCEL","TELCEL","334020",9),,(0,1,2,3,4),(0,1,2)

OK
```

{% endcode %}

Este comando brinda información de las redes disponibles separadas por paréntesis, el formato es el siguiente ( \<con\_status>,\<oper\_long>,\<oper\_short>,\<oper\_num>,\<Ac\_T>):

1. **\<con\_status>**: Estado de la conexión, de tipo numérico:
   * 0: Desconocido
   * 1: Operadora disponible
   * 2: Conectado a esta operadora
   * 3: Operadora no disponible
2. **\<oper\_long>**: Nombre completo de la operadora en formato alfanumérico.
3. **\<oper\_short>**: Nombre corto de la operadora en formato alfanumérico.
4. **\<oper\_num>**: [Código de país móvil](https://en.wikipedia.org/wiki/Mobile_country_code) de la operadora en formato numérico.
5. **\<Ac\_T>**: Tecnología de conexión:
   * 0: GSM - 2G
   * 8: eMTC - LTE
   * 9: NB-IoT

utilizando la respuesta de ejemplo podemos identificar las siguientes redes:

| Estado     | Nombre   | Nombre corto | MCC/MNC | Tecnología |
| ---------- | -------- | ------------ | ------- | ---------- |
| Disponible | TELCEL   | TELCEL       | 334020  | LTE        |
| Disponible | AT\&T    | AT\&T        | 334050  | LTE        |
| Disponible | Movistar | TEMM         | 33403   | LTE        |
| Disponible | AT\&T    | AT\&T        | 334090  | LTE        |
| Disponible | AT\&T    | AT\&T        | 334050  | NB-IoT     |
| Disponible | TELCEL   | TELCEL       | 334020  | NB-IoT     |

{% hint style="danger" %}
**¡ Advertencia !**: Aunque el estado de la red es disponible, no significa que el dispositivo pueda conectarse a esa red, se requiere una tarjeta SIM autorizada por la operadora. Nuestros servicios ofrecen membresías **multicarrier**, lo que le permite conectarse a redes de múltiples operadoras, [puede consultar con nuestro equipo de soporte las operadoras compatibles con nuestras tarjetas eSIM y la cobertura de nuestros servicios](https://www.microside.com/contacto)
{% endhint %}

Para seleccionar una operadora puede utilizar el método automático, manual o una combinación de ambos:

<details>

<summary>Seleccionar una operadora con el método automático</summary>

El método automático es más fácil de implementar, el módulo intentará conectarse a una de las redes disponibles, sin embargo, el módulo solo verifica si la conexión con la operadora es exitosa, no verifica si la conexión a internet funciona correctamente, si no tiene acceso a internet o experimenta desconexiones se recomienda utilizar el método manual.

Comienza el proceso automático de conexión a la red:

```
AT+COPS=0
```

Si la conexión es exitosa el módulo responderá:

```
OK
```

De lo contrario se mostrará un mensaje de error, revise la sección de [solución de problemas y preguntas frecuentes](#solucion-de-problemas-y-preguntas-frecuentes) para obtener más información.

</details>

<details>

<summary>Seleccionar una operadora con el método manual</summary>

Este método permite el control total de la red a la que se va a intentar conectar el módulo, requiere enviar un comando con la siguiente estructura:

```
AT+COPS=1,2,"<oper_num>",<Ac_T>
```

Por ejemplo, para conectarse a la red **LTE** de **AT\&T** el comando es el siguiente:

```
AT+COPS=1,2,"334050",8
```

Si la conexión es exitosa el modulo responderá:

```
OK
```

De lo contrario se mostrará un mensaje de error, revise la sección de [solución de problemas y preguntas frecuentes](#solucion-de-problemas-y-preguntas-frecuentes) para obtener más información.

</details>

<details>

<summary>Seleccionar una operadora combinando el método manual y el automático</summary>

Este método permite establecer una operadora manualmente, pero, si la conexión falla el módulo intentará conectarse a cualquier otra red disponible, el comando tiene la estructura

```
AT+COPS=4,2,"<oper_num>",<Ac_T>
```

Por ejemplo, para conectarse a la red **LTE** de **AT\&T** el comando es el siguiente:

```
AT+COPS=4,2,"334050",8
```

Si la conexión es exitosa el modulo responderá:

```
OK
```

De lo contrario se mostrará un mensaje de error, revise la sección de [solución de problemas y preguntas frecuentes](#solucion-de-problemas-y-preguntas-frecuentes) para obtener más información.

Considere que si la red de AT\&T no se encuentra disponible el módulo intentará conectarse a cualquier otra red disponible.

</details>

Para consultar la red a la que se encuentra conectado actualmente puede utilizar el comando **AT+COPS?** :

```
AT+COPS?
```

Si el módulo se encuentra conectado a una red responderá:

```
+COPS: <mode_conn>,<oper_format>,"<oper>",<Ac_T>
```

* \<mode\_>: Modo de conexión utilizado
  * 0: Automático
  * 1: Manual
  * 2: Desconexión manual de la red
* \<oper\_format>: Formato del siguiente campo
  * 0: Nombre completo de la operadora en formato alfanumérico.
  * 1: Nombre corto de la operadora en formato alfanumérico.
  * 2: [Código de país móvil](https://en.wikipedia.org/wiki/Mobile_country_code) de la operadora en formato numérico.
* \<oper\_>: Operadora en el formato especificado en el campo anterior
* \<Ac\_T>: Tecnología utilizada para la conexión:
  * 0: GSM - 2G
  * 8: eMTC - LTE
  * 9: NB-IoT

### **7. Configuración del APN**

Un nombre de punto de acceso o [**APN**](https://en.wikipedia.org/wiki/Access_Point_Name) es el nombre de la [**puerta de enlace**](https://es.wikipedia.org/wiki/Puerta_de_enlace) entre la conexión móvil y la red de internet o una red privada. Aunque el dispositivo se encuentre conectado a una operadora **no tendrá acceso a internet** hasta proporcionar los **datos del APN**, durante este proceso la operadora identificará el tipo de conexión y asignará una IP apropiada para el ruteo de datos. En la mayoría de los casos se recomienda utilizar el **mecanismo de suscripción por petición (automático)**, sin embargo, es posible que este mecanismo falle por múltiples motivos cuya explicación escapa al alcance de este manual. En general si la suscripción por petición falla entonces deberá consultar con el proveedor de la tarjeta SIM cuáles son los valores correctos del APN y configurarlos en un contexto PDP, recuerde que solo hace falta configurarlo **cada vez que cambie de SIM**.

Cada sesión a internet requiere un [contexto PDP](https://en.wikipedia.org/wiki/GPRS_core_network#PDP_context) (Packet Data Protocol), en este contexto se define el APN, que se enviará al solicitar una dirección IP a la red de la operadora. El **X-NODE 2G LTE GNSS (BG95-M3)** soporta hasta 16 contextos PDP, para mantener el manual simple se configurará exclusivamente el contexto con identificador 1, lea el manual del fabricante si quiere obtener más información.

<details>

<summary>Usar el mecanismo de suscripción por petición (recomendado)</summary>

El mecanismo de suscripción por petición permite obtener los datos del APN automáticamente, se recomienda utilizar esta configuración debido a que puede funcionar incluso si cambia la tarjeta SIM, lo que lo hace más fácil de implementar, sin embargo, puede que su operadora no soporte este mecanismo o su tarjeta SIM requiera declarar manualmente los datos del APN.

Debe enviar dos comandos para configurar el método automático:

```
AT+CGDCONT=1,"IP",""
```

```
AT+QICSGP=1,1,"","","",0
```

Para ambos comandos, si se enviaron correctamente el módulo responderá con:

```
OK
```

</details>

<details>

<summary>Definir el contexto PDP</summary>

El mecanismo manual requiere conocer previamente los valores del APN de su operadora, deberá enviar dos comandos con la siguiente estructura:

**AT+CGDCONT=\<context\_id>,"\<PDP\_type>","\<APN\_str>","\<PDP\_addr>"**

* \<context\_id>: ID del contexto PDP a configurar, en este manual se utiliza el valor 1
* \<PDP\_type>: Tipo de protocolo de paquetes de datos, debe enviarse con comillas dobles
  * "IP": IPv4
  * "PPP": Protocolo punto a punto
  * "IPV6": IPv6
  * "IPV4V6": Permite utilizar IPv6 y para compatibilidad IPv4
  * "Non-IP": Protocolos No-IP, generalmente sobre UDP.
* \<APN\_str>: APN proporcionado por la operadora, debe enviarse con comillas dobles
* \<PDP\_addr>: Dirección física, en los protocolos tipo IP permite definir una IP estática, si se omite entonces se solicitará una dirección de manera dinámica. Debe enviarse con comillas dobles

**AT+QICSGP=\<context\_id>,\<context\_type>,"\<APN\_str>","\<user\_name>","\<user\_pass>",\<auth\_type>**

* \<context\_id>: ID del contexto PDP a configurar, en este manual se utiliza el valor 1
* \<context\_type>: Tipo de IP en formato numérico.
  * 1: IPv4
  * 2: IPv6
  * 3: Permite utilizar IPv6 y para compatibilidad IPv4
* \<APN\_str>: APN proporcionado por la operadora, debe enviarse con comillas dobles.
* \<user\_name> y \<user\_pass>: Nombre de usuario y contraseña, debe enviarse con comillas dobles.
* \<auth\_types>: Tipo de autenticación en formato númerico
  * 0: Ninguna
  * 1: PAP
  * 2: CHAP
  * 3: PAP o CHAP

Si el comando se envió correctamente el módulo responderá con:

```
OK
```

</details>

Después active la sesión a internet en el contexto 1

```
AT+QIACT=1
```

Si la conexión se activó correctamente el módulo responderá

```
OK
```

Puede consultar la dirección IP con el comando **AT+QIACT?**:

```
AT+QIACT?
```

```
+QIACT: 1,1,1,"xxx.xxx.xxx.xxx"

OK
```

Para terminar la sesión a internet debe cerrar la sesión PDP con el comando:

```
AT+QIDEACT=1
```

## **VI. Ejemplo de uso**

### **Ping a un servidor remoto**

{% hint style="info" %}
**Nota**: Antes de seguir este ejemplo asegúrese de haber leído todos los pasos de la sección V. Modo de uso.

Para este ejemplo se utilizará la herramienta [**QCOM**](https://microside.com/?sdm_process_download=1\&download_id=19421) en la configuración **AT sobre USB**. Sin embargo, los comandos pueden enviarse desde cualquier terminal serial o incluso un microcontrolador con puerto UART.
{% endhint %}

En la terminal serial abra el puerto del **X-NODE 2G LTE GNSS (BG95-M3)** con la siguiente configuración:\
**Velocidad de comunicación**: 115,200 bps\
**Paridad**: Ninguna\
**Bits de datos**: 8\
**Bits de paro**: 1

Después presione brevemente el botón **"PK"** del **X-NODE 2G LTE GNSS (BG95-M3)** para encender el módulo, espere hasta que el nodo finalice el proceso de inicialización indicado por el mensaje:

```
APP RDY
```

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FFatg2pB1kV8mvHym44Og%2Fuser-manual-qcom-config.png?alt=media&#x26;token=8939b499-bbf1-4570-9446-02cfe5f63f5d" alt=""><figcaption></figcaption></figure>

Inicie una sesión PDP para obtener una dirección IP con el comando **AT+QIACT=1**, confirme que cuente con una dirección IP válida con el comando **AT+QIACT?**:

```
AT+QIACT=1
```

```
AT+QIACT?
```

Si el comando indica que hubo un error, deberá revisar la sección: [6. Configuración de la operadora](#id-6.-configuracion-de-la-operadora) y la sección [7. Configuración del APN](#id-7.-configuracion-del-apn), si tiene problemas revise la sección de [preguntas frecuentes](#solucion-de-problemas-y-preguntas-frecuentes).

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FuVa62Ephmz01Yy8G2QVM%2Fuser-manual-qcom-start-pdp.png?alt=media&#x26;token=626e05a1-39a5-4d59-9f85-e4e7c825cfa5" alt=""><figcaption></figcaption></figure>

Para hacer un Ping a un servidor remoto deberá utilizar el comando&#x20;

**AT+QPING=1,"\<remote\_servername>"**

por ejemplo, para hacer un Ping a Google el comando es:

```
AT+QPING=1,"www.google.com"
```

Si la comunicación es correcta el módulo responderá con los mensajes:

{% code overflow="wrap" %}

```
+QPING: 0,"<remote_serverip>",32,<time_in_ms>,255

+QPING: 0,<packets_sent>,<packets_recieved>,<packets_lost>,<min_time_ms>,<max_time_ms>,<average_time_ms>
```

{% endcode %}

* \<remote\_serverip>: IP del servidor remoto obtenida del servidor DNS.
* \<time\_in\_ms>: Tiempo de respuesta del servidor (valores menores son mejores).
* \<max\_time\_ms>, \<min\_time\_ms>, \<average\_time\_ms>: Estadísticas de tiempo de los mensajes como máximo, mínimo y promedio.
* \<packets\_sent>, \<packets\_recieved>, \<packets\_lost>: Estadísticas de cantidad de paquetes enviados, recibidos y perdidos.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F5HIz2ESuM04pPGcq4laV%2Fuser-manual-example-ping.png?alt=media&#x26;token=3d1ebb8f-f41e-48a2-82aa-5d4eb0ed2581" alt=""><figcaption></figcaption></figure>

Finalice la sesión PDP para desconectarse de internet con el comando:

```
AT+QIDEACT=1
```

### **Protocolo MQTT sobre comandos AT**

Este ejemplo asume que el usuario conoce los conceptos básicos del protocolo [MQTT](https://www.hivemq.com/mqtt/), la sesión se hará sin [SSL](https://en.wikipedia.org/wiki/Transport_Layer_Security), puede obtener más información en la nota de aplicación: [**Quectel\_BG95BG77BG600L\_Series\_MQTT\_Application\_Note\_V1.1.pdf**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/).

{% hint style="info" %}
**Nota**: Antes de seguir este ejemplo asegúrese de haber leído todos los pasos de la sección [V. Configuración](#v.-configuracion).

Para este ejemplo se utilizará la herramienta [**QCOM**](https://microside.com/?sdm_process_download=1\&download_id=19421) en la configuración **AT sobre USB**. Sin embargo, los comandos pueden enviarse desde cualquier terminal serial o incluso un microcontrolador con puerto UART.
{% endhint %}

En la terminal serial abra el puerto del **X-NODE 2G LTE GNSS (BG95-M3)** con la siguiente configuración:\
**Velocidad de comunicación**: 115,200 bps\
**Paridad**: Ninguna\
**Bits de datos**: 8\
**Bits de paro**: 1

Después presione brevemente el botón **"PK"** del **X-NODE 2G LTE GNSS (BG95-M3)** para encender el módulo, espere hasta que el nodo finalice el proceso de inicialización indicado por el mensaje:

```
APP RDY
```

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FFatg2pB1kV8mvHym44Og%2Fuser-manual-qcom-config.png?alt=media&#x26;token=8939b499-bbf1-4570-9446-02cfe5f63f5d" alt=""><figcaption></figcaption></figure>

El bróker que se usará es [Mosquitto](https://test.mosquitto.org/) en el puerto 1883, pero las instrucciones aplican para cualquier otro bróker sin **SSL**, para esta prueba solo se requiere un **X-NODE 2G LTE GNSS (BG95-M3)** y una computadora/teléfono con un cliente MQTT, en este ejemplo se utilizará el cliente para navegadores [MQTT.Cool](https://testclient-cloud.mqtt.cool/).

{% hint style="warning" %}
**¡ Advertencia !**: El bróker test.mosquitto.org es un servidor experimental para realizar pruebas, **NO** lo utilice en el despliegue de proyectos y **NUNCA** publique información confidencial en el.
{% endhint %}

En el cliente seleccionaremos el bróker **(1)**, después debe configurar el usuario y contraseña **(2)**, en el bróker de mosquitto puede dejar estos campos vacíos, pero si está utilizando otro bróker y así lo requiere puede ingresar estos datos manualmente **(3)**. Después presione el botón **Connect**.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FLPIHJLCwlu8AO2pICYF4%2Fuser-manual-example-mqtt-1.png?alt=media&#x26;token=b2c53bcd-6e98-4ffc-957c-ac0dadda269d" alt=""><figcaption></figcaption></figure>

Bróker:

```
test.mosquitto.org:1883
```

En el campo de **suscripciones** escriba el tópico con un **QoS** de nivel 0 **(1)**, esto nos permitirá tener un canal en donde **recibir** información, por ejemplo:

Tópico:

```
xide-xc08/dev-123
```

Recuerde que puede personalizar este tópico y puede suscribirse a múltiples tópicos. Después presione el botón de **Suscribir**, el tópico se agregará a su lista de suscripciones **(2)**.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F1Wxs6ColL0tqtb8NgUyw%2Fuser-manual-example-mqtt-2.png?alt=media&#x26;token=6efda9f3-06a6-4ee0-9ceb-679347683d27" alt=""><figcaption></figcaption></figure>

Deberemos hacer lo mismo en el **X-NODE 2G LTE GNSS (BG95-M3)** a través de comandos AT. El segundo comando debe enviarse uno inmediatamente después del primero, ya que el servidor puede terminar la conexión si no recibe información del cliente. El primer comando define el bróker y el puerto:

**AT+QMTOPEN=0,"\<mqtt\_broker>",\<port\_number>**

Reemplazamos los datos con la información del bróker de mosquitto:

```
AT+QMTOPEN=0,"test.mosquitto.org",1883
```

El segundo comando define la información del cliente, los parámetros \<client\_username> y \<client\_password> son opcionales dependiendo de la configuración del bróker:

**AT+QMTCONN=0,"\<client\_unique\_id>","\<client\_username>","\<client\_password>"**

Para utilizar el bróker de mosquitto personalice el \<client\_unique\_id> con un valor aleatorio por cada dispositivo que conecte al bróker, por ejemplo:

```
AT+QMTCONN=0,"xide-client-id-f497002f"
```

Después debemos suscribirnos a al mismo tópico:

**AT+QMTSUB=0,\<msg\_id>,"\<topic\_id>",\<qos\_level>**

El campo **\<msg\_id>** se utiliza cuando el nivel QoS es mayor que 0, y sirve para identificar si algunos mensajes no fueron enviados correctamente, acepta valores de 1-65535, como utilizaremos un nivel 0 este valor es irrelevante.

```
AT+QMTSUB=0,1,"xide-test/dev-123",0
```

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F5IWnxceeUVJxyxP0Pz3q%2Fuser-manual-example-mqtt-3.png?alt=media&#x26;token=cf6a5088-ac1c-4c02-899e-2a162aa858eb" alt=""><figcaption></figcaption></figure>

Ahora podemos empezar a enviar y recibir mensajes entre los dos equipos, primero enviaremos un mensaje de hola mundo desde el cliente al bróker, que lo reenviará al **X-NODE 2G LTE GNSS (BG95-M3)**, al enviar mensajes en MQTT debemos especificar el tópico, recuerda que la suscripción solo es para **recibir** información.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FMhVTofqmfoTmGINhpYZN%2Fuser-manual-example-mqtt-4.png?alt=media&#x26;token=ce92b7c7-bd16-4e3c-8b52-dfbe814922e0" alt=""><figcaption></figcaption></figure>

Para enviar información desde el **X-NODE 2G LTE GNSS (BG95-M3)** al bróker, que lo reenviará a nuestro cliente MQTT se utiliza el comando:

**AT+QMTPUB=0,\<msg\_id>,\<qos\_level>,\<server\_retain>,"\<topic\_id>",\<msg\_length>**

* **\<msg\_id>**: Identificador del mensaje, en QoS nivel 0 este valor es irrelevante.
* **\<qos\_level>**: Nivel QoS, utilizaremos el nivel 0.
* **\<server\_retain>**: Le indica al servidor si debe conservar el mensaje (1) o puede descartarlo después de entregarlo a los suscriptores activos (0), esta opción permite enviar mensajes a cliente que se encuentren desconectados una vez se conecten con el bróker. Sin embargo, dependiendo de la configuración del bróker este valor puede ser ignorado.
* **\<topic\_id>**: El tópico en donde se publicará el mensaje.
* **\<msg\_length>**: Longitud del mensaje

El parámetro **\<msg\_length>** es muy importante, una vez que se envíe el comando **AT+QMTPUB** el dispositivo responderá con el carácter "**>**", y no enviará el mensaje hasta recibir la cantidad de caracteres especificado por este parámetro. Por ejemplo, el mensaje **"Hello World from XC08!"** tiene una longitud de 22 caracteres por lo que este es el valor que debemos enviar:

```
AT+QMTPUB=0,0,0,0,"xide-test/dev-123",22
```

```
Hello World from XC08!
```

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2Fsgt46FDn30cIW8P2MtYJ%2Fuser-manual-example-mqtt-5.png?alt=media&#x26;token=cda4157a-5448-4022-976b-36f5350b3326" alt=""><figcaption></figcaption></figure>

### **Protocolo MQTT con TinyGSM en Arduino Framework**

Para poder compilar el ejemplo deberá descargar e instalar la librería de [TinyGSM](https://github.com/vshymanskyy/TinyGSM) y [PubSubClient](https://github.com/knolleary/pubsubclient), en PlatformIO puede instalarlas agregando la siguiente línea a su archivo platformio.ini:

```ini
lib_deps =
    https://github.com/vshymanskyy/TinyGSM.git
    https://github.com/knolleary/pubsubclient.git
```

En ArduinoIDE puede instalarlas desde el **Administrador de librerías**.

{% hint style="info" %}
Código de ejemplo para el [**XC01 - R5**](https://docs.microside.com/plataforma-xide-iot/x-nodes/xc01-controlador-wifi-and-bluetooth/r5/x-node-xc01-esp32-s3-controlador-wifi-and-bluetooth), revisa el manual para utilizar nuestro [XC01 - R5 en **Arduino IDE/PlatformIO**](https://docs.microside.com/plataforma-xide-iot/xc01-controlador-wifi-and-bluetooth/r5/x-node-xc01-esp32-s3-controlador-wifi-and-bluetooth#configuracion-para-platformio-en-vs-code)

Coloque los interruptores del **X-NODE 2G LTE GNSS (BG95-M3)** en la posición [AT sobre mikroBUS™](#id-4.-seleccion-del-puerto-de-comunicacion), apile el nodo sobre el **XC01 - R5** para utilizar este ejemplo.

**Nota**: Este ejemplo requiere un plan activo de datos. Puede utilizar la herramienta [MQTT.Cool](https://testclient-cloud.mqtt.cool/) para conectarse al bróker y validar el funcionamiento de la conexión. Revise la sección [Protocolo MQTT sobre comandos AT](#protocolo-mqtt-sobre-comandos-at) donde se detalla cómo utilizar esta herramienta.
{% endhint %}

{% code lineNumbers="true" expandable="true" %}

```cpp
// Este ejemplo utiliza TinyGSM y el XC08 para
// conectarse a un bróker MQTT, esta operación
// requiere un plan activo de datos
#define TINY_GSM_MODEM_BG95

#include <Arduino.h>
#include <TinyGsmClient.h>

// ********** CONFIGURACION DE COMUNICACIONES SERIALES ********
#define SerialMonitor Serial
#define SerialModem Serial2
#define TINY_GSM_DEBUG SerialMonitor

// ************ CONFIGURACION DE PINOUT MIKROBUS ***************
#define MIKROBUS_AN 4
#define MIKROBUS_RST 15
#define MIKROBUS_CS 6
#define MIKROBUS_SCK 8
#define MIKROBUS_MISO 18
#define MIKROBUS_MOSI 17
#define MIKROBUS_PWM 5
#define MIKROBUS_INT 7
#define MIKROBUS_RX 9
#define MIKROBUS_TX 10
#define MIKROBUS_SCL 13
#define MIKROBUS_SDA 12

#define BOARD_LED 16

#define PIN_MODEM_PK MIKROBUS_INT

// Broker MQTT
const char* broker = "test.mosquitto.org";

// Tópico MQTT
const char* topic = "xide-xc08/dev-123";

#include <Arduino.h>
#include <TinyGsmClient.h>
#include <PubSubClient.h>

TinyGsm modem(SerialModem);
TinyGsmClient client(modem);
PubSubClient mqtt(client);

// APN, nombre y usuario de la tarjeta SIM
const char apn[]  = "";
const char user[] = "";
const char pass[] = "";

// Contador de intentos de conexión
uint32_t lastReconnectAttempt = 0;

// Función que recibe los mensajes desde el bróker MQTT
void mqttCallback(char* topic, byte* payload, unsigned int len) {
  SerialMonitor.print("Mensaje [");
  SerialMonitor.print(topic);
  SerialMonitor.print("]: ");
  SerialMonitor.write(payload, len);
  SerialMonitor.println();
}

boolean mqttConnect() {
  SerialMonitor.print("MQTT broker: ");
  SerialMonitor.print(broker);

  // Conectar al Bróker con el id de cliente: xide-client-id-f258491f
  // recuerde personalizar este id por cada dispositivo conectado al bróker
  boolean status = mqtt.connect("xide-client-id-f258491f");

  // Si el bróker requiere autenticación, ingrese el nombre de usuario y contraseña
  // boolean status = mqtt.connect("xide-client-id-f258491f", "mqtt_user", "mqtt_pass");

  if (status == false) {
    SerialMonitor.println(" error");
    return false;
  }
  SerialMonitor.println("OK");

  // Publicar un mensaje en el tópico MQTT
  mqtt.publish(topic, "Hello World from XC08!");

  // Suscripción al tópico
  mqtt.subscribe(topic);
  return mqtt.connected();
}


void setup() {
  // Configuración de comunicaciones seriales
  SerialMonitor.begin(115200);
  SerialModem.begin(115200, SERIAL_8N1, MIKROBUS_RX, MIKROBUS_TX);

  // Inicialización de I/O
  pinMode(BOARD_LED, OUTPUT);
  digitalWrite(BOARD_LED, HIGH);
  pinMode(PIN_MODEM_PK, OUTPUT);

  // Reinicio del modem LTE por hardware
  digitalWrite(PIN_MODEM_PK, HIGH);
  delay(3000);
  digitalWrite(PIN_MODEM_PK, LOW);

  // Configuración inicial del modem LTE
  SerialMonitor.println("Iniciando modem LTE...");
  modem.restart();
  String modemInfo = modem.getModemInfo();
  SerialMonitor.print("Modem: ");
  SerialMonitor.println(modemInfo);

  SerialMonitor.print("Espera hasta conectarse a la red...");
  if (!modem.waitForNetwork()) {
    SerialMonitor.println(" error");
    delay(10000);
    return;
  }
  SerialMonitor.println(" OK");

  if (modem.isNetworkConnected()) { SerialMonitor.println("Conectado a la red"); }

  // Iniciar una sesión PDP
  SerialMonitor.println("Iniciando PDP");

  if (!modem.gprsConnect(apn, user, pass)) {
    SerialMonitor.println(" error");
    delay(10000);
    return;
  }
  SerialMonitor.println("OK");

  if (modem.isGprsConnected()) { SerialMonitor.println("Sesion PDP iniciada"); }

  // Conectar al broker en el puerto 1883
  mqtt.setServer(broker, 1883);
  mqtt.setCallback(mqttCallback);
}

void loop() {
  // Revisa que la conexión a la red funcione
  if (!modem.isNetworkConnected()) {
    SerialMonitor.println("Error de red, reconectando... ");
    if (!modem.waitForNetwork(180000L, true)) {
      SerialMonitor.println("Error");
      delay(10000);
      return;
    }

    if (modem.isNetworkConnected()) {
      SerialMonitor.println("Reconectado a la red");
    }

    // Revisa que la sesión PDP funcione
    if (!modem.isGprsConnected()) {
      SerialMonitor.println("PDP desconectado!");
      SerialMonitor.println("Iniciando PDP... ");
      if (!modem.gprsConnect(apn, user, pass)) {
        SerialMonitor.println("Error");
        delay(10000);
        return;
      }
      if (modem.isGprsConnected()) { SerialMonitor.println("Sesion PDP iniciada"); }
    }
  }

  if (!mqtt.connected()) {
    SerialMonitor.println("=== MQTT NO CONECTADO ===");
    // Intentar conectar a bróker MQTT cada 10 segundos
    uint32_t t = millis();
    if (t - lastReconnectAttempt > 10000L) {
      lastReconnectAttempt = t;
      if (mqttConnect()) { lastReconnectAttempt = 0; }
    }
    delay(100);
    return;
  }

  mqtt.loop();
}

```

{% endcode %}

### **GNSS sobre AT**

El **X-NODE 2G LTE GNSS (BG95-M3)** cuenta con solo **una antena**, lo que significa que para utilizar la funcionalidad GNSS deberá desactivar los contextos PDP activos, que puede consultar con el comando:

```
AT+QIACT?
```

```
+QIACT: <context_id>,1,1,"xxx.xxx.xxx.xxx"

OK
```

Puede cerrar los contextos PDP con el comando **AT+QIDEACT**, debe enviar este comando por cada \<context\_id> encontrado por el comando anterior:

```
AT+QIDEACT=<context_id>
```

Para activar la funcionalidad GNSS debe utilizar el comando:

```
AT+QGPS=1
```

El módulo demorará unos cuantos minutos en obtener las efemérides de los satélites y determinar la posición global, si es la primera vez que activa la funcionalidad GNSS después de encender el módulo el tiempo de obtención será más largo.

{% hint style="info" %}
**Nota**: La funcionalidad GNSS requiere de cielo abierto, el tiempo de obtención y la precisión de la misma puede verse negativamente afectada al utilizarse en interiores, en casas o edificios con muros gruesos podría no obtener una posición.
{% endhint %}

Puede obtener la posición con el comando **AT+QGPSLOC=2**, si el comando regresa un error 516, significa que aún no se obtiene la posición, deberá esperar un tiempo antes de volver a intentarlo.

```
AT+QGPSLOC=2
```

Si el módulo ya ha calculado la posición entonces responderá con un mensaje con el siguiente formato:

```
+QGPSLOC: <utc_time>,<latitude_deg>,<longitude_deg>,<horizontal_precision>,<altitude_m>,<d_position>,<course_over_ground>,<speed_kmh>,<speed_k>,<utc_date>,<no_sats>
```

* **\<utc\_time>**: Tiempo universal coordinado (UTC) en formato hhmmss.sss
* **\<latitude\_deg>**: Latitud en grados.
* **\<longitude\_deg>**: Longitud en grados.
* **\<horizontal\_precision>**: Precisión horizontal ([HDOP](https://en.wikipedia.org/wiki/Dilution_of_precision)), valores más bajos son mejores.
* **\<altitude\_m>**: Altitud de la antena con respecto al nivel del mar en metros.
* **\<d\_position>**: Tipo de posición GNSS
  * 2: Posición 2D
  * 3: Posición 3D
* **\<course\_over\_ground>**: Dirección de movimiento en grados con respecto al norte.
* **\<speed\_kmh>**: Velocidad relativa con respecto a tierra en kilómetros por hora.
* **\<speed\_k>**: Velocidad relativa con respecto a tierra en nudos.
* **\<utc\_date>**: Tiempo universal coordinado (UTC) en formato ddmmyy
* **\<no\_sats>**: Número de satélites utilizados para calcular la posición.

Por ejemplo, de la siguiente respuesta podemos obtener la información:

```
+QGPSLOC: 153010.000,19.42692,-99.16774,1.1,2240.6,3,220.16,5.154,2.782,250925,06
```

* **153010**: Hora 15:30:10 UTC que en la zona horaria de México son las 09 de la mañana con 30 minutos y 10 segundos.
* **19.42692**,**-99.16774**: [Longitud y latitud](https://maps.app.goo.gl/AEeRfWjpqN7tZTkT7).
* **1.1**: Precisión horizontal excelente.
* **2240**: Altitud de 2240 metros sobre el nivel del mar.
* **3**: La posición obtenida es tridimensional (latitud, longitud, altitud).
* **220.16**: La dirección del curso es de 220.16 grados (suroeste).
* **5.154**: Velocidad de 5.154 kilómetros por hora.
* **2.782**: Velocidad de 2.782 nudos.
* **250925**: Fecha 25 de noviembre de 2025.
* **06**: Para calcular la posición se utilizaron 6 satélites.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FKoxg1cyWaoMPmDdMYmOK%2Fuser-manual-example-gnss.png?alt=media&#x26;token=7c294a69-b556-460a-9539-3488b8c5ddf0" alt=""><figcaption></figcaption></figure>

### **GNSS con TinyGSM en Arduino Framework**

Para poder compilar el ejemplo deberá descargar e instalar la librería de [TinyGSM](https://github.com/vshymanskyy/TinyGSM), en PlatformIO puede instalarla agregando la siguiente línea a su archivo platformio.ini:

```ini
lib_deps =
    https://github.com/vshymanskyy/TinyGSM.git
```

{% hint style="info" %}
Código de ejemplo para el [**XC01 - R5**](https://docs.microside.com/plataforma-xide-iot/x-nodes/xc01-controlador-wifi-and-bluetooth/r5/x-node-xc01-esp32-s3-controlador-wifi-and-bluetooth), revisa el manual para utilizar nuestro [XC01 - R5 en **Arduino IDE/PlatformIO**](https://docs.microside.com/plataforma-xide-iot/xc01-controlador-wifi-and-bluetooth/r5/x-node-xc01-esp32-s3-controlador-wifi-and-bluetooth#configuracion-para-platformio-en-vs-code)

Coloque los interruptores del **X-NODE 2G LTE GNSS (BG95-M3)** en la posición [AT sobre mikroBUS™](#id-4.-seleccion-del-puerto-de-comunicacion), apile el nodo sobre el **XC01 - R5** para utilizar este ejemplo.

**Nota**: La funcionalidad GNSS requiere de cielo abierto, el tiempo de obtención y la precisión de la misma puede verse negativamente afectada al utilizarse en interiores, en casas o edificios con muros gruesos podría no obtener una posición.
{% endhint %}

{% code overflow="wrap" expandable="true" %}

```cpp
// Este ejemplo utiliza el GNSS para obtener posición, fecha y hora (UTC)
// Para hacer uso del GNSS la antena debe estar a cielo abierto ( en exterior )
#define TINY_GSM_MODEM_BG95

#include <Arduino.h>
#include <TinyGsmClient.h>

// ********** CONFIGURACION DE COMUNICACIONES SERIALES ********
#define SerialMonitor Serial
#define SerialModem Serial2
#define TINY_GSM_DEBUG SerialMonitor

// ************ CONFIGURACION DE PINOUT MIKROBUS ***************
#define MIKROBUS_AN 4
#define MIKROBUS_RST 15
#define MIKROBUS_CS 6
#define MIKROBUS_SCK 8
#define MIKROBUS_MISO 18
#define MIKROBUS_MOSI 17
#define MIKROBUS_PWM 5
#define MIKROBUS_INT 7
#define MIKROBUS_RX 9
#define MIKROBUS_TX 10
#define MIKROBUS_SCL 13
#define MIKROBUS_SDA 12

#define BOARD_LED 16

// Pin de encendido del XC08
#define PIN_MODEM_PK MIKROBUS_INT

// *************** CONFIGURACION OPERADORA LTE ******************
const char apn[]  = "";
const char user[] = "";
const char pass[] = "";


// ******************* VARIABLES GLOBALES ***********************
static TinyGsm modem(SerialModem);

// ********************* FUNCIONES GNSS *************************
bool getGNSS();

void setup() {

  // Configuración de comunicaciones seriales
  SerialMonitor.begin(115200);
  SerialModem.begin(115200, SERIAL_8N1, MIKROBUS_RX, MIKROBUS_TX );

  // Inicialización de I/O
  pinMode( BOARD_LED, OUTPUT );
  digitalWrite( BOARD_LED, LOW );
  pinMode( PIN_MODEM_PK, OUTPUT );
  
  // Reinicio del modem LTE por hardware
  digitalWrite( PIN_MODEM_PK, HIGH );
  delay(3000);
  digitalWrite( PIN_MODEM_PK, LOW );

  // Configuración inicial del modem LTE
  SerialMonitor.println("Iniciando modem LTE...");
  modem.restart();
  String modemInfo = modem.getModemInfo();
  SerialMonitor.print("Modem: ");
  SerialMonitor.println(modemInfo);

  // Finaliza las comunicaciones LTE e inicia
  // GNSS
  modem.gprsDisconnect();

  // Inicia la antena GNSS
  if ( !modem.enableGPS() ) {
    Serial.println( "Error al iniciar GNSS" );
    while(1){
      delay( 1000 );
    }
  }

}

void loop() {

  // Obtener posición
  updateGNSS();
  delay( 1000UL );

}

bool updateGNSS() {
  // Colocamos un tiempo de espera máximo de 30 segundos y 90 para coldboot
  static bool coldboot = true;
  const unsigned long timeout_coldboot = 90000;
  const unsigned long timeout_run = 30000;

  float latitude;
  float longitude;
  float speed;
  float alt;
  int vsat;
  int usat;
  float accuracy;
  int year;
  int month;
  int day;
  int hour;
  int minute;
  int second;

  unsigned long timer = 0;
  unsigned long timeout = 0;
  bool success = false;

  if ( coldboot ){
    Serial.println( "Iniciando GNSS desde Coldboot, coloque la antena en cielo abierto y espere al menos 1 minuto y 30 segundos" );
    timeout = timeout_coldboot;
  } else {
    Serial.println( "Iniciando GNSS desde warmboot..." );
    timeout = timeout_run;
  }

  // Comenzamos el temporizador
  timer = millis();

  // Mientras no se agote el tiempo de espera intentar obtener la posición
  while ( ( millis() - timer ) < timeout ) {

    success = modem.getGPS( &latitude, &longitude, &speed, &alt, &vsat, &usat, &accuracy,
                            &year, &month, &day, &hour, &minute, &second );

    // Si se obtiene la posición exitosamente entonces finalizar el bucle
    if ( success ) {
      break;
    }
  }

  // Retorna el resultado de la operación, si se obtuvo la posición
  // deshabilita el abanderamiento de Coldboot y muestra los datos
  if ( !success ) {
    Serial.println( "Error: Tiempo de espera agotado, reintentando..." );
    return false;
  }

  // La posición requiere mayor precisión que una variable tipo float,
  // utiliza la promoción de float a doble:
  // (double) myFloatVar // Al usar el valor en funciones
  // (double) myFloatVar + (double) myFloatVar2 // Al realizar operaciones aritméticas
  // para evitar perder precisión.
  Serial.print( "Latitud: " );
  Serial.println( (double)latitude, 5 );

  Serial.print( "Longitud: " );
  Serial.println( (double)longitude, 5 );

  Serial.print( "Velocidad ( km/h ): " );
  Serial.println( speed );

  Serial.print( "Altitud (mts): " );
  Serial.println( alt );

  Serial.print( "Satelites (en vista): " );
  Serial.println( vsat );

  Serial.print( "Satelites (utilizados): " );
  Serial.println( usat );

  Serial.print( "Precision (mts): " );
  Serial.println( accuracy );

  Serial.print( "Fecha/Hora: " );
  Serial.print( day );
  Serial.print( "/" );
  Serial.print( month );
  Serial.print( "/" );
  Serial.print( year );
  Serial.print( " " );
  Serial.print( hour );
  Serial.print( ":" );
  Serial.print( minute );
  Serial.print( ":" );
  Serial.println( second );

  // Una vez obtenida la posición el estado del GNSS cambia a warmboot
  coldboot = false;
  return true;
}

```

{% endcode %}

### **Indicador de carga de batería**

<details>

<summary>Características del indicador de batería</summary>

La siguiente tabla resume las características del indicador de carga de batería [BQ27441](https://www.ti.com/lit/gpn/bq27441-g1) de [Texas Instruments](https://www.ti.com/):

<table data-header-hidden><thead><tr><th width="231"></th><th></th></tr></thead><tbody><tr><td><strong>Baterías</strong></td><td>Li-Ion/Li-Po</td></tr><tr><td><strong>Número de celdas</strong></td><td>1</td></tr><tr><td><strong>Protocolo de comunicación</strong></td><td>I2C</td></tr><tr><td><strong>Capacidad mínima</strong></td><td>200 mAh</td></tr><tr><td><strong>Capacidad máxima</strong></td><td>8000 mAh</td></tr><tr><td><strong>Algoritmo</strong></td><td>Algoritmo <strong>Impedance Track™</strong> de <a href="https://www.ti.com/">Texas Instruments</a></td></tr><tr><td><strong>Parámetros medidos</strong></td><td>Voltaje de la batería en mV, Estado de carga (SoC) en %, Capacidad nominal en mAh, Capacidad de carga completa en mAh, Estado de salud (SoH) en %, Corriente promedio en mA, Corriente máxima en mA, Potencia promedio en mW</td></tr></tbody></table>

</details>

{% hint style="info" %}
**Nota**: Revise la página del fabricante en la sección de [**Documentación técnica**](https://www.ti.com/product/es-mx/BQ27441-G1#tech-docs) para obtener más información
{% endhint %}

### Ciclo de aprendizaje de la batería

Para obtener los mejores resultados el usuario deberá modificar 4 parámetros para emparejar estos valores con los de la batería: **Capacidad Nominal** (**Design Capacity**), **Energía Nominal (Design Energy**), **Voltaje de finalización (Terminate Voltage**) y **Tasa de disminución** (**Taper Rate**).

<details>

<summary>Capacidad nominal (Design Capacity)</summary>

Es el valor de capacidad de la batería indicado por el fabricante en mAh. Definir este valor permite al gauge tener una referencia de las especificaciones de la batería, incluso si los valores reales varían entre diferentes celdas.

</details>

<details>

<summary>Energía Nominal (Design Energy)</summary>

Es el valor de energía nominal de la batería, este valor se obtiene multiplicando la capacidad nominal (en mAh) por el voltaje nominal (en V) de la batería indicado por el fabricante, en las baterías Li-Ion/Li-Po este valor siempre es 3.7. Por ejemplo, para una batería de 2000 mAh el valor es:

$$DE = DC \* DV = 2000 mAh \* 3.7V = 7400 mWh$$

</details>

<details>

<summary>Voltaje de finalización (Terminate Voltage)</summary>

Valor de operación mínimo del sistema, al alcanzar este valor el indicador de batería reportará un estado de carga de 0%, si el usuario desea tener energía de reserva el usuario puede editar el valor de **Capacidad de reserva(Reserve Capacity)**, en donde el sistema reportará 0% incluso antes de alcanzar el **voltaje de finalización**.

</details>

<details>

<summary>Tasa de disminución (Taper Rate)</summary>

Valor que representa el umbral de corriente en donde se considera a la batería totalmente cargada ( 35 mA ), se obtiene como la tasa de la capacidad de la batería sobre el producto de 0.1-hr por 35mA. Por ejemplo, para una batería de 2000 mAh el valor de taper current es:

$$TC = DC / (0.1-hr \* 35mA) = 2000 mAh / 3.5 mAh = 571$$

</details>

Estos valores se deben configurar cada vez que desconecte y vuelva a conectar una batería, hacerlo mejorará la precisión del indicador en los primeros ciclos, sin embargo, si no está seguro de cómo inicializar/administrar estos valores puede solo inicializar la **Capacidad nominal (Nominal Capacity)**, mientras la batería se mantenga conectada el dispositivo se encargará de ajustar los parámetros con el tiempo hasta obtener valores precisos, esto se conoce como ciclo de aprendizaje.

### Ejemplo Indicador de carga con Arduino Framework

Para poder compilar el ejemplo deberá descargar e instalar la librería de [SparkFun\_BQ27441\_Arduino\_Library](https://github.com/sparkfun/SparkFun_BQ27441_Arduino_Library/tree/v1.1.0), deberá colocar los jumpers del módulo en la configuración [**Pruebas de escritorio**](#id-2.-seleccion-del-voltaje-de-alimentacion) o [**5VDC + Batería Li-Po/Li-Ion**](#id-2.-seleccion-del-voltaje-de-alimentacion), si no lo ha hecho, [<mark style="color:red;">**lea cuidadosamente la sección 2. Selección del voltaje de alimentación**</mark>](#id-2.-seleccion-del-voltaje-de-alimentacion):

{% hint style="info" %}
Código de ejemplo para el [**XC01 - R5**](https://docs.microside.com/plataforma-xide-iot/x-nodes/xc01-controlador-wifi-and-bluetooth/r5/x-node-xc01-esp32-s3-controlador-wifi-and-bluetooth), revisa el manual para utilizar nuestro [XC01 - R5 en **Arduino IDE/PlatformIO**](https://docs.microside.com/plataforma-xide-iot/xc01-controlador-wifi-and-bluetooth/r5/x-node-xc01-esp32-s3-controlador-wifi-and-bluetooth#configuracion-para-platformio-en-vs-code)
{% endhint %}

{% code overflow="wrap" expandable="true" %}

```cpp
// Este ejemplo permite controlar la intensidad del
// LED RGB del X-NODE utilizando el potenciómetro.

#include <Arduino.h>
#include <Wire.h>
#include <SparkFunBQ27441.h>

// Capacidad Nominal de la batería en mAh
const unsigned int BATTERY_CAPACITY = 2000; // mAh

void setupBQ27441( void )
{
   // Usa la función lipo.begin() para inicializar la comunicación con
   // el indicador de batería
   if ( !lipo.begin() ) // begin() true si la comunicación funciona
   {
      // Si la comunicación falla revisar la posición de los jumpers soldables:
      // VCC, 3V3mB y EN. Revise la sección "2. Selección del voltaje de alimentación"
      // del manual para obtener más información

      Serial.println( "Error: No hay respuesta del BQ27441." );
      Serial.println( "  Revise la posición de los jumpers. VCC, 3V3mB y EN" );
      while ( 1 )
         ;
   }
   Serial.println( "Conectado al BQ27441!" );

   // Utilice la función lipo.setCapacity(BATTERY_CAPACITY) para
   // configurar la capacidad nominal de la batería
   lipo.setCapacity( BATTERY_CAPACITY );
}

void printBatteryStats()
{
   // Leer el estado del indicador de la batería BQ27441-G1A
   unsigned int soc = lipo.soc();                     // Leer Estado de carga SoC (%)
   unsigned int volts = lipo.voltage();               // Leer Voltaje actual de la batería (mV)
   int current = lipo.current( AVG );                 // Leer Corriente promedio (mA)
   unsigned int fullCapacity = lipo.capacity( FULL ); // Leer Capacidad total (mAh)
   unsigned int capacity = lipo.capacity( REMAIN );   // Leer Capacidad restante (mAh)
   int power = lipo.power();                          // Leer Potencia promedio (mW)
   int health = lipo.soh();                           // Leer Estado de salud SoH (%)

   // Now print out those values:
   String toPrint = String( soc ) + "% | ";
   toPrint += String( volts ) + " mV | ";
   toPrint += String( current ) + " mA | ";
   toPrint += String( capacity ) + " / ";
   toPrint += String( fullCapacity ) + " mAh | ";
   toPrint += String( power ) + " mW | ";
   toPrint += String( health ) + "%";

   Serial.println( toPrint );
}

void setup()
{
   Serial.begin( 115200 );
   Wire.setPins( 12, 13 );

   setupBQ27441();
}

void loop()
{
   printBatteryStats();
   delay( 1000 );
}
```

{% endcode %}

## **VII. Solución de problemas y preguntas frecuentes**

<details>

<summary>¿Por qué usar una resistencia para elegir el tipo de antena?</summary>

Los interruptores suelen causar pérdidas en el desempeño de señales RF, incluso los diseñados específicamente para este propósito. Una resistencia de 0 ohm suele tener menor pérdida por lo que es un método muy utilizado para seleccionar diferentes configuraciones de antenas.

</details>

<details>

<summary>El dispositivo está conectado a la computadora por cable USB, pero no aparece el puerto serial</summary>

Verifique que el cable USB admite transmisión de datos, intente con un cable diferente. Si no lo ha hecho, instale los drivers de [Silicon Labs de acuerdo a nuestro manual](https://docs.microside.com/ambientes-de-programacion-ides/platformio-ide-visual-studio-code#instalar-driver-usb-silicon-labs). Asegúrese que la interfaz de comunicación seleccionada sea **AT sobre USB**. Si está intentando utilizar el modo **modem sobre USB** puede que requiera instalar drivers adicionales, consulte la página del [fabricante](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/).

</details>

<details>

<summary>No puedo abrir el puerto serial del dispositivo en la computadora, indica que está ocupado</summary>

Solo un programa puede utilizar un puerto de comunicación serial a la vez, asegúrese que la interfaz de comunicación seleccionada sea **AT sobre USB**, cierre todos los programas y vuelva a intentarlo, si la falla persiste reinicie su computadora e inicie sesión con una cuenta con privilegios de administrador. Si está intentando utilizar el modo **modem sobre USB** puede que requiera instalar drivers adicionales, consulte la página del [fabricante](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/)

</details>

<details>

<summary>El dispositivo no puede conectarse a una operadora, error: x</summary>

Los errores más comunes al intentar conectarse a una red son:

* +CME ERROR: 30
  * No network service: la operadora ha denegado el acceso a la red, puede deberse a que la SIM no cuenta con una membresía activa, consulte con su proveedor para obtener más información.
* +CME ERROR: 31
  * Network timeout: existe un problema con la operadora, puede deberse a una falla en la infraestructura de la operadora. Intente con otra operadora.
* +CME ERROR: 32
  * Network not allowed - emergency calls only: la operadora ha permitido el acceso a servicios de emergencia, pero no el acceso a la red. Puede deberse a que la SIM no cuenta con una membresía activa o la operadora está experimentado fallas en la infraestructura. Consulte con su proveedor para obtener más información.

Para obtener información respecto al resto de códigos de error consulte la nota de aplicación: [**Quectel\_BG95BG77BG600L\_Series\_AT\_Commands\_Manual**](https://www.quectel.com/product/lpwa-bg95-cat-m1-cat-nb2-egprs-series/) sección 23.5. Summary of CME ERROR Codes.

</details>

<details>

<summary>Mi dispositivo no se conecta a internet</summary>

Para poder utilizar las comunicaciones LTE es necesario contar con un plan de datos vigente con una operadora con servicio LTE Cat-M1, NBIoT o 2G (EDGE, EGRPS) y con cobertura en la región, deberá corroborar esta información con su provedor de servicios.

El **X-NODE 2G LTE GNSS (BG95-M3)** integra una **eSIM precargada con un plan de datos**, [puede consultar con nuestro equipo de soporte la vigencia del plan de datos y la cobertura de nuestros servicios](https://www.microside.com/contacto). Si utilizó el comando para cambiar la tarjeta SIM deberá configurar una operadora y un APN. También considere que solo puede usar una antena a la vez (GNSS o LTE), desactive la antena GNSS o reinicie el módulo e intente otra vez.

</details>

<details>

<summary>El comando AT+QMTOPEN muestra el error X</summary>

La lista de errores y sus posibles soluciones son las siguientes:

* **-1**: El dispositivo no está conectado a una operadora, siga los pasos en la sección 6. Configuración de la operadora, revise la cobertura en la zona y consulte con su proveedor de la tarjeta SIM si cuenta con un paquete activo o si hay fallas de conexión a internet en la zona, intente con otra tarjeta SIM.
* **1**: Los parámetros son incorrectos, verifique que el nombre del bróker sea correcto y se encuentre entre comillas dobles (") y no las comillas dobles izquierdas/derechas ( " / " ), revise que el puerto sea correcto y si utiliza o no SSL.
* **2**: El cliente MQTT está ocupado, consulte los clientes conectados con el comando **AT+QMTOPEN?**

```
AT+QMTOPEN?
```

Si ya está conectado a otro bróker deberá utilizar un cliente diferente o cerrar la conexión con el comando **AT+QMTCLOSE=\<mqqt\_client\_id>**, por ejemplo para el cliente MQTT con ID 0 el comando es:

```
AT+QMTCLOSE=0
```

* **3**: Fallo al iniciar el contexto PDP, siga los pasos en la sección 7. Configuración del APN, asegúrese de obtener una dirección IP, consulte con su proveedor de servicios si hay fallas de conexión a internet en la zona, intente con otra operadora/tarjeta SIM.
* **4**: Fallo al obtener el nombre de dominio, el nombre del bróker no se escribió correctamente o hay fallas en el servidor DNS, intente realizar un **PING** al servidor MQTT, si falla y el nombre del servidor es correcto entonces consulte con su proveedor de servicios si hay fallas de conexión a internet en la zona, intente con otra operadora/tarjeta SIM.
* **5**: Error de conexión con la red, puede deberse a un problema con el servidor o a una mala cobertura de la red en la zona, intente conectarse a otro servidor MQTT para descartar problemas en la red, si la falla continua consulte con su proveedor de servicios si hay fallas de conexión a internet en la zona, intente con otra operadora/tarjeta SIM.

</details>

<details>

<summary>El comando AT+QMTCONN muestra el error X</summary>

La lista de errores y sus posibles soluciones son las siguientes:

* **1**: Versión de protocolo errónea, el bróker utiliza una versión de protocolo MQTT diferente a la configurada en el **X-NODE 2G LTE GNSS (BG95-M3)** o éste no soporta la versión MQTT del bróker. Consulte con el equipo de soporte del bróker para conocer la versión requerida, puede que el **X-NODE 2G LTE GNSS (BG95-M3)** no sea compatible con está versión o requiera una actualización de firmware, puede obtener más información contactando a nuestro [equipo de soporte](https://www.microside.com/contacto).
* **2**: Identificador rechazado, el identificador ya se encuentra con una sesión activa en el bróker, personalice el campo \<client\_unique\_id>, si la falla persiste consulte con el equipo de soporte del bróker si el identificador de cliente debe seguir alguna nomenclatura especifica.
* **3**: Servidor no disponible, el bróker se encuentra ocupado, fuera de línea o hubo algún problema con la red.
* **4**: Nombre de usuario y/o contraseña incorrecta, revise los campos \<client\_username> y \<client\_password>, consulte con el equipo de soporte del bróker para garantizar que la información es correcta.
* **5**: No autorizado, el nombre de usuario y contraseña existen, pero el bróker ha bloqueado la conexión, consulte con el equipo de soporte del bróker para obtener más información.

</details>

<details>

<summary>El comando AT+QGPSLOC=2 no muestra la posición</summary>

La funcionalidad GNSS en el **X-NODE 2G LTE GNSS (BG95-M3)** requiere desactivar los contextos PDP y la antena debe encontrarse en cielo abierto.

Asegúrese de desactivar todos los contextos PDP con el comando **AT+DEACT=\<context\_id>**, también puede forzar el cierre de todos los contextos PDP con el comando:

```
AT+CFUN=1,1
```

Ubique la antena con vista a cielo abierto, edificios cercanos también pueden afectar el tiempo de obtención de posición, este proceso puede llegar a demorar hasta 10 minutos.

</details>

## VIII. Descargas

<table data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><mark style="color:green;"><strong>Software QCOM_v1.6</strong></mark></td><td><a href="https://www.quectel.com/download/qcom_v1-8_en/">https://www.quectel.com/download/qcom_v1-8_en/</a></td></tr><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%2FNwfqiWCrn3x28Ir4TLzV%2Fxc08-r2-schematic.pdf?alt=media&#x26;token=f6f17b00-b2ba-4573-8229-75452feac9b6">https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FNwfqiWCrn3x28Ir4TLzV%2Fxc08-r2-schematic.pdf?alt=media&#x26;token=f6f17b00-b2ba-4573-8229-75452feac9b6</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%2FQzuHmnHsJcnfGMRbNHBb%2Fxc08-r2-dimensions.pdf?alt=media&#x26;token=cb1ffdd7-c30b-4341-a208-a77d8ed6fe86">https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FQzuHmnHsJcnfGMRbNHBb%2Fxc08-r2-dimensions.pdf?alt=media&#x26;token=cb1ffdd7-c30b-4341-a208-a77d8ed6fe86</a></td></tr></tbody></table>
