Hosting un servidor MQTT en Raspberry Pi

MQTT (transporte de telemetría de cola de mensajes) es un protocolo de mensajería liviano comúnmente utilizado en aplicaciones IoT (Internet de las cosas) para una comunicación confiable y eficiente entre dispositivos. Alojar un servidor MQTT en un Raspberry Pi le permite crear un centro de mensajería local para sus proyectos IoT. Esta guía lo guía a través de la configuración y la ejecución de un servidor MQTT en una Raspberry Pi.


Lo que necesitarás

  1. Frambuesa pi (Cualquier modelo con soporte de GPIO, por ejemplo, PI 3, PI 4)
  2. Tarjeta microSD (al menos 8GB, clase 10 o mejor)
  3. Fuente de alimentación (5V, 2.5A mínimo para PI 3; 5V, 3a para PI 4)
  4. Raspberry Pi OS (Versión de escritorio o lite)
  5. Conexión a Internet
  6. Clientes MQTT (por ejemplo, ESP8266, ESP32 o herramientas de software MQTT)

Paso 1: Actualice la Raspberry Pi

  1. Asegúrese de que su Raspberry PI esté actualizado:
    sudo apt update && sudo apt upgrade -y
    

Paso 2: Instale Mosquitto MQTT Broker

Mosquitto es un corredor MQTT ligero y ampliamente utilizado.

  1. Instale Mosquitto y sus herramientas del cliente:

    sudo apt install -y mosquitto mosquitto-clients
    
  2. Habilitar Mosquitto para comenzar en el arranque:

    sudo systemctl enable mosquitto
    
  3. Inicie el servicio Mosquitto:

    sudo systemctl start mosquitto
    

Paso 3: Pruebe el corredor de MQTT

  1. Abra dos ventanas de terminales o sesiones SSH a su Raspberry Pi.

  2. En el primer terminal, suscríbase a un tema de prueba:

    mosquitto_sub -h localhost -t test/topic
    
  3. En el segundo terminal, publique un mensaje de prueba:

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. Deberías ver el mensaje "¡Hola, mqtt!" en el primer terminal.


Paso 4: Configurar mosquitto para conexiones externas

  1. Abra el archivo de configuración de mosquitto:

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. Agregue las siguientes líneas para permitir conexiones externas:

    listener 1883
    allow_anonymous true
    

    Nota: Para entornos de producción, configure la autenticación del usuario en lugar de permitir el acceso anónimo.

  3. Reinicie el servicio Mosquitto para aplicar cambios:

    sudo systemctl restart mosquitto
    
  4. Pruebe la conexión desde otro dispositivo en la misma red utilizando una herramienta de cliente MQTT (por ejemplo, MQTT.FX o MQTT Explorer).


Paso 5: Asegure el corredor MQTT (opcional)

  1. Habilitar la autenticación de contraseña:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • Ingrese y confirme una contraseña para el usuario.
  2. Actualice el archivo de configuración de Mosquitto para usar el archivo de contraseña:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. Reinicie el servicio de mosquitto:

    sudo systemctl restart mosquitto
    
  4. Pruebe la conexión utilizando el nombre de usuario y la contraseña.


Paso 6: Conecte los dispositivos IoT al corredor MQTT

  1. Para ESP8266/ESP32: Use el IDE Arduino para programar sus dispositivos IoT para publicar/suscribirse a temas en su corredor Raspberry Pi MQTT.

    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
    const char* ssid = "YourSSID";
    const char* password = "YourPassword";
    const char* mqtt_server = "<raspberry-pi-ip>";
    
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    void setup() {
      WiFi.begin(ssid, password);
      client.setServer(mqtt_server, 1883);
    }
    
    void loop() {
      if (!client.connected()) {
        client.connect("ESPClient");
      }
      client.loop();
      client.publish("test/topic", "Hello from ESP8266!");
      delay(1000);
    }
    
  2. Para clientes de software: Use mqtt.fx, mqtt explorer o python con el paho-mqtt biblioteca.

    import paho.mqtt.client as mqtt
    
    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("test/topic")
    
    def on_message(client, userdata, msg):
        print(msg.topic+" "+str(msg.payload))
    
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    
    client.connect("<raspberry-pi-ip>", 1883, 60)
    
    client.loop_forever()
    

Solución de problemas

  1. No se puede conectar al corredor MQTT:

    • Asegúrese de que Mosquitto esté funcionando: sudo systemctl status mosquitto
    • Verifique la configuración del firewall en su Raspberry Pi.
  2. Errores de autenticación:

    • Verifique el nombre de usuario y la contraseña en la configuración de mosquitto y la configuración del cliente.
  3. Conexión rechazada:

    • Asegúrese de que el dispositivo esté en la misma red que la Raspberry Pi.
    • Verifique que el puerto 1883 esté abierto.

Aplicaciones de MQTT

  1. Comunicación del dispositivo IoT
  2. Sistemas de automatización del hogar
  3. Transmisión de datos en tiempo real
  4. Monitoreo y control remoto

Conclusión

Alojar un servidor MQTT en un Raspberry Pi es una excelente manera de habilitar una comunicación ligera y confiable para sus proyectos IoT. Siguiendo esta guía, puede configurar y asegurar un corredor de Mosquitto MQTT, conectar dispositivos IoT e comenzar a construir aplicaciones potentes. ¡Experimente con diferentes configuraciones para explorar todo el potencial de MQTT!

Escribir un comentario

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.