Ein UDP-Server zur Steuerung eines GPIO auf dem Raspberry
Das folgende Script dient zur Fernsteuerung eines GPIO-Pins auf dem Raspberry mit UDP-Meldungen.
Es initialisiert GPIO 24 als Ausgang und setzt ihn Low.
Dann erzeugt es einen UDP-Socket und wartet in einer Endlosschleife auf Meldungen. Wenn eine Meldung mit dem Inhalt "on" empfangen wird, schaltet es den GPIO High, bei allen anderen Meldungen wird der Ausgang auf Low gesetzt.
Achtung
Das Script bietet keinerlei Sicherheit gegen Missbrauch. Es wird nicht geprüft of der Absender berechtigt ist das Pin zu schalten. Der Absender erfährt auch nicht, ob das Pin tatsächlich gesetzt wurde. Und es gibt keine Ueberwachung der Verbindung zum Client.
Es ist also höchstens für Demozwecke zu gebrauchen.
""" This script initializes pin 24 on the raspberry pi as an output and sets it low. After that, it sets up a UDP socket on port 54345 and waits for packets. When a packet with an 'o' and a 'n' is received, the output is set high. Any other packet will set the output low. V0.01 27-AUG-2014 Te """ import RPi.GPIO as GPIO import socket pin = 24 GPIO.setmode( GPIO.BCM ) GPIO.setup( pin, GPIO.OUT ) GPIO.output( pin, GPIO.LOW ) sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) sock.bind( ('',54345) ) while True: data, addr = sock.recvfrom( 1024 ) if data == "on": GPIO.output( pin, GPIO.HIGH ) else: GPIO.output( pin, GPIO.LOW )
Sie können PinServer.py hier herunterladen.
Test
Die GPIO-Funktionen von Python brauchen Root-Rechte. Das Script muss deshalb mit sudo ausgeführt werden:
sudo python PinServer.py
Bis der entsprechende Client auf dieser Website publiziert wird, kann das Programm mit netcat getestet werden:
echo -n on | nc -u 192.168.1.100 54345
Die IP-Adresse in dieser Zeile ist natürlich nur ein Beispiel und muss entsprechend angepasst werden.
Ein passender Client
Das Script für einen passenden Client finden Sie hier.