Dieses Paket enthält Plugins für das ControlPi-System, mit denen die GPIO-Pins eines Raspberry Pi als Klienten am ControlPi-Bus angemeldet werden können, bei denen Ausgangs-Pins durch Kommandos gesetzt werden können und sowohl Ausgangs- als auch Eingangs-Pins Ereignisse senden, wenn sich ihr Zustand ändert. Desweiteren enthält es Plugins für I2C-I/O-Karten auf Basis des PCF-8574-Chips für die Klienten für alle Input- oder Output-Kanäle der Karten registriert werden können.
Eine ausführliche Dokumentation ist in der Dokumentation der ControlPi-Infrastruktur zu finden.
Der Code dieses Plugins kann mit git geclonet werden:
$ git clone git://git.graph-it.com/graphit/controlpi-pinio.git
(Falls Zugang zu diesem Server per SSH besteht und Änderungen gepusht werden sollen, sollte stattdessen die SSH-URL benutzt werden.)
Dann kann es editierbar in ein virtuelles Environment installiert werden:
(venv)$ pip install --editable <Pfad zum Code-Repository>
Auf dem Raspberry Pi (oder wenn keine Code-Änderungen gewünscht sind) kann es auch direkt, ohne einen git-Clone installiert werden:
(venv)$ pip install git+git://git.graph-it.com/graphit/controlpi-pinio.git
Für die Benutzung der GPIO-Pins des Pi selbst, gibt es die Plugins
OutputPin
, HackPin
, InputPin
und PWMPin
.
OutputPin
und HackPin
werden einfach nur mit der Angabe des Pins
(GPIO-Nummer zwischen 0 und 31) konfiguriert:
"Aktor": {
"plugin": "OutputPin",
"pin": 23
},
"Relais": {
"plugin": "HackPin",
"pin": 24
},
Diesen Plugins können dann Kommandos
{"target": "Aktor", "command": "set state", "new state": true}
bzw.
{"target": "Relais", "command": "set state", "new state": false}
gesendet
werden.
Der Unterschied zwischen OutputPin
und HackPin
ist, dass OutputPin
die Versorgungsspannung des Pi auf den Pin legt, während HackPin
den Pin
auf Masse zieht, was für das Schalten einiger Arten von Relais notwendig
ist.
Außerdem kann beiden das Kommando
{"target": "Aktor", "command": "get state"}
gesendet werden, welches den
momentanen Zustand als Nachricht auf den Bus legt.
Die Nachrichten von den Plugins haben die Form
{"sender": "Aktor", "event": "changed", "state": true}
bzw.
{"sender": "Relais", "state": false}
.
"event": "changed"
wird nur aufgenommen, wenn sich der Zustand
tatsächlich geändert hat.
Für InputPin
kann zusätzlich zur Angabe des Pins optional der
Glitch-Filter (zwischen 0 und 300 000 Mikrosekunden, Default sind 5000
Mikrosekunden) und der Pull-Up-Widerstand konfiguriert werden (Default ist
Benutzung des Pull-Down-Widerstands):
"Sensor": {
"plugin": "InputPin",
"pin": 25,
"glitch filter": 10000,
"pullup": true
},
Ein InputPin
-Plugin verarbeitet nur get state
-Kommandos.
Die Nachrichten, die das Plugin sendet, haben die gleiche Form wie bei
OutputPin
und HackPin
.
Das PWMPin
-Plugin ermöglicht es, auf den GPIO-Pins 12 und 13 bzw. 18 und
19 Pulse-Width-Modulation zu benutzen.
Hierfür kann eine Frequenz zwischen 1 MHz und 125 MHz gewählt werden (wobei
die pigpio
-Dokumentation Werte kleiner als 30 MHz empfiehlt.
Der aktive Anteil wird mit dem Parameter duty
gewählt, der zwischen 0
(aus) und 1 000 000 (durchgehend an) liegen kann:
"Dimmer": {
"plugin": "PWMPin",
"pin": 18,
"freq": 10000000,
"duty": 0
},
Die initialen Werte können durch die Kommandos
{"target": "Dimmer", "command": "set freq", "new freq": 20000000}
und
{"target": "Dimmer", "command": "set duty", "new duty": 500000}
geändert
werden.
Die Kommandos get freq
und get duty
fragen die aktuellen Werte ab.
Die Nachrichten vom Plugin haben die Form
{"sender": "Dimmer", "freq": 10000000}
bzw.
{"sender": "Dimmer", "event": "changed", "duty": 500000}
, wobei
"event": "changed"
wiederum nur enthalten ist, wenn es tatsächlich eine
Änderung gab.
Für die Benutzung der I2C-I/O-Karten, gibt es die Plugins OutputCard
und
InputCard
.
Eine OutputCard
wird konfiguriert, indem die I2C-Adresse angegeben wird
und einer Auswahl der Pins der Karte (diejenigen, die für die Anwendung
interessant sind) Namen zugewiesen werden:
"Ausgangskarte 1": {
"plugin": "OutputCard",
"address": 56,
"pins": { "Aktor 1": 0, "Aktor 2": 2, "Aktor 3": 4 }
},
Die Kommandos an und Nachrichten von "Aktor 1"
, "Aktor 2"
und
"Aktor 3"
sind dann genau die gleichen wie für OutputPin
oben.
Für eine InputCard
wird zusätzlich ein "interrupt pin"
(GPIO-Pin auf
dem Pi selbst) konfiguriert, auf dem die Karte meldet, wenn sich einer der
Karten-Pins geändert hat:
"Eingangskarte 1": {
"plugin": "InputCard",
"address": 32,
"interrupt pin": 4,
"pins": { "Sensor 1": 0, "Sensor 2": 2, "Sensor 3": 4 }
}
Kommandos und Nachrichten für "Sensor 1"
, "Sensor 2"
und "Sensor 3"
sind dann die gleichen wie für InputPin
oben.