ESP32 Урок 38/55 — Управление RGB-светодиодом с вашего мобильного телефона | Обучающий набор SunFounder для ESP32 IoT
В этом руководстве мы рассмотрим, как управлять RGB-светодиодом с помощью модуля ESP32 из учебного набора SunFounder ESP32. Отправляя команды с мобильного устройства, вы можете изменять цвет светодиода или полностью выключать его. Этот проект использует возможности ESP32, задействуя встроенные функции Wi-Fi и Bluetooth для бесшовного подключения и управления.

RGB-светодиод состоит из трех отдельных светодиодов: красного, зеленого и синего, которые можно смешивать для создания различных цветов. В этом проекте вы узнаете, как правильно подключить RGB-светодиод и запрограммировать ESP32 для реагирования на Bluetooth-команды. Руководство также проведет вас через необходимые компоненты кода для достижения этой функциональности (в видео на 02:15).
Объяснение аппаратного обеспечения
Основные компоненты для этого проекта включают микроконтроллер ESP32 и RGB-светодиод. ESP32 — это мощный модуль со встроенными Wi-Fi и Bluetooth, что делает его идеальным для IoT-приложений. В этом проекте он будет действовать как сервер для приема команд с мобильного устройства и соответствующего управления RGB-светодиодом.
RGB-светодиод имеет четыре вывода: один общий вывод (либо анод, либо катод) и три вывода для отдельных цветов. Общий вывод подключается либо к источнику питания, либо к земле, а остальные три вывода подключаются к GPIO-выводам ESP32 через резисторы для ограничения тока и защиты светодиодов. Эта схема позволяет точно контролировать яркость каждого цвета, создавая широкий диапазон цветов.
Детали из технического описания
| Производитель | SunFounder |
|---|---|
| Номер детали | RGB LED |
| Тип общего вывода | Общий анод / Общий катод |
| Прямое напряжение (В) | 2.0 - 3.2 В |
| Максимальный прямой ток (А) | 20 мА |
| Типичный ток (А) | 15 мА |
| Цветовое разрешение | 8 бит (0-255) |
| Корпус | Выводной / SMD |
- Убедитесь в правильных значениях резисторов (обычно 220 Ом) для ограничения тока через каждый канал светодиода.
- Проверьте конфигурацию общего вывода (анод или катод) перед подключением.
- Используйте ШИМ для регулировки яркости и смешивания цветов, изменяя сигнал, отправляемый на каждый светодиод.
- Будьте осторожны с подключением, чтобы избежать коротких замыканий; подключайте по одному выводу за раз.
- После настройки проверьте каждый цвет отдельно, чтобы подтвердить правильность подключения.
Инструкции по подключению

Чтобы подключить RGB-светодиод к ESP32, начните с размещения RGB-светодиода на макетной плате. Более длинный вывод является общим, который вы подключите либо к положительному напряжению (для общего анода), либо к земле (для общего катода). Если вы используете общий анод, подключите длинный вывод к контакту 3.3V на ESP32. Для общего катода подключите его к контакту GND.
Затем возьмите три резистора по 220 Ом и подключите один конец каждого резистора к соответствующим RGB-выводам светодиода. Подключите другие концы резисторов к GPIO-выводам ESP32: подключите красный вывод светодиода к GPIO 27, зеленый вывод к GPIO 26, а синий вывод к GPIO 25. Наконец, убедитесь, что общий вывод правильно подключен в зависимости от вашей конфигурации (анод или катод).
Примеры кода и пояснения
Код для этого проекта начинается с определения выводов, подключенных к RGB-светодиоду. Следующий фрагмент показывает, как объявляются выводы:
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
Здесь redPin, greenPin и bluePin назначаются конкретным номерам GPIO на ESP32 для каждого цветового канала RGB-светодиода.
В функции setup инициализируется Bluetooth и применяются настройки ШИМ. Этот фрагмент демонстрирует эту инициализацию:
void setup() {
Serial.begin(115200); // Инициализация последовательного порта
setupBLE(); // Инициализация Bluetooth BLE
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
Этот код инициализирует последовательную связь и настраивает функциональность Bluetooth, одновременно подключая выводы RGB-светодиода к ШИМ-каналам для управления.
Наконец, функция loop проверяет полученные Bluetooth-сообщения и соответствующим образом изменяет цвет светодиода:
if (value == "red") {
setColor(255, 0, 0); // Красный
Serial.println("red");
}
В этом разделе, если полученное значение — "red", светодиод будет установлен на полную красную яркость с помощью функции setColor.
Для полного понимания кода рекомендуется посмотреть видеоурок, где полный код загружен ниже статьи.
Демонстрация / Что ожидать
После того как все подключено и код загружен, вы сможете управлять RGB-светодиодом с мобильного устройства через Bluetooth. Отправляя команды, такие как "red", "green", "blue" и т.д., вы увидите, как светодиод меняет цвет соответствующим образом. Если вы отправите "LED_off", RGB-светодиод выключится. Убедитесь, что вы проверили последовательный монитор на наличие отладочных сообщений, чтобы подтвердить, что команды принимаются правильно (в видео на 10:45).
Временные метки видео
- 00:00 Начало
- 1:59 Что такое RGB LED?
- 6:01 Объяснение RGB-цвета
- 10:01 Страница документации
- 11:19 Объяснение подключения
- 13:34 Выбор платы ESP32 и COM-порта в Arduino IDE
- 15:15 Код Arduino
- 18:02 Демонстрация управления RGB LED с помощью телефона
#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
Ресурсы и ссылки
-
ДокументацияESP32 Учебник 38/55 - страница документа SunFounder для Bluetooth RGB LEDdocs.sunfounder.com
Файлы📁
Нет доступных файлов.