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
- Raspberry Pi (Qualsiasi modello con supporto GPIO, ad esempio PI 3, PI 4)
- Scheda microSD (almeno 8 GB, classe 10 o migliore)
- Alimentazione elettrica (5V, 2,5a minimo per PI 3; 5V, 3A per PI 4)
- Raspberry Pi OS (Versione lite o desktop)
- Connessione Internet
- Clienti MQTT (ad esempio, ESP8266, ESP32 o Strumenti software MQTT)
Passaggio 1: aggiorna il Raspberry Pi
- 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.
-
Installa Mosquitto e i suoi strumenti client:
sudo apt install -y mosquitto mosquitto-clients
-
Abilita Mosquitto di iniziare allo stivale:
sudo systemctl enable mosquitto
-
Inizia il servizio Mosquitto:
sudo systemctl start mosquitto
Passaggio 3: testare il broker MQTT
-
Apri due sessioni di finestre o SSH al tuo Raspberry Pi.
-
Nel primo terminale, iscriviti a un argomento di prova:
mosquitto_sub -h localhost -t test/topic
-
Nel secondo terminale, pubblica un messaggio di test:
mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
-
Dovresti vedere il messaggio "Ciao, mqtt!" Nel primo terminale.
Passaggio 4: configurare Mosquitto per connessioni esterne
-
Apri il file di configurazione Mosquitto:
sudo nano /etc/mosquitto/mosquitto.conf
-
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.
-
Riavvia il servizio Mosquitto per applicare le modifiche:
sudo systemctl restart mosquitto
-
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)
-
Abilita autenticazione della password:
sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
- Immettere e confermare una password per l'utente.
-
Aggiorna il file di configurazione Mosquitto per utilizzare il file della password:
allow_anonymous false password_file /etc/mosquitto/passwd
-
Riavvia il servizio Mosquitto:
sudo systemctl restart mosquitto
-
Testare la connessione utilizzando il nome utente e la password.
Passaggio 6: collegare i dispositivi IoT al broker MQTT
-
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); }
-
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
-
Impossibile connettersi al broker MQTT:
- Assicurati che Mosquitto stia correndo:
sudo systemctl status mosquitto
- Controlla le impostazioni del firewall sul tuo Raspberry Pi.
- Assicurati che Mosquitto stia correndo:
-
Errori di autenticazione:
- Verificare il nome utente e la password nella configurazione Mosquitto e nella configurazione del client.
-
Connessione rifiutata:
- Assicurarsi che il dispositivo sia sulla stessa rete del Raspberry Pi.
- Controlla che la porta 1883 sia aperta.
Applicazioni di MQTT
- Comunicazione del dispositivo IoT
- Sistemi di automazione domestica
- Streaming dei dati in tempo reale
- 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!