.. note::

    Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.

    **Perché unirti?**

    - **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra community e del nostro team.
    - **Impara e condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
    - **Anteprime esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.
    - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
    - **Promozioni festive e giveaway**: Partecipa a promozioni festive e concorsi a premi.

    👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!

2. Segui @CheerLights
=======================================

Questo è un progetto romantico: unisciti alla comunità |link_cheerlights| per il cambio colore dei LED, che permette ai LED di tutto il mondo di cambiare colore simultaneamente.

Puoi posizionarlo in un angolo del tuo ufficio per ricordarti che non sei solo.

Puoi twittare a @cheerlights includendo il nome del colore nel tweet. Questo cambierà i LED in tutto il mondo nel colore che hai specificato.

**Componenti necessari**

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un kit completo, ecco il link:

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

    *   - Nome	
        - ELEMENTI IN QUESTO KIT
        - LINK
    *   - Kit Kepler	
        - 450+
        - |link_kepler_kit|

Puoi anche acquistarli separatamente dai link qui sotto.

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

    *   - SN
        - COMPONENTE	
        - QUANTITÀ
        - LINK

    *   - 1
        - :ref:`cpn_pico_w`
        - 1
        - |link_picow_buy|
    *   - 2
        - Cavo Micro USB
        - 1
        - 
    *   - 3
        - :ref:`cpn_breadboard`
        - 1
        - |link_breadboard_buy|
    *   - 4
        - :ref:`cpn_wire`
        - Diverse
        - |link_wires_buy|
    *   - 5
        - :ref:`cpn_ws2812`
        - 1
        - |link_ws2812_buy|
    *   - 6
        - :ref:`cpn_lipo_charger`
        - 1
        -  
    *   - 7
        - Batteria 18650
        - 1
        -  
    *   - 8
        - Supporto batteria
        - 1
        -  

**Passaggi**

#. Costruisci il circuito.

    Il modulo caricabatterie Li-po utilizzato qui alimenterà il tuo circuito, così potrai scollegare il cavo USB e portare il tuo progetto altrove!

    .. warning:: 
        
        Assicurati che il modulo caricabatterie Li-po sia collegato come mostrato nello schema. Altrimenti, un cortocircuito potrebbe danneggiare la batteria e il circuito.

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


#. Cambia il percorso nella cartella in cui hai scaricato il `code package <https://github.com/sunfounder/kepler-kit/archive/refs/heads/main.zip>`_  in precedenza e apri il file ``2_cheer_light.py`` nel percorso ``kepler-kit-main/iot``.

#. Per eseguire lo script, clicca sul pulsante **Esegui script corrente** o premi F5, quindi vedrai il prompt di connessione, l'IP e il colore (0xff0000 è rosso) nella Shell.


    .. note::

        Prima di eseguire il codice, devi assicurarti di avere gli script ``do_connect.py`` e ``secrets.py`` nel tuo Pico W. In caso contrario, fai riferimento a :ref:`iot_access` per crearli.

    .. image:: img/2_cheerlight1.png


#. Dopo l'esecuzione dello script, la striscia RGB WS2812 mostrerà un colore, a volte il colore cambierà.

#. Se vuoi eseguire questo script all'avvio, devi salvarlo nel Raspberry Pi Pico W come ``main.py``, come segue.

    * Ferma l'esecuzione dello script e clicca su **File** -> **Salva con nome**.

        .. image:: img/2_cheerlight2.png

    * Seleziona **Raspberry Pi Pico** nella finestra popup che appare.

        .. image:: img/2_cheerlight3.png

    * Imposta il nome del file a ``main.py``. Apparirà un avviso se esiste già un file con lo stesso nome sul tuo Pico W.

        .. image:: img/2_cheerlight4.png
    
    * Ora puoi scollegare il cavo USB e utilizzare il modulo caricabatterie Li-po per alimentare il Raspberry Pi Pico W. Posizionalo in un angolo e funzionerà automaticamente.


**Come funziona?**

Il Raspberry Pi Pico W deve essere connesso a Internet, come descritto in :ref:`iot_access`. Per questo progetto, usalo semplicemente.

.. code-block:: python

    from do_connect import *
    do_connect()

Imposta la striscia RGB WS2812, fai riferimento a :ref:`py_neopixel` per i dettagli sul suo utilizzo.

.. code-block:: python

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

Ora, abbiamo bisogno di un modo per ottenere il colore di @CheerLights. Esiste un 
sistema backend che raccoglie le modifiche di colore da Twitter e le pubblica in 
formato JSON all'URL: http://api.thingspeak.com/channels/1417/field/2/last.json.

Se apri questo URL direttamente nel tuo browser, vedrai qualcosa del genere. Tutto 
ciò di cui abbiamo bisogno è il dato ``field2``, che è una stringa di colori codificata esadecimale.

.. code-block:: 

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

Dobbiamo utilizzare il modulo ``urequests`` per ottenere questi dati e il modulo ``json`` per convertire questo carattere in un dizionario Python.
Il seguente codice ottiene l'ultimo colore di @CheerLights dall'URL e restituisce un valore colore che può essere utilizzato dalla WS2812.

.. 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])#Convert from String to Integer
                r.close()
                return colour
            else:
                return None
        except Exception as e:
            print(e)
            return None

Infine, usa un ciclo per far funzionare la ws2812 una volta al minuto.

.. code-block:: python

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

