{"id":181,"date":"2014-07-01T00:55:30","date_gmt":"2014-06-30T22:55:30","guid":{"rendered":"http:\/\/crazyice.net\/?p=181"},"modified":"2014-07-01T00:58:14","modified_gmt":"2014-06-30T22:58:14","slug":"raspberry-pi-python-server-fuer-gpio-steuerung","status":"publish","type":"post","link":"https:\/\/crazyice.net\/?p=181","title":{"rendered":"Raspberry Pi &#8211; Python Server f\u00fcr GPIO Steuerung"},"content":{"rendered":"<p>W\u00e4hrend des &#8222;Spielens&#8220; mit dem Raspberry Pi habe ich nun meinen JAVA Server, f\u00fcr die Steuerung der GPIOs portiert nach Python.<\/p>\n<p>Mit Hilfe des Servers kann ein Client durch Senden eines Strings im Format [{GPIO}],[{on|off}] den jeweiligen GPIO ein- bzw. ausschalten.<br \/>\nz.B: 23,on<\/p>\n<p><!--more--><\/p>\n<p>Der Server verwendet den PIN Modus BCM (also die GPIO Nummer, nicht die ID des PINs) und sendet nach eine kurze Antwort zur\u00fcck. Des Weiteren verwendet der Server Threading f\u00fcr eingehende Verbindungen.<\/p>\n<p>Hier der relativ kurze Code:<br \/>\n[python]<br \/>\nimport socket<br \/>\nimport sys<br \/>\nfrom thread import *<br \/>\nimport RPi.GPIO as GPIO<\/p>\n<p>HOST = &#8218;localhost&#8216;<br \/>\nPORT = 2999 <\/p>\n<p>s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)<br \/>\nprint &#8218;Trying to start server&#8230;&#8216;<\/p>\n<p>try:<br \/>\n    s.bind((HOST, PORT))<br \/>\nexcept socket.error as msg:<br \/>\n    print &#8218;Bind failed. Error Code : &#8218; + str(msg[0]) + &#8218; Message &#8218; + msg[1]<br \/>\n    sys.exit()<\/p>\n<p>print &#8218;Server started: &#8218;+ HOST<\/p>\n<p>print &#8218;Setting up GPIO to BCM&#8216;<br \/>\nGPIO.setmode(GPIO.BCM)<\/p>\n<p>maxNumQueuedConnections = 10<br \/>\ns.listen(maxNumQueuedConnections)<br \/>\nprint &#8218;Waiting for connections&#8230;&#8216;<\/p>\n<p>def clientthread(conn):<br \/>\n\tconn.send(&#8218;Welcome to the server. Type something and hit enter\\n&#8216;) #send only takes string<\/p>\n<p>    data = conn.recv(1024)<br \/>\n    dataArray = data.split()<br \/>\n    if (len() == 2):<br \/>\n        reply = &#8218;Data OK&#8230;&#8216; + data<br \/>\n        pin = dataArray[0]<br \/>\n        state = dataArray[1]<br \/>\n        print &#8218;GPIO: &#8218;+ pin<br \/>\n        print &#8218;State: &#8218;+ state<br \/>\n        GPIO.setup(pin,GPIO.OUT)<br \/>\n        if (state == &#8218;on&#8216;):<br \/>\n                GPIO.output(pin,1)<br \/>\n        elif (state == &#8218;off&#8216;):<br \/>\n                GPIO.output(pin,0)<br \/>\n        else:<br \/>\n                reply = &#8218;ERROR&#8230;wrong state: &#8218;+ state<br \/>\n    else:<br \/>\n        reply = &#8218;Wrong data was sent: &#8218;+ data<\/p>\n<p>    conn.sendall(reply)<\/p>\n<p>    conn.close()<\/p>\n<p>try:<br \/>\n        while True:<br \/>\n            conn, addr = s.accept()<br \/>\n            print &#8218;Connected from &#8218; + addr[0] + &#8218;:&#8216; + str(addr[1])<\/p>\n<p>            start_new_thread(clientthread ,(conn,))<br \/>\nexcept KeyboardInterrupt:<br \/>\n    print &#8220;<\/p>\n<p>print &#8218;Cleaning up GPIOs&#8216;<br \/>\nGPIO.cleanup()<br \/>\nprint &#8218;Closing server&#8216;<br \/>\ns.close()<br \/>\nprint &#8218;Server stopped&#8216;<br \/>\n[\/python]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W\u00e4hrend des &#8222;Spielens&#8220; mit dem Raspberry Pi habe ich nun meinen JAVA Server, f\u00fcr 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<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,55],"tags":[57,58,79,56,61,62],"class_list":["post-181","post","type-post","status-publish","format-standard","hentry","category-programmieren","category-python","tag-gpio","tag-led","tag-python","tag-raspberry-pi","tag-server","tag-socket"],"_links":{"self":[{"href":"https:\/\/crazyice.net\/index.php?rest_route=\/wp\/v2\/posts\/181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crazyice.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crazyice.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crazyice.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crazyice.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=181"}],"version-history":[{"count":3,"href":"https:\/\/crazyice.net\/index.php?rest_route=\/wp\/v2\/posts\/181\/revisions"}],"predecessor-version":[{"id":184,"href":"https:\/\/crazyice.net\/index.php?rest_route=\/wp\/v2\/posts\/181\/revisions\/184"}],"wp:attachment":[{"href":"https:\/\/crazyice.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crazyice.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crazyice.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}