Hospedando um servidor MQTT no Raspberry Pi

MQTT (Transporte de telemetria de fila de mensagens) é um protocolo de mensagens leves comumente usado em aplicativos IoT (Internet of Things) para uma comunicação confiável e eficiente entre os dispositivos. A hospedagem de um servidor MQTT em um Raspberry Pi permite criar um hub de mensagens local para seus projetos de IoT. Este guia orienta você a configurar e executar um servidor MQTT em um Raspberry Pi.


O que você precisará

  1. Raspberry Pi (Qualquer modelo com suporte GPIO, por exemplo, PI 3, PI 4)
  2. Cartão microSD (pelo menos 8 GB, classe 10 ou melhor)
  3. Fonte de energia (5V, 2,5A Mínimo para Pi 3; 5V, 3a para PI 4)
  4. Raspberry Pi OS (Versão Lite ou desktop)
  5. Conexão com a Internet
  6. Clientes MQTT (por exemplo, Esp8266, Esp32 ou MQTT Software Tools)

Etapa 1: Atualize o Raspberry Pi

  1. Verifique se o seu Raspberry Pi está atualizado:
    sudo apt update && sudo apt upgrade -y
    

Etapa 2: Instale o Mosquitto MQTT Broker

O Mosquitto é um corretor MQTT leve e amplamente utilizado.

  1. Instale o Mosquitto e suas ferramentas de clientes:

    sudo apt install -y mosquitto mosquitto-clients
    
  2. Ative o Mosquitto para começar na inicialização:

    sudo systemctl enable mosquitto
    
  3. Inicie o serviço Mosquitto:

    sudo systemctl start mosquitto
    

Etapa 3: teste o corretor MQTT

  1. Abra duas janelas de terminal ou sessões SSH no seu Raspberry Pi.

  2. No primeiro terminal, assine um tópico de teste:

    mosquitto_sub -h localhost -t test/topic
    
  3. No segundo terminal, publique uma mensagem de teste:

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. Você deve ver a mensagem "Olá, MQTT!" No primeiro terminal.


Etapa 4: Configurar o Mosquitto para conexões externas

  1. Abra o arquivo de configuração do Mosquitto:

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. Adicione as seguintes linhas para permitir conexões externas:

    listener 1883
    allow_anonymous true
    

    Observação: Para ambientes de produção, configure a autenticação do usuário em vez de permitir acesso anônimo.

  3. Reinicie o serviço Mosquitto para aplicar alterações:

    sudo systemctl restart mosquitto
    
  4. Teste a conexão de outro dispositivo na mesma rede usando uma ferramenta de cliente MQTT (por exemplo, MQTT.FX ou MQTT Explorer).


Etapa 5: proteja o corretor MQTT (opcional)

  1. Ativar autenticação de senha:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • Digite e confirme uma senha para o usuário.
  2. Atualize o arquivo de configuração do Mosquitto para usar o arquivo de senha:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. Reinicie o serviço Mosquitto:

    sudo systemctl restart mosquitto
    
  4. Teste a conexão usando o nome de usuário e a senha.


Etapa 6: conecte os dispositivos IoT ao corretor MQTT

  1. Para ESP8266/ESP32: Use o Arduino IDE para programar seus dispositivos IoT para publicar/assinar tópicos no seu corretor 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 ou Python com o 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()
    

Solução de problemas

  1. Não é possível conectar -se ao MQTT Broker:

    • Verifique se o Mosquitto está em execução: sudo systemctl status mosquitto
    • Verifique as configurações do firewall no seu Raspberry Pi.
  2. Erros de autenticação:

    • Verifique o nome de usuário e a senha na configuração do mosquitão e na configuração do cliente.
  3. Ligação recusada:

    • Verifique se o dispositivo está na mesma rede que o Raspberry Pi.
    • Verifique se a porta 1883 está aberta.

Aplicações do MQTT

  1. Comunicação do dispositivo IoT
  2. Sistemas de automação residencial
  3. Streaming de dados em tempo real
  4. Monitoramento e controle remotos

Conclusão

Hospedar um servidor MQTT em um Raspberry Pi é uma excelente maneira de permitir uma comunicação leve e confiável para seus projetos de IoT. Seguindo este guia, você pode configurar e proteger um corretor MQTT do Mosquitto, conectar dispositivos IoT e começar a criar aplicativos poderosos. Experimente diferentes configurações para explorar todo o potencial do MQTT!

Deixe um comentário

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.