.. note::

    Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

    **Warum beitreten?**

    - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
    - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
    - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
    - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
    - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

    👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!

2. Folgen Sie dem @CheerLights
=======================================

Dies ist ein romantisches Projekt: Werden Sie Teil der |link_cheerlights| 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:

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Name	
        - ARTIKEL IM KIT
        - LINK
    *   - Kepler Kit	
        - 450+
        - |link_kepler_kit|

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

.. list-table::
    :widths: 5 20 5 20
    :header-rows: 1

    *   - SN
        - KOMPONENTE	
        - MENGE
        - LINK

    *   - 1
        - :ref:`cpn_pico_w`
        - 1
        - |link_picow_buy|
    *   - 2
        - Micro-USB-Kabel
        - 1
        - 
    *   - 3
        - :ref:`cpn_breadboard`
        - 1
        - |link_breadboard_buy|
    *   - 4
        - :ref:`cpn_wire`
        - Mehrere
        - |link_wires_buy|
    *   - 5
        - :ref:`cpn_ws2812`
        - 1
        - |link_ws2812_buy|
    *   - 6
        - :ref:`cpn_lipo_charger`
        - 1
        -  
    *   - 7
        - 18650-Batterie
        - 1
        -  
    *   - 8
        - Batteriehalter
        - 1
        -  

**Schritte**

#. 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!

    .. warning:: 
        
        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.

    .. image:: img/wiring/2.cheerlights_bb.png
        :width: 800



#. Wechseln Sie in das Verzeichnis, in dem Sie zuvor das `Code-Paket <https://github.com/sunfounder/kepler-kit/archive/refs/heads/main.zip>`_ heruntergeladen haben, und öffnen Sie die Datei ``2_cheer_light.py`` im Pfad ``kepler-kit-main/iot``.

#. 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.

    .. note::

        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 :ref:`iot_access`, um diese zu erstellen.

    .. image:: img/2_cheerlight1.png


#. Nachdem das Skript ausgeführt wurde, zeigt der WS2812 RGB-Streifen eine Farbe an, die sich manchmal ändern wird.

#. 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**.

        .. image:: img/2_cheerlight2.png

    * Wählen Sie im aufklappenden Fenster **Raspberry Pi Pico** aus.

        .. image:: img/2_cheerlight3.png

    * Setzen Sie den Dateinamen auf ``main.py``. Ein Hinweis erscheint, wenn die Datei bereits auf Ihrem Pico W existiert.

        .. image:: img/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 :ref:`iot_access` beschrieben. Für dieses Projekt reicht das aus.

.. code-block:: python

    from do_connect import *
    do_connect()

WS2812 RGB-Streifen einstellen; weitere Nutzungsdetails finden Sie unter :ref:`py_neopixel`.

.. code-block:: python

    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.

.. code-block::

    {"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.

.. code-block:: python

    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.

.. code-block:: python

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

