.. note:: Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti a noi?** - **Supporto Esperto**: Risolvi i problemi post-vendita e le 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 ai nuovi annunci di prodotti e anteprime. - **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni festive. 👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi! .. _ar_rgb_strip: 2.7 Striscia LED RGB ====================== In questo progetto, esploreremo il mondo affascinante delle strisce LED WS2812 e daremo vita a un vivace spettacolo di colori. Con la capacità di controllare individualmente ciascun LED sulla striscia, possiamo creare effetti luminosi accattivanti che incanteranno i sensi. Inoltre, abbiamo incluso un'estensione entusiasmante a questo progetto, dove esploreremo il mondo della casualità. Introducendo colori casuali e implementando un effetto di luce fluente, possiamo creare un'esperienza visiva ipnotica che catturerà e incanterà. **Componenti Necessari** In questo progetto, avremo 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 * - ESP32 Starter Kit - 320+ - |link_esp32_starter_kit| Puoi anche acquistarli separatamente dai link sottostanti. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'ACQUISTO * - :ref:`cpn_esp32_wroom_32e` - |link_esp32_wroom_32e_buy| * - :ref:`cpn_esp32_camera_extension` - |link_esp32_extension_board| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_ws2812` - |link_ws2812_buy| **Schema** .. image:: ../../img/circuit/circuit_2.7_ws2812.png :width: 500 :align: center **Pin Disponibili** Ecco un elenco dei pin disponibili sulla scheda ESP32 per questo progetto. .. list-table:: :widths: 5 20 * - Pin Disponibili - IO13, IO12, IO14, IO27, IO26, IO25, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23 .. note:: IO33 non è disponibile per questo progetto. La striscia LED WS2812 richiede un segnale di modulazione a larghezza di impulso (PWM) preciso. Il segnale PWM ha requisiti precisi sia in termini di tempo che di tensione. Ad esempio, un bit "0" per il WS2812 corrisponde a un impulso di livello alto di circa 0,4 microsecondi, mentre un bit "1" corrisponde a un impulso di livello alto di circa 0,8 microsecondi. Ciò significa che la striscia ha bisogno di ricevere variazioni di tensione ad alta frequenza. Tuttavia, con una resistenza pull-up di 4,7K e un condensatore pull-down di 100nf su IO33, viene creato un semplice filtro passa-basso. Questo tipo di circuito "ammorbidisce" i segnali ad alta frequenza, poiché il condensatore ha bisogno di un po' di tempo per caricarsi e scaricarsi quando riceve variazioni di tensione. Pertanto, se il segnale cambia troppo rapidamente (cioè è ad alta frequenza), il condensatore non sarà in grado di tenere il passo. Ciò si traduce in un segnale di uscita che diventa sfocato e non riconoscibile dalla striscia. **Collegamento** .. image:: ../../img/wiring/2.7_rgb_strip_bb.png :width: 800 **Codice** .. note:: * Puoi aprire il file ``2.7_rgb_strip.ino`` nel percorso ``esp32-starter-kit-main\c\codes\2.7_rgb_strip``. Oppure copia questo codice nell'**Arduino IDE**. * Dopo aver selezionato la scheda (ESP32 Dev Module) e la porta appropriata, fai clic sul pulsante **Upload**. * La libreria ``Adafruit NeoPixel`` è utilizzata qui, puoi installarla dal **Library Manager**. .. image:: img/rgb_strip_lib.png .. raw:: html Quando il codice è stato caricato con successo, i LED sulla striscia si accenderanno sequenzialmente con un colore giallo e poi si spegneranno, creando un semplice effetto di inseguimento. **Come funziona?** #. Includi la libreria Adafruit NeoPixel: Questa riga importa la libreria Adafruit NeoPixel in modo che lo sketch possa utilizzare le sue funzioni e classi per controllare la striscia LED. .. code-block:: arduino #include // Includi la libreria Adafruit NeoPixel #. Definisci le costanti per la striscia LED. .. code-block:: arduino #define LED_PIN 13 // Striscia LED NeoPixel #define NUM_LEDS 8 // Numero di LED #. Crea un'istanza della classe Adafruit_NeoPixel. .. code-block:: arduino // Crea un'istanza della classe Adafruit_NeoPixel Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); Questa riga crea un'istanza della classe ``Adafruit_NeoPixel`` chiamata ``strip`` e la configura con il numero di LED, il pin collegato alla striscia LED e i parametri del segnale (ordine dei colori GRB e velocità di trasmissione dati di 800 kHz). * ``Adafruit_NeoPixel (uint16_t n, int16_t p = 6, neoPixelType t = NEO_GRB + NEO_KHZ800)`` Costruttore NeoPixel quando lunghezza, pin e tipo di pixel sono noti in fase di compilazione. Restituisce un oggetto Adafruit_NeoPixel. Chiama la funzione ``begin()`` prima dell'uso. * ``n``: Numero di NeoPixel nella striscia. * ``p``: Numero del pin Arduino che gestirà i dati NeoPixel. * ``t``: Tipo di pixel - somma i costanti ``NEO_*`` definiti in ``Adafruit_NeoPixel.h``, ad esempio ``NEO_GRB+NEO_KHZ800`` per NeoPixel che si aspettano un flusso dati di 800 KHz (anziché 400 KHz) con i byte di colore espressi in ordine verde, rosso, blu per pixel. #. Inizializza la striscia RGB WS2812 e imposta il colore iniziale della striscia su nero (spento). .. code-block:: arduino void setup() { strip.begin(); // Inizializza la striscia NeoPixel strip.show(); // Imposta il colore iniziale su nero } * ``void begin (void)``: Configura il pin NeoPixel per l'output. * ``void show (void)``: Trasmette i dati dei pixel in RAM ai NeoPixel. #. Nella funzione ``loop()``, i LED sulla striscia si accenderanno sequenzialmente con un colore giallo e poi si spegneranno, creando un semplice effetto di inseguimento. .. code-block:: arduino void loop() { // Accendi i LED uno alla volta for (int i = 0; i < NUM_LEDS; i++) { strip.setPixelColor(i, 100, 45, 0); // Imposta il colore del i-esimo LED su giallo strip.show(); // Aggiorna la striscia LED con i nuovi colori delay(100); // Attendi 100 millisecondi } // Spegni i LED uno alla volta for (int i = 0; i < NUM_LEDS; i++) { strip.setPixelColor(i, 0, 0, 0); // Imposta il colore del i-esimo LED su nero (spento) strip.show(); // Aggiorna la striscia LED con i nuovi colori delay(100); // Attendi 100 millisecondi } } * ``void setPixelColor (uint16_t n, uint8_t r, uint8_t g, uint8_t b)`` Imposta il colore di un pixel utilizzando componenti rosso, verde e blu separati. Se si utilizzano pixel RGBW, il bianco sarà impostato su 0. * ``n``: Indice del pixel, a partire da 0. * ``r``: Luminosità del rosso, 0 = minimo (spento), 255 = massimo. * ``g``: Luminosità del verde, 0 = minimo (spento), 255 = massimo. * ``b``: Luminosità del blu, 0 = minimo (spento), 255 = massimo.