Hosting serwer MQTT na Raspberry Pi

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ć

  1. Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
  2. Karta microSD (co najmniej 8 GB, klasa 10 lub lepsza)
  3. Zasilacz (5 V, minimum 2,5A dla PI 3; 5 V, 3A dla PI 4)
  4. Raspberry Pi OS (Wersja lite lub komputerów stacjonarnych)
  5. Połączenie internetowe
  6. Klienci MQTT (np. ESP8266, ESP32 lub narzędzia programowe MQTT)

Krok 1: Zaktualizuj Raspberry Pi

  1. 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.

  1. Zainstaluj Mosquitto i jego narzędzia klienta:

    sudo apt install -y mosquitto mosquitto-clients
    
  2. Włącz Mosquitto, aby zacząć od rozruchu:

    sudo systemctl enable mosquitto
    
  3. Rozpocznij usługę Mosquitto:

    sudo systemctl start mosquitto
    

Krok 3: Przetestuj brokera MQTT

  1. Otwórz dwa terminal Windows lub SSH Sessions na Raspberry Pi.

  2. W pierwszym terminalu zasubskrybuj temat testowy:

    mosquitto_sub -h localhost -t test/topic
    
  3. W drugim terminalu opublikuj wiadomość testową:

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. Powinieneś zobaczyć wiadomość „Witaj, MQTT!” w pierwszym terminalu.


Krok 4: Skonfiguruj Mosquitto dla połączeń zewnętrznych

  1. Otwórz plik konfiguracyjny Mosquitto:

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. 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.

  3. Uruchom ponownie usługę Mosquitto, aby zastosować zmiany:

    sudo systemctl restart mosquitto
    
  4. 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)

  1. Włącz uwierzytelnianie hasła:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • Wprowadź i potwierdź hasło dla użytkownika.
  2. Zaktualizuj plik konfiguracyjny Mosquitto, aby użyć pliku hasła:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. Uruchom ponownie usługę Mosquitto:

    sudo systemctl restart mosquitto
    
  4. Przetestuj połączenie za pomocą nazwy użytkownika i hasła.


Krok 6: Podłącz urządzenia IoT z brokerem MQTT

  1. 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);
    }
    
  2. 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

  1. 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.
  2. Błędy uwierzytelniania:

    • Sprawdź nazwę użytkownika i hasło w konfiguracji Mosquitto i konfiguracji klienta.
  3. 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

  1. Komunikacja urządzenia IoT
  2. Domowe systemy automatyzacji
  3. Streaming danych w czasie rzeczywistym
  4. 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!

Zostaw komentarz

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.