Dos servidores MQTT gratuitos para tus proyectos IoT. Parte 1

A la hora de poner en marcha tus proyectos de IoT utilizando el protocolo MQTT necesitarás un broker que administre el flujo de información. Existen muchos en la red, algunos gratuitos y otros de pago. En este artículo te enseño a configurar y utilizar las dos opciones gratuitas que nos ofrece la empresa Hive MQ empleando el lenguaje Micropython.

Introducción

Hive MQ es una empresa que brinda distintos servicios de IoT, entre ellos los de Broker para el protocolo MQTT. Además de los planes pagos, ofrece dos opciones de servidores MQTT o broker sin costo que puedes utilizar para hacer pruebas y aprender el funcionamiento del protocolo y hasta poner en marcha pequeños proyectos de bajo tráfico.

La primera opción es un servidor público o abierto que se puede utilizar con una configuración mínima y permite empezar a probar el sistema en unos minutos. El otro es un servidor privado que cuenta con distintos planes de pago, pero que incluye también una opción totalmente gratuita.

Voy a dividir esta publicación en dos artículos. En el primero te voy a mostrar como utilizar el servidor público y en la segunda el privado con su plan gratuito.

Todos los programas utilizados en esta publicación han sido probados con una placa ESP32 VROOM y una Raspberry Pico W y funcionan correctamente en cualquiera de ellas sin ninguna modificación.

Servidor público

El servidor público de Hive MQ es sumamente simple de utilizar, lo cual es una gran ventaja. Puedes publicar información y suscribirte a distintos tópicos para recibirla de una manera rápida y sencilla ya que no requiere utilizar ningún tipo de nombre de usuario o contraseña. De allí la denominación de servidor público.

Sin embargo, esto tiene como contraparte que cualquiera que se conecte al servidor puede leer la información que subas o incluso publicar en tus mismos tópicos.

Por lo tanto, este servidor sirve para hacer las primeras pruebas pero de ninguna manera se lo debería utilizar en un proyecto en que necesites mantener a salvo tu información.

Se puede acceder a un dashboard en tiempo real de este servidor que muestra el tráfico que está administrando.

Fig. 1. Dashboard del servidor público

Datos de acceso

Todo lo que necesitas para conectarte al servidor público son su dirección y número de puerto:

Dirección: broker.hivemq.com

Port: 1883

Programa de ejemplo

El siguiente es un ejemplo en Micropython que envía valores de temperatura y humedad al servidor público. A los fines de enfocarnos en la comunicación con el servidor, estos valores son constantes y no provienen de un sensor real, pero el programa se puede modificar fácilmente para incluir uno.

Si tienes planeado utilizar una Raspberry Pico W, deberías instalar previamente el módulo mqtt.simple, ya que no viene incluido en su versión del firmware de Micropython. Para ello te invito a que veas las instrucciones en el Anexo

Si vas a utilizar una placa con ESP32, el firmware de Micropython ya tiene incluida la librería mqtt.simple y no necesitas realizar ninguna instalación (yo he utilizado la versión 1.19)

#Envia temperatura y humedad a Hive MQ usando MQTT
#Usa el broker publico

from umqtt.simple import MQTTClient

import network, time,gc

def conectaWifi (red, password):
      global miRed
      miRed = network.WLAN(network.STA_IF)     
      if not miRed.isconnected():              #Si no está conectado…
          miRed.active(True)                   #activa la interface
          miRed.connect(red, password)         #Intenta conectar con la red
          print('Conectando a la red', red +"…")
          timeout = time.time ()
          while not miRed.isconnected():           #Mientras no se conecte..
              if (time.ticks_diff (time.time (), timeout) > 10):
                  return False
      return True

# Parametros. Cambiar los que comienzan con "Tu_"
wifiSSID      = "Tu_red"
wifiPass      = "Tu_contraseña"
mqttServer    = b"broker.hivemq.com"
mqttPort      =  1883
mqttClientID  = b"ESP32"  
mqttUser      = b"" 
mqttPass      = b"" 
mqttTopicTemp = b"test/Temperatura"
mqttTopicHum  = b"test/Humedad" 

if conectaWifi (wifiSSID, wifiPass):

    print ("Conexión exitosa!")
    print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig())
      
   
    cliente = MQTTClient(client_id=mqttClientID, server=mqttServer, port=mqttPort, user=mqttUser, password=mqttPass,
        keepalive=7200, ssl=False)
    
    cliente.connect ()
    
        
    while (True):
        time.sleep (20)
 

        #Datos constantes de prueba
        Temperatura = 27
        Humedad     = 60
                  
      
        #Publicar los datos
        cliente.publish(topic=mqttTopicTemp, msg=str(Temperatura))
        time.sleep (2)
        cliente.publish(topic=mqttTopicHum, msg=str(Humedad))
        
        print ("Datos enviados!")
               
        gc.collect ()
 
else:
       print ("Imposible conectar")
       miRed.active (False)

Analicemos el código anterior:

En la línea 4 se importa la clase MQTTSimple desde el módulo mqtt.simple.

En la línea 6 se importan otros módulos que se usarán mas adelante.

Desde la línea 8 a la 19 está la función conectaWifi que sirve para conectar a la red wifi.

def conectaWifi (red, password):
      global miRed
      miRed = network.WLAN(network.STA_IF)     
      if not miRed.isconnected():              #Si no está conectado…
          miRed.active(True)                   #activa la interface
          miRed.connect(red, password)         #Intenta conectar con la red
          print('Conectando a la red', red +"…")
          timeout = time.time ()
          while not miRed.isconnected():           #Mientras no se conecte..
              if (time.ticks_diff (time.time (), timeout) > 10):
                  return False
      return True

Entre las líneas 22 a la 30 se definen los distintos parámetros que se necesitan para la conexión Wifi y la del broker MQTT:

wifiSSID = Nombre de la red wifi
wifiPass = Contraseña de la red wifi
mqttServer = b”broker.hivemq.com”
mqttPort = 1883
mqttClientID = b”ESP32″ (Esto lo puedes cambiar a gusto)
mqttUser = b”” (Vacío, no es necesario)
mqttPass = b”” (Vacío, no es necesario)
mqttTopicTemp = b”test/Temperatura” (Topic para publicar valores de temperatura)
mqttTopicHum = b”test/Humedad” (Topic para publicar valores de humedad)

Los textos tienen delante la letra “b” para que Micropython los trate como objetos de tipo “bytes”, en lugar de objetos de tipo cadenas de texto (strings).

La diferencia entre estos dos tipos de objetos es que los bytes son una secuencia de números enteros, mientras que las cadenas de texto (strings) son una secuencia de caracteres Unicode.

Este es un requisito del módulo mqtt.simple (y es una práctica común en la comunicación de dispositivos IoT para reducir la cantidad de datos a transmitir).

En la línea 32 la placa se conecta a la red Wifi y en la 38 se crea el objeto “Cliente” mediante un constructor que emplea los parámetros que se definieron mas arriba (línea 22).

La placa se conecta al broker en la linea 41 y en la 44 se inicia un bucle sin final.

El contenido de este bucle se repite cada 20 segundos.

En las líneas 49 y 50 se cargan con valores constantes las variables Temperatura y Humedad y a partir de la línea 54 se publican estos valores en dos tópicos, haciendo un retardo de 2 segundos entre ellos.

No es necesario crear un tópico en el servidor para publicar en él. Si no existe, se crea al realizar la primera publicación.

Luego se hace limpieza de la memoria y se cierra el bucle.

Monitoreando los datos enviados

Seguramente querrás comprobar que los datos enviados por el programa anterior lleguen correctamente al servidor.

Para ello puedes utilizar otra herramienta que pone a disposición de manera libre Hive MQ: el cliente Web (aunque puedes usar cualquier otro, como MQTT X).

Este cliente está accesible en esta dirección: http://www.hivemq.com/demos/websocket-client/

Fig. 2. Configuración del cliente web

El valor de host es el que corresponde al servidor público, broker.hivemq.com. Port debe valer 8000 porque estás accediendo al servidor a través de la Web y ClientID es un valor generado al azar que puedes cambiar si quieres e identifica a este cliente (Pero no debe coincidir con el valor que cargaste en mqttClientID en el programa en Micropython para que no se generen confusiones).

Para poder ver los valores que publica la placa debes hacer dos suscripciones, a los topic:

test/Temperatura

test/Humedad

Para el primero debes hacer click en Subscriptions, luego en Add New Topic Subscription y completar el nombre del topic:

Fig. 3. Suscripción al topic test/Temperatura

Con el mismo procedimiento debes suscribirte al topic test/Humedad.

Una vez completado el proceso, se debe ver de esta forma:

Fig. 4. Suscripciones a los dos topic

Y en la ventana Messages ya podrás ver los datos enviados desde la placa:

Fig. 5. Mensajes publicados

Desde el mismo cliente puedes publicar en estos canales (o cualquier otro)

Fig. 6. Publicando un mensaje

… y ver el resultado

Fig. 7. Mensaje publicado

Como dije al principio, cualquiera que ingrese al servidor podría leer estos tópicos o publicar en ellos, por eso el uso de este broker está limitado a pruebas de funcionamiento, ya que no brinda ningún tipo de seguridad. Si necesitas seguridad, debes emplear el servidor privado.

Conclusiones

En esta primera parte te mostré los pasos necesarios para acceder al broker público de Hive MQ con un ejemplo en Micropython. Puedes adaptar este programa según tus necesidades para practicar los fundamentos de MQTT con este broker.

Sin embargo, la posibilidad de que cualquiera acceda a los datos que son públicos limita bastante su utilidad, por lo que en la segunda entrega te explicaré como hacer lo mismo con un servidor privado.

Nos vemos en la próxima! Como siempre, cualquier duda o sugerencia, puedes dejarla mas abajo en la sección de comentarios.

Anexo: Raspberry Pico W

El firmware de Micropython para Raspberry Pico W no tiene incluido el módulo umqtt.simple, así que antes de probar el código de ejemplo deberás instalarlo en tu placa.

Para ello, conecta la placa, actualiza el firmware a la última versión de Micropython (a la fecha es la 1.19) y realiza una conexión con la red Wifi introduciendo los siguientes comandos en la consola (o REPL). En este caso yo he utilizado Thonny:

Fig. 8.

En las partes borroneadas debes introducir el nombre de tu red Wifi y su contraseña.

Con la placa conectada, hay que importar el modulo mip, un instalador que puede descargar módulos de distintas ubicaciones y copiarlos al sistema de archivos de la placa y utilizarlo para instalar umqtt.simple:

Fig. 9.

Si no hay ningún error, el módulo umqtt.simple se copia a la carpeta lib y la Pico ya está lista para correr el programa de ejemplo.

Fig. 10.
Navegación de la serieDos servidores MQTT gratuitos para tus proyectos IoT. Parte 2 >>

1 comentario en «Dos servidores MQTT gratuitos para tus proyectos IoT. Parte 1»

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias