MQTT (Message Queuing Telemetry Transport) to lekki protokół przesyłania wiadomości powszechnie używanych w aplikacjach IoT (Internet of Things) do niezawodnej i wydajnej komunikacji między urządzeniami. Hostowanie serwera MQTT na Raspberry Pi umożliwia stworzenie lokalnego centrum przesyłania wiadomości dla projektów IoT. Ten przewodnik prowadzi do konfigurowania i uruchamiania serwera MQTT na Raspberry Pi.
Czego będziesz potrzebować
- Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
- Karta microSD (co najmniej 8 GB, klasa 10 lub lepsza)
- Zasilacz (5 V, minimum 2,5A dla PI 3; 5 V, 3A dla PI 4)
- Raspberry Pi OS (Wersja lite lub komputerów stacjonarnych)
- Połączenie internetowe
- Klienci MQTT (np. ESP8266, ESP32 lub narzędzia programowe MQTT)
Krok 1: Zaktualizuj Raspberry Pi
- Upewnij się, że twoje Raspberry Pi jest aktualne:
sudo apt update && sudo apt upgrade -y
Krok 2: Zainstaluj broker Mosquitto MQTT
Mosquitto jest lekkim i szeroko stosowanym brokerem MQTT.
-
Zainstaluj Mosquitto i jego narzędzia klienta:
sudo apt install -y mosquitto mosquitto-clients
-
Włącz Mosquitto, aby zacząć od rozruchu:
sudo systemctl enable mosquitto
-
Rozpocznij usługę Mosquitto:
sudo systemctl start mosquitto
Krok 3: Przetestuj brokera MQTT
-
Otwórz dwa terminal Windows lub SSH Sessions na Raspberry Pi.
-
W pierwszym terminalu zasubskrybuj temat testowy:
mosquitto_sub -h localhost -t test/topic
-
W drugim terminalu opublikuj wiadomość testową:
mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
-
Powinieneś zobaczyć wiadomość „Witaj, MQTT!” w pierwszym terminalu.
Krok 4: Skonfiguruj Mosquitto dla połączeń zewnętrznych
-
Otwórz plik konfiguracyjny Mosquitto:
sudo nano /etc/mosquitto/mosquitto.conf
-
Dodaj następujące wiersze, aby umożliwić połączenia zewnętrzne:
listener 1883 allow_anonymous true
Notatka: W środowiskach produkcyjnych skonfiguruj uwierzytelnianie użytkownika zamiast umożliwienia anonimowego dostępu.
-
Uruchom ponownie usługę Mosquitto, aby zastosować zmiany:
sudo systemctl restart mosquitto
-
Przetestuj połączenie z innego urządzenia w tej samej sieci za pomocą narzędzia klienta MQTT (np. MQTT.FX lub MQTT Explorer).
Krok 5: Zabezpiecz broker MQTT (opcjonalnie)
-
Włącz uwierzytelnianie hasła:
sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
- Wprowadź i potwierdź hasło dla użytkownika.
-
Zaktualizuj plik konfiguracyjny Mosquitto, aby użyć pliku hasła:
allow_anonymous false password_file /etc/mosquitto/passwd
-
Uruchom ponownie usługę Mosquitto:
sudo systemctl restart mosquitto
-
Przetestuj połączenie za pomocą nazwy użytkownika i hasła.
Krok 6: Podłącz urządzenia IoT z brokerem MQTT
-
Dla ESP8266/ESP32: Użyj Arduino IDE, aby zaprogramować urządzenia IoT, aby publikować/subskrybować tematy w brokerze 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); }
-
Dla klientów oprogramowania: Użyj MQTT.FX, MQTT Explorer lub Python z
paho-mqtt
biblioteka.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()
Rozwiązywanie problemów
-
Nie można połączyć się z brokerem MQTT:
- Upewnij się, że Mosquitto działa:
sudo systemctl status mosquitto
- Sprawdź ustawienia zapory na Raspberry Pi.
- Upewnij się, że Mosquitto działa:
-
Błędy uwierzytelniania:
- Sprawdź nazwę użytkownika i hasło w konfiguracji Mosquitto i konfiguracji klienta.
-
Połączenie odmówiono:
- Upewnij się, że urządzenie znajduje się w tej samej sieci, co Raspberry Pi.
- Sprawdź, czy port 1883 jest otwarty.
Zastosowania MQTT
- Komunikacja urządzenia IoT
- Domowe systemy automatyzacji
- Streaming danych w czasie rzeczywistym
- Zdalne monitorowanie i kontrola
Wniosek
Hostowanie serwera MQTT na Raspberry Pi to doskonały sposób na umożliwienie lekkiej i niezawodnej komunikacji dla twoich projektów IoT. Postępując zgodnie z tym przewodnikiem, możesz skonfigurować i zabezpieczyć brokera Mosquitto MQTT, podłączyć urządzenia IoT i rozpocząć budowanie potężnych aplikacji. Eksperymentuj z różnymi konfiguracjami, aby zbadać pełny potencjał MQTT!