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 trueNotatka: 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-mqttbiblioteka.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!
 
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
   
   
   
   
   
   
   
   
   
   
   
   
  