GPIO
Es ist jeweils eine Instanz des Containers zuständig für einen GPIO Pin. Der zu steuernde PIN wird über eine Umgebungsvariable in der Compose Datei konfiguriert:
version: "3.1"
services:
# GPIO 16 Buzzer
gpio_16_buzzer:
image: reg.cloud.trizwo.it/t2t/voipio-gpio:armv7-latest
depends_on:
- mqtt
environment:
- VOIPIO_GPIO_PIN=16
restart: always
privileged: true
# GPIO 19 LED
gpio_19_led:
image: reg.cloud.trizwo.it/t2t/voipio-gpio:armv7-latest
depends_on:
- mqtt
environment:
- VOIPIO_GPIO_PIN=19
restart: always
privileged: true
#12V Ports
# GPIO 4
gpio_4_12v:
image: reg.cloud.trizwo.it/t2t/voipio-gpio:armv7-latest
depends_on:
- mqtt
environment:
- VOIPIO_GPIO_PIN=4
restart: always
privileged: true
optionale Umgebungsvariablen, Standartwerte können in der Compose Datei überschrieben werden.:
ENV |
Standart |
Beschreibung |
---|---|---|
VOIPIO_GPIO_PIN |
-1 |
GPIO PIN Nummer |
VOIPIO_GPIO_MODE |
default dread aread |
_default_ gesteuert von MQTT _dread_ ließt digitale Input Werte vom PIN _aread_ gleiches mit analogen Werten |
VOIPIO_MQTT_SERVER |
mqtt |
IP oder Hostname des MQTT Broker |
VOIPIO_MQTT_PORT |
1883 |
MQTT Port |
VOIPIO_MQTT_USER |
server |
MQTT Username |
VOIPIO_MQTT_PASS |
server |
MQTT Password |
VOIPIO_MAX_RING_TIME |
60 |
Zeit in Sekunden, bevor ein eingeschalteter PIN ausgeschaltet wird. |
Wobei die PIN Nummer für VOIPIO_GPIO_PIN
wie folgend nummeriert ist:
Pin |
Container Name |
|
---|---|---|
16 |
Buzzer |
gpio_16_buzzer |
19 |
LED |
gpio_19_led |
4 |
12v |
gpio_4_12v |
17 |
12v |
gpio_17_12v |
18 |
12v |
gpio_18_12v |
27 |
12v |
gpio_27_12v |
22 |
5v |
gpio_22_5v |
23 |
5v |
gpio_23_5v |
24 |
5v |
gpio_24_5v |
25 |
5v |
gpio_25_5v |
Jeder GPIO Port registriert sich am MQTT Broker
und sendet seinen Status.
Außerdem horcht er auf bestimmte Topics:
Topic |
Beschreibung |
---|---|
voipio/gpio/<PIN>/status |
JSON Status Messages |
voipio/gpio/<PIN>/value |
current Value |
voipio/gpio/<PIN>/cmd |
Listen Topic for Input Commands |
Beispiele
Registriert sich ein GPIO Container am MQTT Broker, verschickt er eine Birthmessage mit seinem aktuellem Status:
voipio/gpio/19/status {
"pin": "19",
"piBoardRev": 2,
"value": null,
"source": "gpio_bot",
"state": "up",
"mode": "default"
}
Und abboniert das Controll Topic voipio/gpio/19/cmd
. Hier erwartet dieser GPIO Container GPIO Pin 19
Kommandos, wie Beispielweise das Einschalten des Pin:
voipio/gpio/19/cmd digital write 1
Ändert sich der Schaltzustand eines Pin, wird von GPIO Container wieder eine Status Meldung ausgeben ins MQTT:
voipio/gpio/19/value 1
bzw. als JSON
Nachricht:
voipio/gpio/19/status {"
pin": "19",
"piBoardRev": 2,
"value": 1,
"source": "gpio_bot",
"state": "up",
"mode": "default"
}
Ausschalten lässt sich der Pin dann mit dem Befehl digital write 0
:
voipio/gpio/19/cmd digital write 0
voipio/gpio/19/value 0
voipio/gpio/19/status {
"pin": "19",
"piBoardRev": 2,
"value": 0,
"source": "gpio_bot",
"state": "up",
"mode": "default"
}
Soll der Pin start einfach nur eingeschlatet zu werden einen RTTTL Ton abspielen, wird ihm über eine MQTT Meldung dieser Ton geschickt:
voipio/gpio/19/cmd playrtttl Benny Hill:d=16,o=5[....]
voipio/gpio/19/value playingBenny Hill
voipio/gpio/19/value 0
voipio/gpio/19/status {
"pin": "19",
"piBoardRev": 2,
"value": 0,
"source": "gpio_bot",
"state": "up",
"mode": "default"
}
Oder ein Morsecode zur Signalisierung eines Anrufes:
voipio/gpio/19/cmd morse Text to morse
voipio/gpio/19/value morsing SOS
voipio/gpio/19/value 0
voipio/gpio/19/status {
"pin": "19",
"piBoardRev": 2,
"value": 0,
"source": "gpio_bot",
"state": "up",
"mode": "default"
}
Bemerkt der MQTT Broker den Verlust der Verbindung zum GPIO Container, verschickt der Broker an alle Clients die das Topic des Containers abonniert haben, eine so genannte WILL Message. Diese hat der Container dem Broker beim ursprünglichem Verbindungaufbau mitgegeben und signalisiert alle Subscribern, dass der GPIO derzeit nicht verbunden ist:
voipio/gpio/19/status {
"pin": "19",
"piBoardRev": 2,
"value": null,
"source": "gpio_bot",
"state": "down",
"mode": "default"
}
In Node Red ist eine Node verfügbar, mit der diese Optionen gesteuert werden können.