LED Stripe über GPIO mit AngularJS/Http und Python ansteuern

  • Hallo Community,


    ich möchte gerne die LED stripes WS2801 ansteuern.


    Die LED's habe ich, wie im folgenden Tutorial, angeschlossen und mit dem Example Script erfolgreich angesteuert.

    https://tutorials-raspberrypi.…fen-anschliessen-steuern/


    Ich habe die Example Python auch nach meinen Wünschen editiert.


    Nun möchte ich gerne eine Webseite mit AngularJS erstellen auf der ich z.B. ein Colorpicker (z.B. https://www.w3schools.com/colors/colors_picker.asp) platziere. Wenn der User dann z.B. auf eine Farbe klickt, sollen die LEDs automatisch diese Farbe annehmen.


    Ich dachte daran, dass ich über die Webseite dann Shell Kommandos an das Python Skript schicke und dadurch die LED's ändere.
    Dazu würde ich eine zusätzliche Konfigurationsdatei erstellen. Änderungen von der Webseite werden per Shell Kommados (z.B. mit sed) darin gespeichert und im Python Skript wird die Konfigurationsdatei jede Sekunde ausgelesen. Die Änderungen sollten dann spätestens nach einer Sekunde dann angenommen werden.


    Gibt es Möglichkeiten, die Änderungen schneller durch zuführen und eventuell ohne zusätzliche Konfigurationsdatei? Ich habe das Gefühl, dass diese Art und Weise eher ein "gemauschel" ist.


    Über Ideen und Anregungen bin ich euch sehr dankbar


    viele Grüße

  • Das toent doch nach einer Applikation mit einem python-Framework wie bottle. bottle liefert die Seiten aus und behandelt auch gleich die AJAX-Requests.


    Oder dem Script einen UDP-Socket verpassen und vom Web-Server aus UDP-Pakete ans Script schicken. Die oben beschriebene Variante duerfte aber deutlich besser sein.


    HTML5 bietet uebrigens schon selber einen Color-Picker. AngularJS ist also auch nicht unbedingt noetig...

  • VIelen Dank für die Informationen. Ich arbeite derzeit an der python datei für bottle.


    Script lässt sich starten jedoch bekomme ich den Fehler


    Code
    AttributeError("'str' object has no attribute 'clear'",)

    Bin mir nicht sicher wo ein string declariert bzw. etwas in einen string umgewandelt wird aber es müsste in dem blink-color Aufruf passieren.

    EDIT: Oder bezieht sich der Fehler auf pixels.clear() ? Wobei der Aufruf fehlerfrei funktioniert, nachdem ich den blink_color Aufruf auskommentier.

    EDIT#2: Ich glaube es hängt daran, dass ich pixels in Klammern setze somit wird pixels anscheinend nicht mehr als variable sondern als string geladen und somit in der blink_color Methode nicht mehr erkannt. Nun nur noch herausfinden, wie ich die Klammern setzen muss damit die Zuordnung von Pixels noch funktioniert und die Übergabewerte des Http aufrufs den variablen zugeordnet werden.


    Der auskommentierte hello Bereich funktioniert ohne Probleme.


    Kann mir jemand bei diesem Problem helfen ?


    Edit#3: So funktioniert mit dem Aufruf:

    Quote

    blink_color(pixels, blink_times = 1, red = red, green = green, blue = blue)


    Vielen Dank und viele grüße

    Edited 3 times, last by kalle3222 ().

  • Ich habe nun auch einen zweiten Effekt der LEDs hinzugefügt.



    Nun mein Problem, dass ich nicht direkt umstellen kann wenn ich die andere Route aufrufe. Der Effekt muss erst komplett fertig gelaufen sein bis der nächste Effekt angezeigt wird.


    Hat jemand eine Idee, wie ich direkt auf das Umschalten der Effekte reagieren kann ?

  • Ich hab zu wenig Ahnung von bottle und dem python-Threading um diese Frage wirklich zu beantworten.


    In einer anderen Sprache wuerde der Timer in einem eigenen Thread laufen, und der Server koennte weitere HTTP-Requests abarbeiten waehrend der Timer lauft.


    Wenn der Code fuer den Update der LEDs mit einer einer Critical Section geschuetzt ist, kann man sofort einen neuen Zustand einstellen wenn ein Request ankommt. Die Timer kann man normalerweise auch stoppen, so dass der Ablauf abgebrochen wird.


    Ich vermute stark, dass das auch in bottle irgendwie moeglich ist...