Während des „Spielens“ mit dem Raspberry Pi habe ich nun meinen JAVA Server, für die Steuerung der GPIOs portiert nach Python.
Mit Hilfe des Servers kann ein Client durch Senden eines Strings im Format [{GPIO}],[{on|off}] den jeweiligen GPIO ein- bzw. ausschalten.
z.B: 23,on
Der Server verwendet den PIN Modus BCM (also die GPIO Nummer, nicht die ID des PINs) und sendet nach eine kurze Antwort zurück. Des Weiteren verwendet der Server Threading für eingehende Verbindungen.
Hier der relativ kurze Code:
[python]
import socket
import sys
from thread import *
import RPi.GPIO as GPIO
HOST = ‚localhost‘
PORT = 2999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ‚Trying to start server…‘
try:
s.bind((HOST, PORT))
except socket.error as msg:
print ‚Bind failed. Error Code : ‚ + str(msg[0]) + ‚ Message ‚ + msg[1]
sys.exit()
print ‚Server started: ‚+ HOST
print ‚Setting up GPIO to BCM‘
GPIO.setmode(GPIO.BCM)
maxNumQueuedConnections = 10
s.listen(maxNumQueuedConnections)
print ‚Waiting for connections…‘
def clientthread(conn):
conn.send(‚Welcome to the server. Type something and hit enter\n‘) #send only takes string
data = conn.recv(1024)
dataArray = data.split()
if (len() == 2):
reply = ‚Data OK…‘ + data
pin = dataArray[0]
state = dataArray[1]
print ‚GPIO: ‚+ pin
print ‚State: ‚+ state
GPIO.setup(pin,GPIO.OUT)
if (state == ‚on‘):
GPIO.output(pin,1)
elif (state == ‚off‘):
GPIO.output(pin,0)
else:
reply = ‚ERROR…wrong state: ‚+ state
else:
reply = ‚Wrong data was sent: ‚+ data
conn.sendall(reply)
conn.close()
try:
while True:
conn, addr = s.accept()
print ‚Connected from ‚ + addr[0] + ‚:‘ + str(addr[1])
start_new_thread(clientthread ,(conn,))
except KeyboardInterrupt:
print “
print ‚Cleaning up GPIOs‘
GPIO.cleanup()
print ‚Closing server‘
s.close()
print ‚Server stopped‘
[/python]