Search Code

Návod pre ESP32 38/55 – Ovládanie RGB LED z vášho mobilného telefónu | SunFounderova ESP32 IoT výučbová súprava

Návod pre ESP32 38/55 – Ovládanie RGB LED z vášho mobilného telefónu | SunFounderova ESP32 IoT výučbová súprava

V tomto návode si ukážeme, ako ovládať RGB LED pomocou modulu ESP32 zo vzdelávacej súpravy SunFounder ESP32. Odosielaním príkazov z mobilného zariadenia môžete meniť farbu LED alebo ju úplne vypnúť. Tento projekt využíva možnosti ESP32, pričom využíva vstavané funkcie Wi-Fi a Bluetooth na plynulé pripojenie a ovládanie.

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB LED pozostáva z troch samostatných LED: červenej, zelenej a modrej, ktoré je možné miešať a vytvárať tak rôzne farby. V tomto projekte sa naučíte, ako správne zapojiť RGB LED a naprogramovať ESP32 tak, aby reagoval na príkazy cez Bluetooth. Návod vás tiež prevedie potrebnými časťami kódu na dosiahnutie tejto funkčnosti (vo videu o 02:15).

Vysvetlenie hardvéru

Hlavné komponenty tohto projektu zahŕňajú mikrokontrolér ESP32 a RGB LED. ESP32 je výkonný modul so vstavaným Wi-Fi a Bluetooth, vďaka čomu je ideálny pre IoT aplikácie. V tomto projekte bude fungovať ako server na prijímanie príkazov z mobilného zariadenia a podľa toho ovládať RGB LED.

RGB LED má štyri piny: jeden spoločný pin (buď anóda alebo katóda) a tri piny pre jednotlivé farby. Spoločný pin sa pripája buď k zdroju napájania alebo k zemi, zatiaľ čo ostatné tri piny sa pripájajú k GPIO pinom ESP32 cez rezistory na obmedzenie prúdu a ochranu LED. Toto zapojenie umožňuje presné ovládanie jasu každej farby, čím vytvára širokú škálu farieb.

Podrobnosti z datasheetu

Výrobca SunFounder
Označenie dielu RGB LED
Typ spoločného pinu Spoločná anóda / Spoločná katóda
Priepustné napätie (V) 2,0 - 3,2 V
Maximálny priepustný prúd (A) 20 mA
Typický prúd (A) 15 mA
Rozlíšenie farieb 8 bitov (0-255)
Puzdro Through-hole / SMD

 

  • Zabezpečte správne hodnoty rezistorov (zvyčajne 220 Ohm) na obmedzenie prúdu cez každý kanál LED.
  • Pred zapojením skontrolujte konfiguráciu spoločného pinu (anóda alebo katóda).
  • Použite PWM na stmievanie a miešanie farieb úpravou signálu odosielaného do každej LED.
  • Buďte opatrní pri zapájaní, aby ste predišli skratom; pripájajte jeden pin naraz.
  • Po zapojení otestujte každú farbu samostatne, aby ste potvrdili správne zapojenie.

Pokyny na zapojenie

ES32-38_RGB_LED-wiring

Na zapojenie RGB LED k ESP32 začnite umiestnením RGB LED na breadboard. Dlhší pin je spoločný pin, ktorý pripojíte buď k kladnému napätiu (pre spoločnú anódu) alebo k zemi (pre spoločnú katódu). Ak používate spoločnú anódu, pripojte dlhý pin k pinu 3.3V na ESP32. Pre spoločnú katódu ho pripojte k pinu GND.

Ďalej vezmite tri 220 Ohm rezistory a pripojte jeden koniec každého rezistora k príslušným RGB pinom LED. Druhé konce rezistorov pripojte k GPIO pinom ESP32: pripojte červený pin LED k GPIO 27, zelený pin k GPIO 26 a modrý pin k GPIO 25. Nakoniec sa uistite, že spoločný pin je správne pripojený podľa vašej konfigurácie (anóda alebo katóda).

Príklady kódu a vysvetlenie

Kód tohto projektu začína definovaním pinov pripojených k RGB LED. Nasledujúci výňatok ukazuje, ako sú piny deklarované:

const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

Tu sú redPin, greenPin a bluePin priradené konkrétnym číslam GPIO na ESP32 pre každý farebný kanál RGB LED.

Vo funkcii setup sa inicializuje Bluetooth a aplikujú sa nastavenia PWM. Tento výňatok demonštruje túto inicializáciu:

void setup() {
  Serial.begin(115200);      // Inicializácia sériového portu
  setupBLE();                // Inicializácia Bluetooth BLE

  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

Tento kód inicializuje sériovú komunikáciu a nastaví funkciu Bluetooth, pričom pripája piny RGB LED k PWM kanálom na ovládanie.

Nakoniec funkcia loop kontroluje prijaté Bluetooth správy a podľa toho upravuje farbu LED:

if (value == "red") {
  setColor(255, 0, 0); // Červená
  Serial.println("red");
}

V tejto časti, ak je prijatá hodnota "red", LED sa nastaví na plný červený jas pomocou funkcie setColor.

Pre úplné pochopenie kódu sa odporúča pozrieť si video návod, kde je celý kód načítaný pod článkom.

Demonštrácia / Čo očakávať

Keď je všetko zapojené a kód je nahraný, mali by ste byť schopní ovládať RGB LED z mobilného zariadenia cez Bluetooth. Odosielaním príkazov ako "red", "green", "blue" atď. uvidíte, ako LED mení farby podľa toho. Ak odošlete "LED_off", RGB LED sa vypne. Nezabudnite skontrolovať sériový monitor na prípadné ladeniace správy, aby ste potvrdili, že príkazy sú správne prijímané (vo videu o 10:45).

Časové značky videa

  • 00:00 Začiatok
  • 1:59 Čo je RGB LED?
  • 6:01 Vysvetlenie RGB farieb
  • 10:01 Dokumentačná stránka
  • 11:19 Vysvetlenie zapojenia
  • 13:34 Výber dosky ESP32 a COM portu v Arduino IDE
  • 15:15 Arduino kód
  • 18:02 Ukážka ovládania RGB LED pomocou telefónu

Images

ESP32_rgb_pin
ESP32_rgb_pin
ESP32_RGB_led_wires
ESP32_RGB_led_wires
ES32-38_RGB_LED-wiring
ES32-38_RGB_LED-wiring
839-ESP32 Tutorial 38/55- Arduino code for controlling RGB LED using bluetooth app
Language: C++
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"

// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;

// Define the Bluetooth device name
const char *bleName = "ESP32_Bluetooth";

// Define the received text and the time of the last message
String receivedText = "";
unsigned long lastMessageTime = 0;

// Define the UUIDs of the service and characteristics
#define SERVICE_UUID "8785d8b3-9d23-473b-aee5-3fabe2ba9583"
#define CHARACTERISTIC_UUID_RX "b2bcd13b-aab6-4660-92ae-40abf6941fce"
#define CHARACTERISTIC_UUID_TX "4219d86a-d701-4fd2-bd84-04db50f70fe2"

// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200);      // Initialize the serial port
  setupBLE();                // Initialize the Bluetooth BLE

  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

void loop() {
  // When the received text is not empty and the time since the last message is over 1 second
  // Send a notification and print the received text
  if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Received message: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
  }

  // Read data from the serial port and send it to BLE characteristic
  if (Serial.available() > 0) {
    String str = Serial.readStringUntil('\n');
    const char *newValue = str.c_str();
    pCharacteristic->setValue(newValue);
    pCharacteristic->notify();
  }
}

// Define the BLE server callbacks
class MyServerCallbacks : public BLEServerCallbacks {
  // Print the connection message when a client is connected
  void onConnect(BLEServer *pServer) {
    Serial.println("Connected");
  }
  // Print the disconnection message when a client is disconnected
  void onDisconnect(BLEServer *pServer) {
    Serial.println("Disconnected");
  }
};

// Define the BLE characteristic callbacks
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    std::string value = std::string(pCharacteristic->getValue().c_str());
    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");
    }
  }
};

// Initialize the Bluetooth BLE
void setupBLE() {
  BLEDevice::init(bleName);                        // Initialize the BLE device
  BLEServer *pServer = BLEDevice::createServer();  // Create the BLE server
  // Print the error message if the BLE server creation fails
  if (pServer == nullptr) {
    Serial.println("Error creating BLE server");
    return;
  }
  pServer->setCallbacks(new MyServerCallbacks());  // Set the BLE server callbacks

  // Create the BLE service
  BLEService *pService = pServer->createService(SERVICE_UUID);
  // Print the error message if the BLE service creation fails
  if (pService == nullptr) {
    Serial.println("Error creating BLE service");
    return;
  }
  // Create the BLE characteristic for sending notifications
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902());  // Add the descriptor
  // Create the BLE characteristic for receiving data
  BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks());  // Set the BLE characteristic callbacks
  pService->start();                                                 // Start the BLE service
  pServer->getAdvertising()->start();                                // Start advertising
  Serial.println("Waiting for a client connection...");              // Wait for a client connection
}

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

Resources & references

Files📁

No files available.