Skip to main content

Configuración de conectividad 4G LTE para IIoT con MQTT

Introducción

El HAT 4G LTE para Raspberry Pi ofrece una conectividad celular confiable y de alta velocidad, lo que lo hace esencial para aplicaciones remotas e industriales de IoT (IIoT). Con MQTT, un protocolo de mensajería ligero, los dispositivos pueden comunicarse eficientemente a través de redes celulares, incluso en ubicaciones aisladas. Usando comandos AT para la configuración, se simplifica el proceso de conectar dispositivos IoT a la red. Esta combinación de 4G LTE y MQTT mejora la transmisión de datos en tiempo real, permitiendo soluciones IIoT escalables con capacidades de gestión remota.

Requisitos previos

Requisitos de hardware

Raspberry Pi 5Raspberry Pi 4G LTE CAT4 HAT

Requisitos de software

Controladores y herramientas de comunicación

Si no has instalado los controladores relevantes y herramientas de comunicación, por favor revisa primero la guía.

Mosquitto Explorer

Usaremos el broker Mosquitto, específicamente el broker de prueba disponible en https://test.mosquitto.org, que no requiere nombre de usuario ni contraseña. Para mayor comodidad, se recomienda instalar Mosquitto Explorer directamente en tu PC para fines de prueba.

Uso de comandos AT: Conectémonos al Broker MQTT

Paso 1: Configurar el modo de recepción

AT+QMTCFG="recv/mode",0,0,1

Paso 2: Abrir una red para el cliente MQTT

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

Paso 3: Verificar el estado de la conexión MQTT (opcional)

AT+QMTOPEN?

Paso 4: Conectar un cliente al servidor Mosquitto MQTT

AT+QMTCONN=0,"clientExample"
note

Ten en cuenta que el ID del cliente debe ser único, así que asegúrate de generar uno altamente único. El broker público de Mosquitto no requiere nombre de usuario ni contraseña para el acceso.

Paso 5: Publicar un mensaje en un tópico

AT+QMTPUBEX=0,0,0,0,"test/topic",30 

note

Cuando aparezca >, escribe el mensaje y presiona Ctrl+Z

> This is test data, hello MQTT.

Abre Mosquitto Explorer e ingresa el tópico al que publicaste. Verás las actualizaciones aparecer allí.

Paso 6: Suscribirse a un tópico

AT+QMTSUB=0,1,"test/topic",2

Abre Mosquitto Explorer e ingresa el tópico y mensaje al que quieres publicar desde el módulo 4G.

Verás que el mensaje publicado fue recibido correctamente en el módulo 4G.

Paso 7: Cancelar suscripción a un tópico

AT+QMTUNS=0,2,"test/topic"

Paso 8: Desconectar el cliente del servidor MQTT

AT+QMTDISC=0

Implementación en Python

Paso 1. Preparar el directorio y entorno virtual

  • Abre una terminal en tu Raspberry Pi.
  • Crea una nueva carpeta para el proyecto y navega dentro de ella:
mkdir mqtt_EX
cd mqtt_EX
  • Configura un entorno virtual de Python:
python3 -m venv --system-site-packages env
  • Activa el entorno virtual:
source env/bin/activate
  • Instala las librerías necesarias:
pip install pyserial 

Paso 2. Preparar el script en Python

  • Abre el IDE Thonny Python (preinstalado en Raspberry Pi).

  • Crea un archivo nuevo en Thonny y pega el código proporcionado en el editor.

  • Actualiza el parámetro usb_port para que coincida con el puerto serial de tu Raspberry Pi para el HAT 4G. Normalmente, puede ser /dev/ttyUSB2 o /dev/ttyUSB3. Ejemplo:

usb_port = "/dev/ttyUSB2"
  • Guarda el archivo como test_mqtt.py dentro de la carpeta mqtt_EX.

import serial
import time

# Serial port configuration
SERIAL_PORT = '/dev/ttyUSB2' # Adjust based on your setup
BAUD_RATE = 9600


def send_at_command(ser, command, delay=1):
"""
Sends an AT command to the Quectel module and waits for a response.
"""
ser.write((command + '\r\n').encode())
time.sleep(delay)
response = ser.read_all().decode()
print(f"Command: {command}\nResponse: {response}")
return response


def main():
# Open serial connection
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=5)
if not ser.is_open:
ser.open()

try:
# Configure MQTT receive mode
send_at_command(ser, 'AT+QMTCFG="recv/mode",0,0,1')

# Open MQTT connection
send_at_command(ser, 'AT+QMTOPEN=0,"test.mosquitto.org",1883')
send_at_command(ser, 'AT+QMTOPEN?') # Check connection status

# Connect to the MQTT broker
send_at_command(ser, 'AT+QMTCONN=0,"clientExample"')

# Subscribe to the topic
send_at_command(ser, 'AT+QMTSUB=0,1,"test/topic_subscribe",2')

print("Publishing and subscribing. Press Ctrl+C to stop.")

while True:
try:
# Publish a message
send_at_command(ser, 'AT+QMTPUBEX=0,0,0,0,"test/topic_publish",30')
send_at_command(ser, 'This is test data, hello MQTT.', delay=0.5)

# Read incoming messages
print("Checking for subscribed topic messages...")
incoming = ser.read_all().decode()
if incoming:
print(f"Received: {incoming}")

# Delay between operations
time.sleep(2)
except KeyboardInterrupt:
print("Exiting loop...")
break

# Unsubscribe from the topic
send_at_command(ser, 'AT+QMTUNS=0,2,"test/topic_subscribe"')

# Disconnect from the broker
send_at_command(ser, 'AT+QMTDISC=0')
finally:
# Close serial connection
ser.close()


if __name__ == '__main__':
main()

Paso 3. Ejecutar el script

  • Abre una terminal y asegúrate de estar en el directorio del proyecto:
cd mqtt_EX
  • Activa el entorno virtual:
source env/bin/activate
  • Ejecuta el script usando Python:
python test_mqtt.py
  • La salida será similar a la siguiente:

Recursos

Soporte Técnico y Discusión de Producto

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes formas de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para atender diferentes preferencias y necesidades.

Loading Comments...