Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

Lesson 45: Bluetooth-gesteuerte RGB-LED

Dieses Projekt ist eine Erweiterung eines vorherigen Projekts (Lektion 44: Bluetooth), das RGB-LED-Konfigurationen und benutzerdefinierte Befehle wie „led_off“, „red“, „green“ usw. hinzufügt. Diese Befehle ermöglichen es, die RGB-LED durch das Senden von Befehlen von einem mobilen Gerät mit LightBlue zu steuern.

Benötigte Komponenten

In diesem Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Sie können sie auch einzeln über die unten stehenden Links kaufen.

COMPONENT INTRODUCTION

PURCHASE LINK

ESP32 & Development Board

BUY

Steckbrett

KAUFEN

RGB LED-Modul

-

Betriebsschritte

  1. Bauen Sie die Schaltung auf.

    ../_images/Lesson_28_RGB_LED_Module_esp32_bb.png
  2. Öffnen Sie die Datei Lesson_45_Bluetooth_RGB.ino, die sich im Verzeichnis universal-maker-sensor-kit\esp32\Lesson_45_Bluetooth_RGB befindet, oder kopieren Sie den Code in die Arduino IDE.

  3. Um UUID-Konflikte zu vermeiden, wird empfohlen, drei neue UUIDs zufällig zu generieren, indem Sie den Online-UUID-Generator verwenden, der von der Bluetooth SIG bereitgestellt wird, und diese in den folgenden Codezeilen ausfüllen.

    Bemerkung

    Wenn Sie bereits drei neue UUIDs im Projekt Lektion 44: Bluetooth generiert haben, können Sie diese weiterverwenden.

    #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. Wählen Sie das richtige Board und den richtigen Port aus und klicken Sie dann auf die Schaltfläche Upload.

  5. Nachdem der Code erfolgreich hochgeladen wurde, schalten Sie Bluetooth auf Ihrem mobilen Gerät ein und öffnen Sie die LightBlue-App.

    ../_images/bluetooth_open.png
  6. Suchen Sie auf der Scan-Seite nach ESP32-Bluetooth und klicken Sie auf CONNECT. Wenn Sie es nicht sehen, versuchen Sie die Seite ein paar Mal zu aktualisieren. Wenn „Connected to device!“ erscheint, ist die Bluetooth-Verbindung erfolgreich. Scrollen Sie nach unten, um die drei im Code festgelegten UUIDs zu sehen.

  7. Tippen Sie auf die Send UUID, stellen Sie das Datenformat auf „UTF-8 String“ ein. Jetzt können Sie diese Befehle schreiben: „led_off“, „red“, „green“, „blue“, „yellow“ und „purple“, um zu sehen, ob die RGB-LED auf diese Anweisungen reagiert.

    ../_images/bluetooth_send_rgb.png

Wie es funktioniert

Dieser Code ist eine Erweiterung eines vorherigen Projekts (Lektion 44: Bluetooth), der RGB-LED-Konfigurationen und benutzerdefinierte Befehle wie „led_off“, „red“, „green“ usw. hinzufügt. Diese Befehle ermöglichen es, die RGB-LED durch das Senden von Befehlen von einem mobilen Gerät mit LightBlue zu steuern.

Lassen Sie uns den Code Schritt für Schritt aufschlüsseln:

  • Fügen Sie neue globale Variablen für die RGB-LED-Pins, PWM-Kanäle, Frequenz und Auflösung hinzu.

    ...
    
    // Define RGB LED pins
    const int redPin = 27;
    const int greenPin = 26;
    const int bluePin = 25;
    
    // Define PWM channels
    const int redChannel = 0;
    const int greenChannel = 1;
    const int blueChannel = 2;
    
    ...
    
  • Innerhalb der setup()-Funktion werden die PWM-Kanäle mit der vordefinierten Frequenz und Auflösung initialisiert. Die RGB-LED-Pins werden dann ihren jeweiligen PWM-Kanälen zugewiesen.

    void setup() {
        ...
    
        // Set up PWM channels
        ledcSetup(redChannel, freq, resolution);
        ledcSetup(greenChannel, freq, resolution);
        ledcSetup(blueChannel, freq, resolution);
    
        // Attach pins to corresponding PWM channels
        ledcAttachPin(redPin, redChannel);
        ledcAttachPin(greenPin, greenChannel);
        ledcAttachPin(bluePin, blueChannel);
    
    }
    
  • Modifizieren Sie die Methode onWrite in der Klasse MyCharacteristicCallbacks. Diese Funktion hört auf Daten, die über die Bluetooth-Verbindung empfangen werden. Basierend auf dem empfangenen String (wie "led_off", "red", "green" usw.) steuert sie die RGB-LED.

    // Define the BLE characteristic callbacks
    class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
        void onWrite(BLECharacteristic *pCharacteristic) {
            std::string value = pCharacteristic->getValue();
            if (value == "led_off") {
                setColor(0, 0, 0); // turn the RGB LED off
                Serial.println("RGB LED turned off");
            } else if (value == "red") {
                setColor(255, 0, 0); // Red
                Serial.println("red");
            }
            else if (value == "green") {
                setColor(0, 255, 0); // green
                Serial.println("green");
            }
            else if (value == "blue") {
                setColor(0, 0, 255); // blue
                Serial.println("blue");
            }
            else if (value == "yellow") {
                setColor(255, 150, 0); // yellow
                Serial.println("yellow");
            }
            else if (value == "purple") {
                setColor(80, 0, 80); // purple
                Serial.println("purple");
            }
        }
    };
    
  • Schließlich wird eine Funktion hinzugefügt, um die Farbe der RGB-LED festzulegen.

    void setColor(int red, int green, int blue) {
        // For common-anode RGB LEDs, use 255 minus the color value
        ledcWrite(redChannel, red);
        ledcWrite(greenChannel, green);
        ledcWrite(blueChannel, blue);
    }
    

Zusammengefasst ermöglicht dieses Skript ein Fernsteuerungsmodell, bei dem der ESP32 als Bluetooth Low Energy (BLE) Server fungiert.

Der verbundene BLE-Client (z. B. ein Smartphone) kann String-Befehle senden, um die Farbe einer RGB-LED zu ändern. Der ESP32 gibt auch Feedback an den Client zurück, indem er den empfangenen String zurücksendet, sodass der Client weiß, welche Operation ausgeführt wurde.