Nota

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 [qui] e unisciti oggi!

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:

Nome

ELEMENTI IN QUESTO KIT

LINK

ESP32 Starter Kit

320+

ESP32 Starter Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

ESP32 Scheda

ACQUISTA

Estensione Fotocamera ESP32

ACQUISTA

Cavi Jumper

ACQUISTA

Striscia LED RGB WS2812 con 8 LED

ACQUISTA

Schema

../../_images/circuit_2.7_ws2812.png

Pin Disponibili

Ecco un elenco dei pin disponibili sulla scheda ESP32 per questo progetto.

Pin Disponibili

IO13, IO12, IO14, IO27, IO26, IO25, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

Nota

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

../../_images/2.7_rgb_strip_bb.png

Codice

Nota

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

    ../../_images/rgb_strip_lib.png

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?

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

    #include <Adafruit_NeoPixel.h> // Includi la libreria Adafruit NeoPixel
    
  2. Definisci le costanti per la striscia LED.

    #define LED_PIN 13 // Striscia LED NeoPixel
    #define NUM_LEDS 8 // Numero di LED
    
  3. Crea un’istanza della classe Adafruit_NeoPixel.

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

  4. Inizializza la striscia RGB WS2812 e imposta il colore iniziale della striscia su nero (spento).

    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.

  5. Nella funzione loop(), i LED sulla striscia si accenderanno sequenzialmente con un colore giallo e poi si spegneranno, creando un semplice effetto di inseguimento.

    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.