Ospitare un server MQTT su Raspberry Pi

MQTT (trasporto di telemetria in coda dei messaggi) è un protocollo di messaggistica leggero comunemente utilizzato nelle applicazioni IoT (Internet of Things) per una comunicazione affidabile ed efficiente tra i dispositivi. L'hosting di un server MQTT su un Raspberry Pi consente di creare un hub di messaggistica locale per i tuoi progetti IoT. Questa guida ti guida per l'impostazione e l'esecuzione di un server MQTT su un Raspberry Pi.


Cosa avrai bisogno

  1. Raspberry Pi (Qualsiasi modello con supporto GPIO, ad esempio PI 3, PI 4)
  2. Scheda microSD (almeno 8 GB, classe 10 o migliore)
  3. Alimentazione elettrica (5V, 2,5a minimo per PI 3; 5V, 3A per PI 4)
  4. Raspberry Pi OS (Versione lite o desktop)
  5. Connessione Internet
  6. Clienti MQTT (ad esempio, ESP8266, ESP32 o Strumenti software MQTT)

Passaggio 1: aggiorna il Raspberry Pi

  1. Assicurati che il tuo Raspberry Pi sia aggiornato:
    sudo apt update && sudo apt upgrade -y
    

Passaggio 2: installa broker Mosquitto MQTT

Mosquitto è un broker MQTT leggero e ampiamente usato.

  1. Installa Mosquitto e i suoi strumenti client:

    sudo apt install -y mosquitto mosquitto-clients
    
  2. Abilita Mosquitto di iniziare allo stivale:

    sudo systemctl enable mosquitto
    
  3. Inizia il servizio Mosquitto:

    sudo systemctl start mosquitto
    

Passaggio 3: testare il broker MQTT

  1. Apri due sessioni di finestre o SSH al tuo Raspberry Pi.

  2. Nel primo terminale, iscriviti a un argomento di prova:

    mosquitto_sub -h localhost -t test/topic
    
  3. Nel secondo terminale, pubblica un messaggio di test:

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. Dovresti vedere il messaggio "Ciao, mqtt!" Nel primo terminale.


Passaggio 4: configurare Mosquitto per connessioni esterne

  1. Apri il file di configurazione Mosquitto:

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. Aggiungi le seguenti righe per consentire connessioni esterne:

    listener 1883
    allow_anonymous true
    

    Nota: Per gli ambienti di produzione, impostare l'autenticazione dell'utente invece di consentire l'accesso anonimo.

  3. Riavvia il servizio Mosquitto per applicare le modifiche:

    sudo systemctl restart mosquitto
    
  4. Testare la connessione da un altro dispositivo sulla stessa rete utilizzando uno strumento client MQTT (ad es. MQTT.FX o MQTT Explorer).


Passaggio 5: proteggere il broker MQTT (opzionale)

  1. Abilita autenticazione della password:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • Immettere e confermare una password per l'utente.
  2. Aggiorna il file di configurazione Mosquitto per utilizzare il file della password:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. Riavvia il servizio Mosquitto:

    sudo systemctl restart mosquitto
    
  4. Testare la connessione utilizzando il nome utente e la password.


Passaggio 6: collegare i dispositivi IoT al broker MQTT

  1. Per ESP8266/ESP32: Usa l'IDE Arduino per programmare i tuoi dispositivi IoT per pubblicare/iscriverti agli argomenti sul tuo broker 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. Per i clienti del software: Usa mqtt.fx, mqtt explorer o python con il 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()
    

Risoluzione dei problemi

  1. Impossibile connettersi al broker MQTT:

    • Assicurati che Mosquitto stia correndo: sudo systemctl status mosquitto
    • Controlla le impostazioni del firewall sul tuo Raspberry Pi.
  2. Errori di autenticazione:

    • Verificare il nome utente e la password nella configurazione Mosquitto e nella configurazione del client.
  3. Connessione rifiutata:

    • Assicurarsi che il dispositivo sia sulla stessa rete del Raspberry Pi.
    • Controlla che la porta 1883 sia aperta.

Applicazioni di MQTT

  1. Comunicazione del dispositivo IoT
  2. Sistemi di automazione domestica
  3. Streaming dei dati in tempo reale
  4. Monitoraggio e controllo remoti

Conclusione

Ospitare un server MQTT su un Raspberry Pi è un modo eccellente per consentire una comunicazione leggera e affidabile per i tuoi progetti IoT. Seguendo questa guida, è possibile impostare e proteggere un broker MQTT Mosquitto, collegare i dispositivi IoT e iniziare a costruire potenti applicazioni. Sperimenta diverse configurazioni per esplorare il pieno potenziale di MQTT!

Lascia un commento

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.