Код для поиска

ESP32 Урок 50/55 — Управление RGB-светодиодом из любой точки мира | Набор SunFounder для ESP32

ESP32 Урок 50/55 — Управление RGB-светодиодом из любой точки мира | Набор SunFounder для ESP32

В этом руководстве мы научимся управлять цветом RGB-светодиода с помощью микроконтроллера ESP32 через Wi-Fi, используя протокол MQTT и сервис Adafruit IO. Эта настройка позволяет изменять цвет RGB-светодиода из любой точки мира, что является практическим применением технологии Интернета вещей. Мы также рассмотрим, как использовать ползунки и палитру цветов для выбора нужного цвета.

esp32-50-RGB-led-mqtt-main

ESP32 — это мощный микроконтроллер со встроенными возможностями Wi-Fi и Bluetooth, что делает его идеальным для проектов IoT. В этой сборке мы подключим RGB-светодиод к ESP32 и будем управлять его цветом через MQTT-брокер, предоставляемый Adafruit. Руководство проведет вас через настройку оборудования, инструкции по подключению и код, необходимый для бесперебойной работы всего (в видео на 00:00).

Объяснение аппаратной части

esp32-50-RGB-led
esp32-50-RGB-led

Для этого проекта основными компонентами, которые мы будем использовать, являются микроконтроллер ESP32 и RGB-светодиод. ESP32 способен подключаться к сетям Wi-Fi, что позволяет ему взаимодействовать с сервисом Adafruit IO. RGB-светодиод содержит три отдельных светодиода (красный, зеленый и синий), которые можно смешивать для создания широкого диапазона цветов.

RGB-светодиод работает по принципу общего анода или общего катода, что означает, что анод (положительный) или катод (отрицательный) отдельных светодиодов должен быть правильно подключен для их работы. Каждым цветом можно управлять с помощью широтно-импульсной модуляции (ШИМ), которая регулирует яркость каждого светодиода путем изменения коэффициента заполнения.

ES32-38_RGB_LED-wiring

Детали из технического описания

Производитель SunFounder
Номер детали RGB-светодиод
Прямое напряжение (VF) 2,0–3,4 В
Прямой ток (IF) 20 мА
Пиковая длина волны (нм) Красный: 620, Зеленый: 525, Синий: 465
Корпус Стандартный 4-контактный
Примечания / варианты Доступны варианты с общим анодом или общим катодом

 

  • Используйте резисторы на 220 Ом для каждого цвета светодиода для ограничения тока.
  • Убедитесь в правильности подключения для конфигурации с общим анодом или катодом.
  • Проверьте источник питания ESP32, чтобы избежать сбоев питания.
  • Поддерживайте частоту ШИМ в допустимых пределах для плавных переходов цвета.
  • Убедитесь, что учетные данные Wi-Fi верны для подключения к сервису Adafruit IO.

Инструкции по подключению

ES32-38_RGB_LED-wiring

Чтобы подключить RGB-светодиод к ESP32, начните с определения контактов на RGB-светодиоде. Самый длинный контакт является общим. Для конфигурации с общим анодом подключите этот контакт к положительному напряжению питания (3,3 В). Остальные три контакта соответствуют красному, зеленому и синему светодиодам. Подключите красный контакт к GPIO 27, зеленый контакт к GPIO 26, а синий контакт к GPIO 25. Каждое из этих соединений должно быть выполнено через резистор на 220 Ом для ограничения тока, протекающего через светодиоды.

Затем подключите землю (GND) ESP32 к линии заземления вашей схемы. Убедитесь, что соединения надежны, чтобы предотвратить случайные обрывы. Если вы используете RGB-светодиод с общим катодом, подключите общий контакт к земле, а отдельные цветные контакты — к положительному питанию через резисторы. Дважды проверьте все соединения перед подачей питания на схему.

Примеры кода и пояснения

В коде Arduino мы начинаем с определения контактов для красного, зеленого и синего светодиодов с помощью идентификаторов redPin, greenPin и bluePin. Кроме того, мы определяем каналы ШИМ для каждого цвета с помощью redChannel, greenChannel и blueChannel. Частота ШИМ установлена на 5000 Гц с разрешением 8 бит.

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

const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;

В функции setup() мы инициализируем каналы ШИМ и прикрепляем соответствующие контакты. Мы также подключаемся к сети Wi-Fi, используя заданные учетные данные, и настраиваем MQTT-клиент для связи с Adafruit IO.

void setup() {
  ledcSetup(redChannel, freq, resolution);
  ledcAttachPin(redPin, redChannel);
  // Подключение к Wi-Fi
  WiFi.begin(WLAN_SSID, WLAN_PASS);
}

Основной цикл проверяет MQTT-соединение и обрабатывает входящие сообщения. Он также выводит текущие значения RGB в последовательный монитор. Цвет светодиода обновляется на основе значений, полученных через MQTT-подписки.

void loop() {
  MQTT_connect();
  mqtt.processPackets(500);
  setColor();
}

Для получения более подробной информации о полном коде, пожалуйста, обратитесь к полному коду, загруженному ниже статьи.

Демонстрация / Что ожидать

Как только все настроено и код загружен, вы должны увидеть, как RGB-светодиод реагирует на изменения цвета, вносимые через панель управления Adafruit IO. Когда вы регулируете ползунки для красного, зеленого и синего цветов, светодиод должен соответствующим образом менять свой цвет. Если у вас возникнут какие-либо проблемы, убедитесь, что Wi-Fi-соединение стабильно, а имена тем MQTT совпадают с теми, что определены в коде (в видео на 17:30).

К распространенным ошибкам относятся неправильное подключение, несовпадение имен тем и забытые правильные учетные данные Wi-Fi. Если светодиод не загорается, перепроверьте подключение резисторов и убедитесь, что ESP32 правильно запитан.

Таймкоды видео

  • 00:00 Начало
  • 2:23 Введение в проект
  • 4:43 Что такое MQTT
  • 7:55 Настройка Adafruit IO
  • 14:09 Объяснение подключения
  • 16:07 Объяснение кода
  • 27:03 Выбор платы ESP32 и COM-порта в Arduino IDE
  • 29:12 Демонстрация проекта
  • 31:25 Что такое RGB-светодиод?
  • 35:26 RGB-цвет

Изображения

ESP32_rgb_pin
ESP32_rgb_pin
ESP32_RGB_led_wires
ESP32_RGB_led_wires
ES32-38_RGB_LED-wiring
ES32-38_RGB_LED-wiring
esp32-50-RGB-led
esp32-50-RGB-led
esp32-50-RGB-led-mqtt-main
esp32-50-RGB-led-mqtt-main
852-ESP32 Tutorial 50/55- Arduino code to control RGB LED using MQTT service of Adafruit
Язык: C++
/*
 * Это схема Arduino для ESP32 для управления RGB светодиодом с использованием MQTT сервиса Adafruit
 * видеоинструкция https://youtu.be/-9q1GfGsnr0
 * 📚⬇️ Страница загрузки и ресурсов https://robojax.com/RJT672
 * Автор: Ахмад Шамширий
 * 18 февраля 2024 года
 * 
 * Библиотека Adafruit MQTT пример ESP32 Adafruit IO SSL/TLS
 * 
 * /// источник: https://www.electronicwings.com/esp32/esp32-mqtt-client
 * /
 * // Определите контакты RGB светодиода
 */
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

 // Определите каналы ШИМ.
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;

 // Определите частоту_PWM и разрешение.
const int freq = 5000;
const int resolution = 8;
int colorR, colorG, colorB;

#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/*
 * Точка доступа WiFi *********************************/
 * 
 * #define WLAN_SSID "Book"
 * #define WLAN_PASS "888-888"
 * 
 * /************************* Настройка Adafruit.io
 */

#define AIO_SERVER "io.adafruit.com"

 // Использование порта 8883 для MQTTS
#define AIO_SERVERPORT 8883

 // Настройка аккаунта Adafruit IO
 // (для получения этих значений посетите https://io.adafruit.com и нажмите на Активный ключ)
 // #define AIO_USERNAME "ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ_ADAFRUIT_IO"
 // #define AIO_KEY "ВАШ_КЛЮЧ_ADAFRUIT_IO"

#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_NBQQ75Rn7liRNcRn5uGUBMsBYmjD"

/*
 * Глобальное состояние (это изменять не нужно!) ******************/
 * 
 * // WiFiFlientSecure для поддержки SSL/TLS
 * WiFiClientSecure клиент;
 * 
 * // Настройка класса клиента MQTT, передавая клиент WiFi и данные для входа на сервер MQTT.
 * Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
 * 
 * // Корневой CA io.adafruit.com
 * const char* adafruitio_root_ca = \
 *  "-----BEGIN CERTIFICATE-----\n"
 *  "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
 *  "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
 *  "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
 *  "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
 *  "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
 *  "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
 *  "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
 *  "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
 *  "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
 *  "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
 *  "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
 *  "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
 *  "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
 *  "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
 *  "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
 *  "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
 *  "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
 *  "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
 *  "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
 *  "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
 *  "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
 *  "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
 *  "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
 *  "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
 *  "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
 *  "-----END CERTIFICATE-----\n";
 * 
 * /****************************** Ленты
 */

 // Настройте поток, названный 'test', для публикации и 'test2' для подписки.
 // Обратите внимание, что пути MQTT для AIO имеют следующий формат: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe COLOR_R = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.red");
Adafruit_MQTT_Subscribe COLOR_G = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.green");
Adafruit_MQTT_Subscribe COLOR_B = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.blue");
Adafruit_MQTT_Subscribe COLOR_RGB = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/color-picker");


Вещи, которые могут вам понадобиться

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Технический паспорт (pdf)