Habe das Schlüsselbrett was die Software und die Verkabelung angeht am laufen, werde es aber noch erweitern und natürlich noch in ein schönes "Schlüsselbrett" einbauen damit man es auch in der Wohnung aufhängen kann.
Habe mehrere Scripte erstellt, alle Dateien sind im Verzeichnis /home/pi auf dem Raspberry Pi abgespeichert. Da ich nur Laie bin ist es für einen Profi wahrscheinlich verwirrend aber es funktioniert. Das System läuft stabil und die CPU Auslastung schwankt zwischen 0 - 2 Prozent. Habe natürlich mein Ziel noch nicht ganz erreicht aber der Großteil ist erledigt.
Auf meinem Raspberry Pi ist Raspbian "Jessie" und WiringPi installiert.
Das erste Script lautet "Start.sh" und ist wie schon erwähnt im Verzeichnis /home/pi abgelegt. Es wird als Cronjob gestartet.
Der Befehl in crontab -e sieht wie folgt aus:
@reboot sudo bash /home/pi/Start.sh
Hiermit werden die Python- und Bash-Scripte automatisch bei jedem Neustart gestartet. Das "&" hinter den Dateiendung bewirkt dass die aufgerufenen Scripte im Hintergrund laufen.
"Start.sh"
#!/bin/bash
sudo bash /home/pi/GPIOexport.sh
sudo python /home/pi/Auto.py &
sudo python /home/pi/Haus.py &
sudo python /home/pi/Alle.py &
exit 0
Alles anzeigen
Die Bash-Datei "GPIOexport.sh" exportiert die GPIO PIN´s damit sie später durch die Scripte geschaltet werden können. Das Script sieht wie folgt aus:
"GPIOexport.sh"
#/bin/bash
# LED Rot Alle Schluessel
echo "17" > /sys/class/gpio/export
# LED Gruen Autoschluessel
echo "27" > /sys/class/gpio/export
# LED Gruen Hausschluessel
echo "22" > /sys/class/gpio/export
exit 0
Alles anzeigen
Die nächsten beiden Python-Scripte unterscheiden sich nur in der Ansteuerung verschiedener GPIO PIN´s. Wird hier der jeweilige Schalter betätigt leuchtet die jeweilige grüne LED auf, einmalig gestartet durch den "subprocess" im Python-Script. Die vier aufgeführten Bash-Scripte schalten die grünen LED´s ein oder aus.
"Auto.py"
import RPi.GPIO as gpio
import time
import subprocess
pin = 18
gpio.setmode(gpio.BOARD)
gpio.setup(pin, gpio.IN, pull_up_down = gpio.PUD_UP)
prev_state = 1
try:
while True:
cur_state = gpio.input(pin)
if gpio.input(pin) != prev_state:
if prev_state == 1:
subprocess.call("./LEDAutoAus.sh")
else:
subprocess.call("./LEDAutoAn.sh")
prev_state = cur_state
time.sleep(0.1)
finally:
gpio.cleanup()
Alles anzeigen
"LEDAutoAn.sh"
#!/bin/bash
echo "out" > /sys/class/gpio/gpio27/direction
echo "1" > /sys/class/gpio/gpio27/value
exit 0
"LEDAutoAus.sh"
#!/bin/bash
echo "out" > /sys/class/gpio/gpio27/direction
echo "0" > /sys/class/gpio/gpio27/value
exit 0
"Haus.py"
import RPi.GPIO as gpio
import time
import subprocess
pin = 38
gpio.setmode(gpio.BOARD)
gpio.setup(pin, gpio.IN, pull_up_down = gpio.PUD_UP)
prev_state = 1
try:
while True:
cur_state = gpio.input(pin)
if gpio.input(pin) != prev_state:
if prev_state == 1:
subprocess.call("./LEDHausAus.sh")
else:
subprocess.call("./LEDHausAn.sh")
prev_state = cur_state
time.sleep(0.1)
finally:
gpio.cleanup()
Alles anzeigen
"LEDHausAn.sh"
#!/bin/bash
echo "out" > /sys/class/gpio/gpio22/direction
echo "1" > /sys/class/gpio/gpio22/value
exit 0
"LEDHausAus.sh"
#!/bin/bash
echo "out" > /sys/class/gpio/gpio22/direction
echo "0" > /sys/class/gpio/gpio22/value
exit 0
Das dritte Python-Script "Alle.py" ist ähnlich wie die oberen beide Scripte allerdings wird hier nicht der abgefragte Pin "UP" gezogen sondern "DOWN" gezogen. Außerdem wird hier der Status beider Schalter angezeigt (siehe Abbildung Steckplatine). Die zwei aufgeführten Bash-Scripte schalten die rote LED ein oder aus.
"Alle.py"
import RPi.GPIO as gpio
import time
import subprocess
pin = 36
gpio.setmode(gpio.BOARD)
gpio.setup(pin, gpio.IN, pull_up_down = gpio.PUD_DOWN)
prev_state = 1
try:
while True:
cur_state = gpio.input(pin)
if gpio.input(pin) != prev_state:
if prev_state == 1:
subprocess.call("./LEDAlleAus.sh")
else:
subprocess.call("./LEDAlleAn.sh")
prev_state = cur_state
time.sleep(0.1)
finally:
gpio.cleanup()
Alles anzeigen
"LEDAlleAn.sh"
#!/bin/bash
echo "out" > /sys/class/gpio/gpio17/direction
echo "1" > /sys/class/gpio/gpio17/value
exit 0
"LEDAlleAus.sh"
#!/bin/bash
echo "out" > /sys/class/gpio/gpio17/direction
echo "0" > /sys/class/gpio/gpio17/value
exit 0
Die acht erstellten Bash-Scripte und die drei Python-Scripte per chmod +x ausführbar machen....
In der Abbildung sieht man die Verkabelung auf dem Breadboard, den Anschluss am Raspberry Pi und an den Mikroschaltern.
Die verwendeten Mikroschalter sind diese hier:
Diese verwende ich als "Haken" für die Schlüssel und gleichzeitig als Schalter.
Ich möchte dieses Projekt noch durch eine Sprachausgabe und durch die Ansteuerung eines zweiten Raspberry Pi per SSH erweitern. Dies geschieht in den Python-Scripten, da muss ich mich aber noch hineinarbeiten. Aus räumlichen Gründen ist die Verwendung von zwei RPi´s nötig.
Für Hinweise, Verbesserungen oder das Aufzeigen von Fehlern bin ich dankbar.