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]]'