2. Folgen Sie dem @CheerLights

Dies ist ein romantisches Projekt: Werden Sie Teil der @CheerLights - Twitter LED-Farbwechsel-Community und ermöglichen Sie LEDs weltweit, gleichzeitig die Farbe zu wechseln.

Platzieren Sie es in einer Ecke Ihres Büros, um sich daran zu erinnern, dass Sie nicht alleine sind.

Sie können einfach einen Tweet mit @cheerlights und dem gewünschten Farbnamen absenden. Dies wird die LEDs weltweit in die von Ihnen angegebene Farbe tauchen.

Erforderliche Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Ein vollständiges Set zu kaufen ist definitiv praktisch, hier ist der Link dazu:

Name

ARTIKEL IM KIT

LINK

Kepler Kit

450+

Kepler Kit

Sie können die Teile auch einzeln über die folgenden Links erwerben.

SN

KOMPONENTE

MENGE

LINK

1

Raspberry Pi Pico W

1

BUY

2

Micro-USB-Kabel

1

3

Steckbrett

1

BUY

4

Jumperkabel

Mehrere

BUY

5

WS2812 RGB 8-LED-Streifen

1

BUY

6

Li-Po-Lademodul

1

7

18650-Batterie

1

8

Batteriehalter

1

Schritte

  1. Schaltkreis aufbauen.

    Das hier verwendete Li-Po-Lademodul versorgt Ihren Schaltkreis mit Strom, sodass Sie das USB-Kabel abziehen und Ihr Projekt woanders nutzen können!

    Warnung

    Stellen Sie sicher, dass Ihr Li-Po-Lademodul so angeschlossen ist, wie im Diagramm dargestellt. Andernfalls könnte ein Kurzschluss Ihren Akku und die Schaltung beschädigen.

    ../_images/2.cheerlights_bb.png
  2. Wechseln Sie in das Verzeichnis, in dem Sie zuvor das Code-Paket heruntergeladen haben, und öffnen Sie die Datei 2_cheer_light.py im Pfad kepler-kit-main/iot.

  3. Um das Skript auszuführen, klicken Sie auf die Schaltfläche Aktuelles Skript ausführen oder drücken Sie F5. Anschließend sehen Sie die Verbindungsaufforderung, die IP-Adresse und die Farbe (0xff0000 steht für Rot) in der Shell.

    Bemerkung

    Bevor Sie den Code ausführen, stellen Sie sicher, dass Sie die Skripte do_connect.py und secrets.py auf Ihrem Pico W haben. Falls nicht, beziehen Sie sich auf 1. Zugang zum Netzwerk, um diese zu erstellen.

    ../_images/2_cheerlight1.png
  4. Nachdem das Skript ausgeführt wurde, zeigt der WS2812 RGB-Streifen eine Farbe an, die sich manchmal ändern wird.

  5. Wenn Sie dieses Skript beim Booten ausführen möchten, müssen Sie es als main.py auf dem Raspberry Pi Pico W speichern. Folgendermaßen:

    • Beenden Sie das laufende Skript und klicken Sie auf Datei -> Speichern unter.

      ../_images/2_cheerlight2.png
    • Wählen Sie im aufklappenden Fenster Raspberry Pi Pico aus.

      ../_images/2_cheerlight3.png
    • Setzen Sie den Dateinamen auf main.py. Ein Hinweis erscheint, wenn die Datei bereits auf Ihrem Pico W existiert.

      ../_images/2_cheerlight4.png
    • Jetzt können Sie das USB-Kabel abziehen und das Raspberry Pi Pico W über das Li-Po-Lademodul mit Strom versorgen. Stellen Sie es in eine Ecke, und es wird automatisch funktionieren.

Wie funktioniert es?

Das Raspberry Pi Pico W muss mit dem Internet verbunden sein, wie in 1. Zugang zum Netzwerk beschrieben. Für dieses Projekt reicht das aus.

from do_connect import *
do_connect()

WS2812 RGB-Streifen einstellen; weitere Nutzungsdetails finden Sie unter 3.3 RGB LED-Streifen.

import machine
from ws2812 import WS2812
ws = WS2812(machine.Pin(18), 8)

Jetzt brauchen wir eine Methode, um die Farbe von @CheerLights abzurufen. Es gibt ein Backend-System, das die Farbänderungen von Twitter empfängt und sie im JSON-Format an die URL: http://api.thingspeak.com/channels/1417/field/2/last.json sendet.

Wenn Sie diese URL direkt in Ihrem Browser öffnen, sehen Sie etwas Ähnliches wie das Folgende. Wir benötigen lediglich die field2 Daten, die einen hexadezimalen Farbcode darstellen.

{"created_at":"2022-08-16T06:12:44Z","entry_id":870488,"field2":"#ff00ff"}

Wir verwenden das urequests Modul, um diese Daten abzurufen und das json Modul, um diesen String in ein Python-Wörterbuch zu konvertieren. Der folgende Code holt die neueste @CheerLights-Farbe von der URL und gibt einen Farbwert zurück, der von WS2812 verwendet werden kann.

def get_colour():
    url = "http://api.thingspeak.com/channels/1417/field/2/last.json"
    try:
        r = urequests.get(url)
        if r.status_code > 199 and r.status_code < 300:
            cheerlights = json.loads(r.content.decode('utf-8'))
            print(cheerlights['field2'])
            colour = int('0x'+cheerlights['field2'][1:7])#Von String zu Integer konvertieren
            r.close()
            return colour
        else:
            return None
    except Exception as e:
        print(e)
        return None

Abschließend verwenden wir eine Schleife, um den WS2812 einmal pro Minute zu betreiben.

while True:
    colour = get_colour()
    if colour is not None:
        ws.write_all(colour)
    time.sleep(60)