Raspberry Pi: GPIOs schalten: Unterschied zwischen den Versionen
(Ersetzung von Forum-Links mit Vorlage Link2Forum) |
(Anpassung von <source>-Tags nach <syntaxhighlight>) |
||
Zeile 4: | Zeile 4: | ||
Zum schalten der GPIOs via Bash kann folgendes Script (fhem-gpio.sh) verwendet werden: | Zum schalten der GPIOs via Bash kann folgendes Script (fhem-gpio.sh) verwendet werden: | ||
< | <syntaxhighlight lang="bash">#!/bin/bash | ||
PORT=$1; | PORT=$1; | ||
if ! [ -d /sys/class/gpio/gpio$PORT ] | if ! [ -d /sys/class/gpio/gpio$PORT ] | ||
Zeile 17: | Zeile 17: | ||
fi | fi | ||
echo "$STATE" > /sys/class/gpio/gpio$PORT/value | echo "$STATE" > /sys/class/gpio/gpio$PORT/value | ||
</ | </syntaxhighlight> | ||
Der Aufruf des Scripts erfolgt dann mit Angabe der Pinnummer sowie des Zustands des Pins, z. B.: | Der Aufruf des Scripts erfolgt dann mit Angabe der Pinnummer sowie des Zustands des Pins, z. B.: | ||
< | <syntaxhighlight lang="bash">fhem-gpio.sh 17 1 # Pin 17 in High-Zustand versetzen | ||
fhem-gpio.sh 17 0 # Pin 17 in Low-Zustand versetzen | fhem-gpio.sh 17 0 # Pin 17 in Low-Zustand versetzen | ||
</ | </syntaxhighlight> | ||
Wichtig: Das Script muss leider unter root (z.B. per sudo) aufgerufen werden. | Wichtig: Das Script muss leider unter root (z.B. per sudo) aufgerufen werden. | ||
Der Einfachheithalber kann das Script unter /usr/sbin kopiert werden. | Der Einfachheithalber kann das Script unter /usr/sbin kopiert werden. | ||
Zeile 54: | Zeile 54: | ||
<code>attr GPIO17 direction output</code> | <code>attr GPIO17 direction output</code> | ||
< | <syntaxhighlight lang="text">"set GPIO17 on" # Pin 17 in High-Zustand versetzen | ||
"set GPIO17 off" # Pin 17 in Low-Zustand versetzen | "set GPIO17 off" # Pin 17 in Low-Zustand versetzen | ||
</ | </syntaxhighlight> | ||
== Dummy-Schalter == | == Dummy-Schalter == | ||
Zeile 63: | Zeile 63: | ||
Im Fall von [[FS20 Allgemein|FS20]] sähe eine entsprechende Schalter-Definition beispielsweise so aus: | Im Fall von [[FS20 Allgemein|FS20]] sähe eine entsprechende Schalter-Definition beispielsweise so aus: | ||
< | <syntaxhighlight lang="perl">define gpio_17 FS20 [Hauscode] [Devicecode] | ||
attr gpio_17 dummy 1 | attr gpio_17 dummy 1 | ||
define act_on_gpio_17 notify gpio_17 {\ | define act_on_gpio_17 notify gpio_17 {\ | ||
Zeile 72: | Zeile 72: | ||
}\ | }\ | ||
} | } | ||
</ | </syntaxhighlight> | ||
== Externe Links == | == Externe Links == |
Version vom 26. Juli 2017, 19:01 Uhr
Mit FHEM lassen sich auch die GPIOs des Raspberry Pi steuern. Generell gibt es einige Möglichkeiten, eine entsprechende Steuerung zu verwirklichen. Als Informationsquelle empfiehlt sich hier die Low-Level Peripherals Seite des Embedded Linux Wiki
Bash Script
Zum schalten der GPIOs via Bash kann folgendes Script (fhem-gpio.sh) verwendet werden:
#!/bin/bash
PORT=$1;
if ! [ -d /sys/class/gpio/gpio$PORT ]
then
echo "$PORT" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$PORT/direction
fi
STATE=$2;
if [ $STATE -ge 1 ]
then
STATE=1
fi
echo "$STATE" > /sys/class/gpio/gpio$PORT/value
Der Aufruf des Scripts erfolgt dann mit Angabe der Pinnummer sowie des Zustands des Pins, z. B.:
fhem-gpio.sh 17 1 # Pin 17 in High-Zustand versetzen
fhem-gpio.sh 17 0 # Pin 17 in Low-Zustand versetzen
Wichtig: Das Script muss leider unter root (z.B. per sudo) aufgerufen werden. Der Einfachheithalber kann das Script unter /usr/sbin kopiert werden.
Perl-Modul
Das Modul RPI_GPIO für den Zugriff auf die GPIO Pins des Raspberry wird bereits mit FHEM mitgeliefert. Die Ansteuerung der GPIOs erfolgt über das Filesystem (sysFs). Daher werden keine weiteren Programme/Treiber benötigt.
Die WiringPi Bibliothek wird nur benötigt, wenn die internen Pullups/Pulldowns genutzt werden sollen oder dem FHEM User keine direkten Zugriffsrechte auf das GPIO Verzeichnis gegeben werden können.
Die GPIOs werden über die BCM GPIO Nummerierung angesprochen und NICHT über die WiringPi Nummerierung.
Installationsschritte sind in der Commandref zu finden. Diskussions Thread im Forum
Installation
Der Benutzer „fhem“ muss der Gruppe „gpio“ hinzugefügt werden, damit FHEM später auch Zugriff auf die GPIO Ports hat.
sudo adduser fhem gpio
WiringPi installieren: (normalerweise nicht notwendig)
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
sudo reboot
FHEM - RPI_GPIO Device erstellen
define [Name] RPI_GPIO [port]
z.B.: define GPIO17 RPI_GPIO 17
Um den Port schalten zu könenn ist es nötig den RPI_GPIO als output zu definieren.
attr GPIO17 direction output
"set GPIO17 on" # Pin 17 in High-Zustand versetzen
"set GPIO17 off" # Pin 17 in Low-Zustand versetzen
Dummy-Schalter
Über einen Dummy-Schalter kann das Bash-Script dann getriggert werden.
Im Fall von FS20 sähe eine entsprechende Schalter-Definition beispielsweise so aus:
define gpio_17 FS20 [Hauscode] [Devicecode]
attr gpio_17 dummy 1
define act_on_gpio_17 notify gpio_17 {\
if ("$EVENT" ne "off") {\
system("sudo fhem-gpio.sh 17 1 &")\
} else {\
system("sudo fhem-gpio.sh 17 0 &")\
}\
}