Blog der Heimetli Software AG

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.