Top

LED Server

Ein simples Projekt mit einigen LEDs und einem Raspberry Pi Model B. Eine Schachtel und zwei Rohlinge von Plastikfiguren waren Ursprung der Idee. Das Ziel des Projekts war es einen Web Server zu haben der LEDs steuert.

LEDServer

Die LEDs in Gruppen zusammen löten anschließend mit Kabeln verlötet. Es sind zwei Gruppen entstanden, eine mit gelben und mit roten LEDs.

LEDServer

Die LED Gruppen mit den GPIO Pins vom Raspberry Pi verbinden und testen ob alles leuchtet wie erwartet.

LEDServer

Den Raspberry Pi in die Schachtel stecken und die Kabel durch den Deckel führen.

LEDServer

Die LEDs lose fixieren um diese nach Bedarf anders zu positionieren. Die Figuren aufstellen und schauen ob die Positionen der LEDs passen.

LEDServer

Der Server zum testen stellt zwei Routen zur Verfügung die über HTTP mit GET angesprochen werden können. Jede Route schaltet dann bestimmte LED Gruppen ein und aus. Der Server wartet in diesem Fall auf eingehende Anfragen. In einem anderen Fall könnte ein Client in einem zeitlichen Interval, Anfragen an einen Server senden und abhängig von der Antwort entsprechende LED Gruppen ansteuern.

import tornado.web
import tornado.ioloop
import RPi.GPIO as GPIO

PORT = 8888
LEFT_SIDE1 = 11
LEFT_SIDE2 = 13
LEFT_SIDE3 = 15
RIGHT_SIDE1 = 12
RIGHT_SIDE2 = 16
RIGHT_SIDE3 = 18

GPIO.setmode(GPIO.BOARD)

GPIO.setup(LEFT_SIDE1, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(LEFT_SIDE2, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(LEFT_SIDE3, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(RIGHT_SIDE1, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(RIGHT_SIDE2, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(RIGHT_SIDE3, GPIO.OUT, initial=GPIO.LOW)

def light_on(pin):
    GPIO.output(pin, GPIO.HIGH)

def light_off(pin):
    GPIO.output(pin, GPIO.LOW)

def light_switch(pin):
    if GPIO.input(pin):
        light_off(pin)
    else:
        light_on(pin)

class LeftHandler(tornado.web.RequestHandler):
    def get(self):
        message = "You requested %s\n" % self.request.uri
        light_switch(LEFT_SIDE1)
        light_switch(LEFT_SIDE2)
        light_switch(LEFT_SIDE3)
        self.write(message)

class RightHandler(tornado.web.RequestHandler):
    def get(self):
        message = "You requested %s\n" % self.request.uri
        light_switch(RIGHT_SIDE1)
        light_switch(RIGHT_SIDE2)
        light_switch(RIGHT_SIDE3)
        self.write(message)

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [(r'/(favicon.ico)', tornado.web.StaticFileHandler, {"path": ""}),
                    (r"/left", LeftHandler),
                    (r"/right", RightHandler)]
        settings = {}
        tornado.web.Application.__init__(self, handlers, **settings)

if __name__ == "__main__":
    try:
        Application().listen(PORT)
        tornado.ioloop.IOLoop.instance().start()
    except KeyboardInterrupt:
        GPIO.cleanup()