ArduRPC per MQTT

Mit Hilfe von ArduRPC lassen sich Befehle an einen Arduino oder kompatiblen Mikrocontroller senden. Mit Python lässt sich in wenigen Schritten ein MQTT zu ArduRPC Gateway erstellen.

Das in diesem Beitrag gezeigte Beispiel ist sehr minimalistisch gehalten und soll in erster Linie als Anregung für eigene Entwicklungen dienen. Weitere Informationen zu MQTT können den Artikeln "Mosquitto als MQTT Broker" und "MQTT mit Python nutzen entnommen werden.

Der MQTT Client wird mit Hilfe des paho-mqtt Python Modul realisiert. Zusätzlich kommt das im Rahmen des ArduRPC Projekts bereitgestellte Python Modul ArduRPC zum Einsatz. Da der Arduino über eine serielle Verbindung angesprochen werden soll, wird zusätzlich noch pySerial benötigt. Diese Pakete müssen zunächst installiert werden. Das folgende Beispiel zeigt wie dies umgesetzt werden kann.

$ pip install paho-mqtt
Collecting paho-mqtt
  Using cached paho-mqtt-1.1.tar.gz
Installing collected packages: paho-mqtt
  Running setup.py install for paho-mqtt
Successfully installed paho-mqtt-1.1
$ pip install ardurpc  
Collecting ardurpc
  Using cached ardurpc-0.3.tar.gz
Installing collected packages: ardurpc
  Running setup.py install for ardurpc
Successfully installed ardurpc-0.3
$ pip install pyserial
Collecting pyserial
  Using cached pyserial-2.7.tar.gz
Installing collected packages: pyserial
  Running setup.py install for pyserial
Successfully installed pyserial-2.7

Im folgenden Beispiel ist die eigentliche Umsetzung des MQTT Gateway zu sehen, welcher auch über gateway.py heruntergeladen werden kann.

::: {.code-include lexer="Python"} ../../file/article/2015/04/14/ardurpc-per-mqtt/gateway.py :::

In der Funktion main() werden die übergebene Kommandozeilenparameter ausgewertet, eine Verbindung zum Arduino und zum MQTT Broker aufgebaut. Die Funktion on_connect() wird direkt nach dem Verbindungsaufbau aufgerufen und teilt dem Broker mit, über welche Topics der Gateway informiert werden möchte. In der Funktion on_message() findet die Verarbeitung der Nachrichten statt. Sie nimmt die Nachrichten entgegen, wertet eventuell Parameter aus, ermittelt die für den angegeben Befehl benötigte Funktion und führt den Befehl aus. Zu beachten ist, dass die Kommunikation bei MQTT prinzipiell nur in eine Richtung stattfindet und es somit nicht möglich ist, Ergebnisse direkt zurückzusenden.

Der MQTT Gateway kann mit folgendem Befehl gestartet werden.

$ python gateway.py

Mit Hilfe der Tastenkombination Strg. + C{.interpreted-text role="kbd"} kann er wieder beendet werden.

Je nach verwendetem Arduino müssen eventuell die Angabe für den seriellen Port oder die Baudrate angepasst werden. Welche Optionen zusätzlich zur Verfügung stehen kann wie folgt in Erfahrung gebracht werden.

$ python gateway.py --help
usage: gateway.py [-h] [-b N] [-D DEVICE] [--host HOSTNAME] [--port PORT]
                  [--base-topic BASE_TOPIC]

ArduRPC MQTT Gatway

optional arguments:
  -h, --help            show this help message and exit
  -b N, --baud N        Baud
  -D DEVICE, --device DEVICE
                        Serial Device
  --host HOSTNAME       Hostname of the MQTT Broker
  --port PORT           Port of the MQTT Broker
  --base-topic BASE_TOPIC
                        Base topic (Default: arduino/ardurpc)

Anschließend kann der Arduino zum Beispiel per mosquitto_pub gesteuert werden.

Ist eine LED-Matrix angeschlossen lässt sich mit dem folgenden Befehl ein rote Linie zeichnen.

$ mosquitto_pub -t 'arduino/ardurpc/matrix/drawLine' -m '[0,0,4,4,[255, 0, 0]]'

Links

Verwandte Artikel