Nota

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é unirsi 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 alle anteprime.

  • Sconti Speciali: Goditi 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.2 Dissolvenza

Nel progetto precedente, abbiamo controllato il LED accendendolo e spegnendolo utilizzando l’uscita digitale. In questo progetto, creeremo un effetto di respirazione sul LED utilizzando la modulazione di larghezza di impulso (PWM). La PWM è una tecnica che ci permette di controllare la luminosità di un LED o la velocità di un motore variando il ciclo di lavoro di un segnale a onda quadra.

Con la PWM, invece di accendere o spegnere semplicemente il LED, regoleremo il tempo in cui il LED è acceso rispetto al tempo in cui è spento in ogni ciclo. Commutando rapidamente il LED acceso e spento a intervalli variabili, possiamo creare l’illusione che il LED si illumini e si attenui gradualmente, simulando un effetto di respirazione.

Utilizzando le capacità PWM dell’ESP32 scheda, possiamo ottenere un controllo fluido e preciso sulla luminosità del LED. Questo effetto di respirazione aggiunge un elemento dinamico e visivamente accattivante ai tuoi progetti, creando un display o un’atmosfera che cattura l’attenzione.

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

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Piedini Disponibili

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

Piedini Disponibili

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

Schema

../../_images/circuit_2.1_led.png

Questo progetto utilizza lo stesso circuito del primo progetto 2.1 Ciao, LED!, ma il tipo di segnale è diverso. Nel primo progetto si uscivano direttamente livelli digitali alti e bassi (0&1) dal pin26 per accendere o spegnere il LED, in questo progetto si esce un segnale PWM dal pin26 per controllare la luminosità del LED.

Cablaggio

../../_images/2.1_hello_led_bb.png

Codice

Nota

  • Puoi aprire il file 2.2_fading_led.ino nel percorso esp32-starter-kit-main\c\codes\2.2_fading_led.

  • Dopo aver selezionato la scheda (ESP32 Dev Module) e la porta appropriata, clicca sul pulsante Carica.

  • Vedi sempre «COMxx sconosciuto»?

Dopo che il codice è stato caricato con successo, potrai vedere il LED respirare.

Come funziona?

  1. Definisci costanti e variabili。

    const int ledPin = 26; // Il pin GPIO per il LED
    int brightness = 0;
    int fadeAmount = 5;
    
    • ledPin: Il numero del pin GPIO a cui è collegato il LED (in questo caso, GPIO 26).

    • brightness: Il livello di luminosità corrente del LED (inizialmente impostato a 0).

    • fadeAmount: La quantità di variazione della luminosità del LED in ogni passaggio (impostata a 5).

  2. Inizializza il canale PWM e configura il pin del LED.

    void setup() {
      ledcAttach(ledPin, 5000, 8);  // Collega il pin del LED
    }
    

    Qui utilizziamo la periferica LEDC (controllo LED) progettata principalmente per controllare l’intensità dei LED, anche se può essere utilizzata anche per generare segnali PWM per altri scopi.

    • bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);: Questa funzione è usata per configurare il pin LEDC con la frequenza e la risoluzione specificate. Il canale LEDC sarà selezionato automaticamente.

      • pin seleziona il pin GPIO.

      • freq seleziona la frequenza del pwm.

      • resolution_bits seleziona la risoluzione per il canale ledc. Gamma da 1 a 14 bit (1-20 bit per ESP32).

  3. La funzione loop() contiene la logica principale del programma e viene eseguita continuamente. Aggiorna la luminosità del LED, inverte la quantità di dissolvenza quando la luminosità raggiunge il valore minimo o massimo e introduce un ritardo.

    void loop() {
        ledcWrite(ledPin, brightness);  // Scrivi il nuovo valore di luminosità nel pin PWM
        brightness = brightness + fadeAmount;
    
        if (brightness <= 0 o brightness >= 255) {
            fadeAmount = -fadeAmount;
        }
    
        delay(50); // Aspetta 50 millisecondi
        }
    
    • bool ledcWrite(uint8_t pin, uint32_t duty);: Questa funzione viene utilizzata per impostare il duty cycle per il pin LEDC.

      • pin seleziona il pin LEDC.

      • duty seleziona il duty cycle da impostare per il canale selezionato.