5. Cloud-Rufsystem mit @MQTT

Das Message Queuing Telemetry Transport (MQTT) ist ein einfaches Nachrichtenprotokoll. Es ist zudem das gängigste Protokoll für das Internet der Dinge (IoT).

MQTT-Protokolle legen die Art und Weise fest, wie IoT-Geräte Daten übertragen. Sie sind ereignisgesteuert und verwenden das Pub/Sub-Modell für die Vernetzung. Sender (Publisher) und Empfänger (Subscriber) kommunizieren über Topics. Ein Gerät veröffentlicht eine Nachricht zu einem spezifischen Topic, und alle Geräte, die dieses Topic abonniert haben, erhalten die Nachricht.

In diesem Abschnitt wird ein Service-Klingelsystem mit Pico W, HiveMQ (einem kostenlosen öffentlichen MQTT-Broker-Dienst) und vier Tasten vorgestellt. Die vier Tasten stehen für vier Tische im Restaurant. Über HiveMQ können Sie sehen, an welchem Tisch Gäste Bedienung benötigen, wenn ein Kunde die Taste drückt.

1. Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten:

Ein Komplettset zu kaufen, ist definitiv praktisch. Hier ist der Link:

Bezeichnung

ELEMENTE IM SET

LINK

Kepler-Kit

450+

Kepler Kit

Die Einzelteile können auch separat über die untenstehenden Links erworben werden.

SN

KOMPONENTE

MENGE

LINK

1

Raspberry Pi Pico W

1

BUY

2

Micro-USB-Kabel

1

3

Steckbrett

1

BUY

4

Jumperkabel

Mehrere

BUY

5

Widerstand

4(10KΩ)

BUY

6

Taster

4

BUY

7

Li-Po-Lademodul

1

8

18650 Akku

1

9

Batteriehalter

1

2. Schaltkreis aufbauen

Warnung

Achten Sie darauf, dass Ihr Li-Po-Ladegerät wie im Schaltplan dargestellt angeschlossen ist. Andernfalls könnte ein Kurzschluss Ihre Batterie und den Schaltkreis beschädigen.

../_images/5.mqtt_pub.png

3. HiveMQ besuchen

HiveMQ ist eine MQTT-Broker- und Client-basierte Nachrichtenplattform, die eine schnelle, effiziente und zuverlässige Datenübertragung zu IoT-Geräten ermöglicht.

  1. Öffnen Sie HiveMQ Web Client in Ihrem Browser.

  2. Verbinden Sie den Client mit dem öffentlichen Standard-Proxy.

    ../_images/mqtt-1.png
  3. Klicken Sie auf Neues Topic-Abonnement hinzufügen.

    ../_images/mqtt-2.png
  4. Tragen Sie die Topics ein, die Sie verfolgen möchten, und klicken Sie auf Abonnieren. Wählen Sie persönliche Topics, um Nachrichten von anderen Benutzern zu vermeiden, und achten Sie auf die Groß- und Kleinschreibung.

    ../_images/mqtt-3.png

4. MQTT-Modul installieren

Bevor wir mit dem Projekt starten können, müssen wir das MQTT-Modul für Pico W installieren.

  1. Verbinden Sie sich mit dem Netzwerk, indem Sie do_connect() in der Shell ausführen, wie zuvor beschrieben.

    Bemerkung

    • Geben Sie die folgenden Befehle in die Shell ein und drücken Sie Enter, um sie auszuführen.

    • Falls Sie die Skripte do_connect.py und secrets.py noch nicht auf Ihrem Pico W haben, beziehen Sie sich bitte auf 1. Zugang zum Netzwerk, um sie zu erstellen.

    from do_connect import *
    do_connect()
    
  2. Nach einer erfolgreichen Netzwerkverbindung importieren Sie das mip-Modul in der Shell und verwenden mip zur Installation des umqtt.simple-Moduls, einem vereinfachten MQTT-Client für MicroPython.

    import mip
    mip.install('umqtt.simple')
    
  3. Nach Abschluss der Installation sehen Sie, dass das umqtt-Modul im /lib/-Pfad des Pico W installiert ist.

    ../_images/5_calling_system1.png

5. Skript ausführen

  1. Öffnen Sie die Datei 5_mqtt_publish.py im Verzeichnis kepler-kit-main/iot.

  2. Klicken Sie auf die Schaltfläche Aktuelles Skript ausführen oder drücken Sie F5, um es zu starten.

    ../_images/5_calling_system2.png
  3. Kehren Sie zu HiveMQ Web Client zurück und sobald Sie eine der Tasten auf dem Steckbrett drücken, werden Sie die Nachrichten im HiveMQ erscheinen sehen.

    ../_images/mqtt-4.png
  4. Falls Sie möchten, dass dieses Skript beim Hochfahren ausgeführt wird, speichern Sie es auf dem Raspberry Pi Pico W als main.py.

Wie funktioniert es?

Das Raspberry Pi Pico W muss mit dem Internet verbunden sein, wie in 1. Zugang zum Netzwerk beschrieben. Für dieses Projekt reicht das aus.

from do_connect import *
do_connect()

Initialisieren Sie 4 Tasten-Pins.

sensor1 = Pin(16, Pin.IN)
sensor2 = Pin(17, Pin.IN)
sensor3 = Pin(18, Pin.IN)
sensor4 = Pin(19, Pin.IN)

Erstellen Sie zwei Variablen, um die URL und die Client-ID des MQTT-Brokers zu speichern, mit dem wir uns verbinden werden. Da wir einen öffentlichen Broker verwenden, wird unsere Client-ID nicht verwendet, selbst wenn eine erforderlich ist.

mqtt_server = 'broker.hivemq.com'
client_id = 'Jimmy'

Verbinden Sie sich mit dem MQTT-Agenten und halten Sie die Verbindung für eine Stunde. Bei einem Fehlschlag wird der Pico W zurückgesetzt.

try:
    client = MQTTClient(client_id, mqtt_server, keepalive=3600)
    client.connect()
    print('Connected to %s MQTT Broker'%(mqtt_server))
except OSError as e:
    print('Failed to connect to the MQTT Broker. Reconnecting...')
    time.sleep(5)
    machine.reset()

Erstellen Sie eine Variable topic, die das Thema angibt, dem der Abonnent folgen muss. Es sollte dasselbe wie das im Schritt 4 unter 2. HiveMQ besuchen ausgefüllte Thema sein. Übrigens konvertiert b hier den String in Bytes, da MQTT ein binärbasiertes Protokoll ist, bei dem die Steuerelemente Binärbytes und keine Textstrings sind.

topic = b'SunFounder MQTT Test'

Setzen Sie Unterbrechungen für jede Taste. Wenn eine Taste gedrückt wird, wird eine Nachricht unter topic veröffentlicht.

def press1(pin):
    message = b'button 1 is pressed'
    client.publish(topic, message)
    print(message)

sensor1.irq(trigger=machine.Pin.IRQ_RISING, handler=press1)