Blog der Heimetli Software AG

Ein UDP-Client der den Status eines GPIO-Pins auf dem Raspberry meldet

Das folgende Script sendet die Steuermeldungen für den Server im letzten Post.

Es initialisert Pin 4 als Eingang und setzt einen UDP Socket auf. Dann geht es in eine Endlosschleife wo der Eingang gelesen und sein Zustand als UDP-Paket geschickt wird. Ein sleep verhindert, dass das Netz mit Meldungen geflutet wird und die CPU überhitzt.

Achtung

Genau wie im Server gibt es keinerlei Sicherheitsvorkehrungen.

""" This script initializes pin 4 on the raspberry pi
    as an input.

    After that, it sets up a UDP socket and starts an
    endless loop.

    In the loop, it reads the status of pin 4 every
    second and sends a packet with the state to the
    server.

    V0.01  28-AUG-2014 Te
"""

import RPi.GPIO as GPIO
import socket
import time

pin = 4

GPIO.setmode( GPIO.BCM )
GPIO.setup( pin, GPIO.IN )

ip   = "192.168.1.203"
port = 54345
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )

while True:
    if GPIO.input(pin):
        sock.sendto( "on", (ip,port) )
    else:
        sock.sendto( "off", (ip,port) )

    time.sleep( 1 )

Sie können PinClient.py hier herunterladen.

Test

Um das Script einfach zu halten, ist die IP-Adresse des Servers fest eincodiert (Zeile 23). Vor dem ersten Test muss diese Zeile höchst wahrscheinlich geändert werden.

Die GPIO-Funktionen von Python brauchen Root-Rechte. Diese Rechte bekommt das Script zum Beispiel beim Start mit sudo:

sudo python PinClient.py

Ein passender Server

Das Script für einen passenden Server finden Sie hier.