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

El X-NODE 2G LTE GNSS (BG95-M3) integra un módulo de conectividad celular BG95-M3 de Quectel®, 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

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 de Quectel® 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™ de Mikroe® 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.

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 de Microchip Technology® entrega una corriente de carga de hasta 500mA. El indicador de carga de batería I2C BQ27441 de Texas Instruments 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.

II. Descripción del hardware

  1. Conectores SMA hembra y U.FL macho para antenas LTE y GNSS

  2. Módulo SoC BG95-M3

  3. Indicador del estado de carga de batería (CHG)

  4. Selector de entrada para comandos AT, mB (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 de Texas Instruments

  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 desde el conector mikroBUS™ (3.3VmB) o desde el regulador de la tarjeta (VCC).

  1. Conectores estándar mikroBUS™

  2. Versión de hardware: R2

  3. Número de parte del componente principal en el X-NODE

III. Especificaciones

Tipo

Comunicación GPS / GLONASS / EGPRS / LTE CAT-M1 / NB2-IoT

Aplicaciones

Integración en proyectos para IoT y aplicaciones M2M de bajo consumo, como medición inteligente, seguimiento de activos, monitoreo remoto, puntos de venta inalámbricos, etc.

Módulo

Fabricante

Características

EDGE: * Enlace de subida de hasta 236.8 kbps * Enlace de bajada de hasta 296 kbps GPRS: * Enlace de subida de hasta 85.5 kbps * Enlace de bajada de hasta 107 kbps LTE CAT-M1: * Enlace de subida de hasta 1119 kbps * Enlace de bajada de hasta 588 kbps NB1-IoT: * Enlace de subida de hasta 70 kbps * Enlace de bajada de hasta 32 kbps NB2-IoT: * Enlace de subida de hasta 158 kbps * Enlace de bajada de hasta 127 kbps

Bandas compatibles

EGPRS: GSM 850 / EGSM 900 / DCS 1800 / PCS 1900 Banda global LTE CAT-M1: B1 / B2 / B3 / B4 / B5 / B8 / B12 / B13 / B18 / B19 / B20 / B25 / B26 / B27 / B28 / B66 / B85; Banda global LTE NB-IoT: B1 / B2 / B3 / B4 / B5 / B8 / B12 / B13 / B18 / B19 / B20 / B25 / B28 / B66 / B71 / B85;

Administrador de carga

Características

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.

Indicador de carga de batería

Características

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

Interfaz

UART, USB, I2C

Compatibilidad

Estándar mikroBUS™

Tamaño

86.55 x 26.92 x 20.5 mm

Voltaje

3.3 VDC

Características de conectores SMA y U.FL

Conector SMA:
Conector IPEx UFL:

Frecuencia máxima: 18 GHz Impedancia: 50 Ohms Polaridad: Standard Género: Hembra

Serie RF: RP-UMCC Frecuencia máxima: 6 GHz Impedancia: 50 Ohms Polaridad: Reverse

IV. Pinout

La siguiente tabla muestra el pinout del X-NODE 2G LTE GNSS (BG95-M3) con respecto al estándar 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

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.

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™

  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™

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

Pruebas de escritorio

Esta es la configuración por defecto y le permite probar todas las funcionalidades del dispositivo de manera segura. Configure los jumpers VCC y EN, desuelde el jumper 3V3mB como se muestra en la figura:

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™, pero desconectará la salida de 3.3VDC hacia el pin 3V3 del zócalo 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.

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

Configure todos los jumpers: VCC, 3V3mB y EN como se muestra en la figura:

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™ y regulará un voltaje de 3.3VDC hacia el pin 3V3 del zócalo mikroBUS™ con una salida máxima de 100mA en redes 2G y 300mA en redes LTE/NB. Bajo esta configuración deberá desactivar cualquier otro regulador de 3.3VDC en el zócalo mikroBUS™, no hacerlo puede destruir el regulador integrado. NO debe conectar motores, servomotores, relevadores o cualquier tipo de carga inductiva o cargas superiores a 100mA si utiliza 2G o 300mA 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.

Fuente externa de 5VDC

Configure únicamente el jumper VCC, desuelde los jumpers 3V3mB y EN como se muestra en la figura:

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™, pero no carga la batería. 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™, 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 resolver conflictos 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.

Fuente externa de 3.3VDC

Configure únicamente el jumper 3V3mB, desuelde los jumpers VCC y EN como se muestra en la figura:

En esta configuración el X-NODE 2G LTE GNSS (BG95-M3) se alimenta desde el pin 3V3 del zócalo 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 resolver conflictos 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.

3. Insertar la batería

Estas instrucciones solo aplican si el módulo se encuentra en la configuración Pruebas de escritorio o 5VDC + Batería Li-Po/Li-Ion, si no lo ha hecho, lea cuidadosamente el paso anterior.

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.

Inserte la batería, para cargar solo conecte el cable USB tipo C a un regulador o una computadora, el indicador CHG 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

Los comandos AT puede encontrarlos en la hoja de datos del fabricante a través del siguiente enlace: Datos Técnicos.

  • 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 Remote Network, 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.

AT sobre USB

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:

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, 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.

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.

AT sobre mikroBUS™

Esta configuración le permite hacer lo mismo que la configuración AT sobre USB a través del puerto mikroBUS™, el interruptor AT deben encontrarse en la posición mB, la posición del interruptor FW es irrelevante:

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.

Modem sobre USB

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 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:

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. Este puerto también permite realizar actualizaciones de firmware con la herramienta QFlash.

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.

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, para macOS o Linux puede usar cualquier terminal serial, incluso la terminal de ArduinoIDE.

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.

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

  • 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.

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.

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 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:

Utilizar la eSIM

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
Utilizar la nanoSIM

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

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):

+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

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 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

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

Seleccionar una operadora con el método automático

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 para obtener más información.

Seleccionar una operadora con el método manual

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 para obtener más información.

Seleccionar una operadora combinando el método manual y el automático

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

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 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 es el nombre de la 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 (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.

Usar el mecanismo de suscripción por petición (recomendado)

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
Definir el contexto PDP

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

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

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 en la configuración AT sobre USB. Sin embargo, los comandos pueden enviarse desde cualquier terminal serial o incluso un microcontrolador con puerto UART.

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

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 y la sección 7. Configuración del APN, si tiene problemas revise la sección de preguntas frecuentes.

Para hacer un Ping a un servidor remoto deberá utilizar el comando

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:

+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>
  • <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.

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, la sesión se hará sin SSL, puede obtener más información en la nota de aplicación: Quectel_BG95BG77BG600L_Series_MQTT_Application_Note_V1.1.pdf.

Nota: Antes de seguir este ejemplo asegúrese de haber leído todos los pasos de la sección V. Configuración.

Para este ejemplo se utilizará la herramienta QCOM en la configuración AT sobre USB. Sin embargo, los comandos pueden enviarse desde cualquier terminal serial o incluso un microcontrolador con puerto UART.

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

El bróker que se usará es Mosquitto 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.

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.

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

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

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.

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!

Protocolo MQTT con TinyGSM en Arduino Framework

Para poder compilar el ejemplo deberá descargar e instalar la librería de TinyGSM y PubSubClient, en PlatformIO puede instalarlas agregando la siguiente línea a su archivo platformio.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.

Código de ejemplo para el XC01 - R5, revisa el manual para utilizar nuestro XC01 - R5 en Arduino IDE/PlatformIO

Coloque los interruptores del X-NODE 2G LTE GNSS (BG95-M3) en la posición AT sobre mikroBUS™, 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 para conectarse al bróker y validar el funcionamiento de la conexión. Revise la sección Protocolo MQTT sobre comandos AT donde se detalla cómo utilizar esta herramienta.

// 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();
}

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.

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.

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

  • 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.

GNSS con TinyGSM en Arduino Framework

Para poder compilar el ejemplo deberá descargar e instalar la librería de TinyGSM, en PlatformIO puede instalarla agregando la siguiente línea a su archivo platformio.ini:

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

Código de ejemplo para el XC01 - R5, revisa el manual para utilizar nuestro XC01 - R5 en Arduino IDE/PlatformIO

Coloque los interruptores del X-NODE 2G LTE GNSS (BG95-M3) en la posición AT sobre mikroBUS™, 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.

// 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;
}

Indicador de carga de batería

Características del indicador de batería

La siguiente tabla resume las características del indicador de carga de batería BQ27441 de Texas Instruments:

Baterías

Li-Ion/Li-Po

Número de celdas

1

Protocolo de comunicación

I2C

Capacidad mínima

200 mAh

Capacidad máxima

8000 mAh

Algoritmo

Algoritmo Impedance Track™ de Texas Instruments

Parámetros medidos

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

Nota: Revise la página del fabricante en la sección de Documentación técnica para obtener más información

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

Capacidad nominal (Design Capacity)

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.

Energía Nominal (Design Energy)

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=DCDV=2000mAh3.7V=7400mWhDE = DC * DV = 2000 mAh * 3.7V = 7400 mWh

Voltaje de finalización (Terminate Voltage)

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.

Tasa de disminución (Taper Rate)

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.1hr35mA)=2000mAh/3.5mAh=571TC = DC / (0.1-hr * 35mA) = 2000 mAh / 3.5 mAh = 571

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, deberá colocar los jumpers del módulo en la configuración Pruebas de escritorio o 5VDC + Batería Li-Po/Li-Ion, si no lo ha hecho, lea cuidadosamente la sección 2. Selección del voltaje de alimentación:

Código de ejemplo para el XC01 - R5, revisa el manual para utilizar nuestro XC01 - R5 en Arduino IDE/PlatformIO

// 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 );
}

VII. Solución de problemas y preguntas frecuentes

¿Por qué usar una resistencia para elegir el tipo de antena?

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.

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

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

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

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

El dispositivo no puede conectarse a una operadora, error: x

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 sección 23.5. Summary of CME ERROR Codes.

Mi dispositivo no se conecta a internet

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

El comando AT+QMTOPEN muestra el error X

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.

El comando AT+QMTCONN muestra el error X

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.

  • 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.

El comando AT+QGPSLOC=2 no muestra la posición

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.

VIII. Descargas

Última actualización

¿Te fue útil?