ich möchte eine LED Stripes (WS2801) die an die IOs von einem Raspberry angeschlossen ist, per http aufrufe steuern. Dazu habe ich python und bottle installiert. Das schalten per Webaufruf funktioniert ohne Probleme, jedoch habe ich nun das Problem, dass der Aufruf erst komplett abgearbeitet werden muss bevor der nächster Aufruf abgearbeitet wird. Ich möchte jedoch direkt auf die Änderungen reagieren. Nun die Frage, ist es möglich interrupts in Verbindung mit bottle zu programmieren damit immer der letzte http Aufruf abgearbeitet wird?
hier der bisherige code:
Code: Alles auswählen
from bottle import route, run, template
# Simple demo of of the WS2801/SPI-like addressable RGB LED lights.
import time
import RPi.GPIO as GPIO
# Import the WS2801 module.
import Adafruit_WS2801
import Adafruit_GPIO.SPI as SPI
# Configure the count of pixels:
PIXEL_COUNT = 160
# Alternatively specify a hardware SPI connection on /dev/spidev0.0:
SPI_PORT = 0
SPI_DEVICE = 0
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO)
# Define the wheel function to interpolate between different hues.
def wheel(pos):
if pos < 85:
return Adafruit_WS2801.RGB_to_color(pos * 3, 255 - pos * 3, 0)
elif pos < 170:
pos -= 85
return Adafruit_WS2801.RGB_to_color(255 - pos * 3, 0, pos * 3)
else:
pos -= 170
return Adafruit_WS2801.RGB_to_color(0, pos * 3, 255 - pos * 3)
def blink_color(pixels, blink_times=5, wait=0.5, speed=0.08, red=255, blue=0, green=0):
for i in range(blink_times):
# blink two times, then wait
pixels.clear()
for j in range(2):
for k in range(pixels.count()):
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( red, blue, green ))
pixels.show()
time.sleep(speed)
pixels.clear()
pixels.show()
time.sleep(speed)
time.sleep(wait)
def rainbow_cycle(pixels, wait=0.005):
for j in range(256): # one cycle of all 256 colors in the wheel
for i in range(pixels.count()):
pixels.set_pixel(i, wheel(((i * 256 // pixels.count()) + j) % 256) )
pixels.show()
if wait > 0:
time.sleep(wait)
@route('/')
@route('/blink/<blink_times:int>/<wait:float>/<speed:float>/<red:int>/<blue:int>/<green:int>')
def blink(blink_times='2',wait='0.5',speed='0.08',red='255',blue='0',green='0'):
pixels.clear()
pixels.show()
blink_color(pixels, blink_times = blink_times, wait = wait, speed = speed, red = red, blue = blue, green = green)
@route('/rainbow/<wait:float>')
def rainbow(wait='0.1'):
pixels.clear()
pixels.show()
rainbow_cycle(pixels, wait = wait)
run(host='localhost', port=8080, debug=True)
Ich freue mich über Anregungen und Lösungsansätze.
Vielen Dank und Viele Grüße