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.

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

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
#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);
}
Common Course Links
Common Course Files
Resources & references
-
DocumentationESP32 Tutorial 38/55- SunFounder doc page for Bluetooth RGB LEDdocs.sunfounder.com
Files📁
No files available.