Nota

Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci la tua conoscenza su Raspberry Pi, Arduino e ESP32 insieme ad altri entusiasti.

Perché Unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue abilità.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Regali: Partecipa a giveaway e promozioni festive.

👉 Pronto per esplorare e creare con noi? Clicca [qui] e unisciti oggi!

Lezione 45: Controllo Bluetooth di un LED RGB

Questo progetto è un’estensione di un progetto precedente (Lezione 44: Bluetooth), aggiungendo configurazioni di LED RGB e comandi personalizzati come «led_off», «red», «green», ecc. Questi comandi permettono di controllare il LED RGB inviando comandi da un dispositivo mobile tramite LightBlue.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

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

Nome

ELEMENTI IN QUESTO KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK ACQUISTO

ESP32 & Scheda di Sviluppo (ESP32 WROOM 32E)

ACQUISTA

Breadboard

ACQUISTA

Modulo LED RGB

-

Passaggi Operativi

  1. Costruisci il circuito.

    ../_images/Lesson_28_RGB_LED_Module_esp32_bb.png
  2. Apri il file Lesson_45_Bluetooth_RGB.ino situato nella directory universal-maker-sensor-kit\esp32\Lesson_45_Bluetooth_RGB, oppure copia il codice nell’Arduino IDE.

  3. Per evitare conflitti di UUID, si raccomanda di generare casualmente tre nuovi UUID utilizzando il Online UUID Generator fornito dal Bluetooth SIG, e inserirli nelle seguenti linee di codice.

    Nota

    Se hai già generato tre nuovi UUID nel progetto Lezione 44: Bluetooth, puoi continuare a utilizzarli.

    #define SERVICE_UUID           "your_service_uuid_here"
    #define CHARACTERISTIC_UUID_RX "your_rx_characteristic_uuid_here"
    #define CHARACTERISTIC_UUID_TX "your_tx_characteristic_uuid_here"
    
    ../_images/uuid_generate.png
  4. Seleziona la scheda corretta e la porta, poi clicca sul pulsante Carica.

  5. Dopo che il codice è stato caricato con successo, attiva il Bluetooth sul tuo dispositivo mobile e apri l’app LightBlue.

    ../_images/bluetooth_open.png
  6. Nella pagina Scan, trova ESP32-Bluetooth e clicca CONNETTI. Se non lo vedi, prova a refreshare la pagina alcune volte. Quando appare «Connesso al dispositivo!», la connessione Bluetooth è stata un successo. Scorri in basso per vedere i tre UUID impostati nel codice.

  7. Tocca l’UUID Invia, poi imposta il formato dei dati su «Stringa UTF-8». Ora puoi scrivere questi comandi: «led_off», «red», «green», «blue», «yellow» e «purple» per vedere se il LED RGB risponde a queste istruzioni.

    ../_images/bluetooth_send_rgb.png

Come funziona?

Questo codice è un’estensione di un progetto precedente (Lezione 44: Bluetooth), aggiungendo configurazioni di LED RGB e comandi personalizzati come «led_off», «red», «green», ecc. Questi comandi permettono di controllare il LED RGB inviando comandi da un dispositivo mobile tramite LightBlue.

Analizziamo il codice passo dopo passo:

  • Aggiungi nuove variabili globali per i pin dei LED RGB, i canali PWM, la frequenza e la risoluzione.

    ...
    
    // Definisci i pin dei LED RGB
    const int redPin = 27;
    const int greenPin = 26;
    const int bluePin = 25;
    
    // Definisci i canali PWM
    const int redChannel = 0;
    const int greenChannel = 1;
    const int blueChannel = 2;
    
    ...
    
  • All’interno della funzione setup(), i canali PWM sono inizializzati con la frequenza e la risoluzione predefinite. I pin del LED RGB sono poi collegati ai rispettivi canali PWM.

    void setup() {
        ...
    
        // Imposta i canali PWM
        ledcSetup(redChannel, freq, resolution);
        ledcSetup(greenChannel, freq, resolution);
        ledcSetup(blueChannel, freq, resolution);
    
        // Collega i pin ai corrispondenti canali PWM
        ledcAttachPin(redPin, redChannel);
        ledcAttachPin(greenPin, greenChannel);
        ledcAttachPin(bluePin, blueChannel);
    
    }
    
  • Modifica il metodo onWrite nella classe MyCharacteristicCallbacks. Questa funzione ascolta i dati provenienti dalla connessione Bluetooth. In base alla stringa ricevuta (come "led_off", "red", "green", ecc.), controlla il LED RGB.

    // Definisci i callback delle caratteristiche BLE
    class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
        void onWrite(BLECharacteristic *pCharacteristic) {
            std::string value = pCharacteristic->getValue();
            if (value == "led_off") {
                setColor(0, 0, 0); // spegni il LED RGB
                Serial.println("RGB LED turned off");
            } else if (value == "red") {
                setColor(255, 0, 0); // Rosso
                Serial.println("red");
            }
            else if (value == "green") {
                setColor(0, 255, 0); // verde
                Serial.println("green");
            }
            else if (value == "blue") {
                setColor(0, 0, 255); // blu
                Serial.println("blue");
            }
            else if (value == "yellow") {
                setColor(255, 150, 0); // giallo
                Serial.println("yellow");
            }
            else if (value == "purple") {
                setColor(80, 0, 80); // viola
                Serial.println("purple");
            }
        }
    };
    
  • Infine, viene aggiunta una funzione per impostare il colore del LED RGB.

    void setColor(int red, int green, int blue) {
        // Per i LED RGB ad anodo comune, usa 255 meno il valore del colore
        ledcWrite(redChannel, red);
        ledcWrite(greenChannel, green);
        ledcWrite(blueChannel, blue);
    }
    

In sintesi, questo script consente un modello di interazione di controllo remoto, dove l’ESP32 funziona come un server Bluetooth Low Energy (BLE).

Il client BLE connesso (come uno smartphone) può inviare comandi in forma di stringhe per cambiare il colore di un LED RGB. L’ESP32 fornisce anche un feedback al client inviando indietro la stringa ricevuta, permettendo al client di sapere quale operazione è stata eseguita.