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.
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.
Die LED Gruppen mit den GPIO Pins vom Raspberry Pi verbinden und testen ob alles leuchtet wie erwartet.
Den Raspberry Pi in die Schachtel stecken und die Kabel durch den Deckel führen.
Die LEDs lose fixieren um diese nach Bedarf anders zu positionieren. Die Figuren aufstellen und schauen ob die Positionen der LEDs passen.
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()