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

ESP32 Урок 54/55 - Установка цвета светодиодной ленты WS2812 через Wi-Fi | Обучающий набор ESP32 IoT от SunFounder

ESP32 Урок 54/55 - Установка цвета светодиодной ленты WS2812 через Wi-Fi | Обучающий набор ESP32 IoT от SunFounder

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

ESP32-54-movile-screen-main

Микроконтроллер ESP32 оснащен как Wi-Fi, так и Bluetooth, что делает его универсальным выбором для приложений Интернета вещей. В этом проекте мы сосредоточимся на функциональности Wi-Fi для управления светодиодной лентой. Пользователи смогут динамически выбирать цвета, создавая визуально привлекательный опыт. Для получения дополнительной информации об этом проекте обязательно посмотрите видео (на видео в 00:00).

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

Основными компонентами этого проекта являются микроконтроллер ESP32 и светодиодная лента WS2812. ESP32 — это мощный микроконтроллер со встроенными возможностями Wi-Fi, обеспечивающий беспроводную связь и управление.

Светодиодная лента WS2812 состоит из отдельных адресуемых RGB-светодиодов, что позволяет устанавливать цвет каждого светодиода независимо. Каждый светодиод содержит схему управления и RGB-светодиод в одном корпусе, что упрощает подключение и управление несколькими светодиодами.

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

Производитель Worldsemi
Номер детали WS2812B
Логическое/IO напряжение 3,5–5,3 В
Напряжение питания 5 В
Выходной ток (на канал) 20 мА
Пиковый ток (на канал) 60 мА
Рекомендуемая частота ШИМ 400 Гц
Входные логические пороги 0,3 × VDD (низкий), 0,7 × VDD (высокий)
Падение напряжения / RDS(on) / насыщение 0,5 В
Тепловые пределы –40 до +80 °C
Корпус 5050 SMD
Примечания / варианты Доступен в различных длинах и конфигурациях.

 

  • Обеспечьте правильное питание, чтобы не повредить светодиоды.
  • Используйте общий провод заземления между ESP32 и светодиодной лентой.
  • Держите линии данных короткими, чтобы предотвратить ухудшение сигнала.
  • Рассмотрите возможность добавления конденсатора (1000 мкФ) на источник питания для стабильности.
  • Используйте резистор (470 Ом) на линии данных для целостности сигнала.

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

ESP32-12-WS2812-wiring

Чтобы подключить ESP32 к светодиодной ленте WS2812, соедините компоненты следующим образом: сначала подключите контакт 5 В светодиодной ленты к выходу 5 В ESP32. Затем подключите контакт заземления (GND) светодиодной ленты к контакту GND на ESP32. Наконец, подключите контакт данных светодиодной ленты (обычно обозначается как DI или Data In) к контакту GPIO 13 на ESP32. Убедитесь, что все соединения надежны, чтобы обеспечить правильную работу.

В видео кратко упоминаются альтернативные методы подключения, но описанная здесь настройка является рекомендуемой конфигурацией для оптимальной производительности (на видео в 03:00).

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

Код начинается с включения необходимых библиотек для управления светодиодной лентой WS2812 и настройки веб-сервера. Контакт светодиода определяется как LED_PIN, а количество светодиодов в ленте задается с помощью NUM_LEDS.

#define LED_PIN 13 // NeoPixel светодиодная лента
#define NUM_LEDS 8 // Количество светодиодов
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); 

Этот фрагмент инициализирует библиотеку NeoPixel и настраивает светодиодную ленту на указанном контакте. Объект Adafruit_NeoPixel, strip, — это то, что вы будете использовать для управления цветами светодиодов.

Далее код инициализирует Wi-Fi и настраивает веб-сервер для обработки входящих запросов. Определяются SSID и пароль для сети, что позволяет ESP32 подключиться к Wi-Fi.

const char *ssid = "your_SSID";
const char *password = "your_PASSWORD";
WebServer server(80);

В этом фрагменте замените your_SSID и your_PASSWORD на ваши реальные учетные данные Wi-Fi. Это подключение позволяет ESP32 взаимодействовать с устройствами в той же сети, обеспечивая удаленное управление светодиодной лентой.

Основная функция для изменения цвета светодиода — setColor(), которая перебирает каждый светодиод и устанавливает его цвет на основе выбранных значений RGB.

void setColor() {
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // Установить цвет i-го светодиода
    strip.show(); // Обновить светодиодную ленту с новыми цветами
    delay(10); // Подождать 10 миллисекунд
  }
}

Эта функция гарантирует, что каждый светодиод в ленте обновляется выбранным цветом. Задержка позволяет светодиодам плавно менять цвет. Когда вы взаимодействуете с веб-интерфейсом, эта функция будет вызываться для отражения ваших цветовых выборов.

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

ESP32-54-movile-screen-1
ESP32-54-movile-screen-t-2

Когда настройка завершена, вы должны иметь возможность получить доступ к веб-интерфейсу через IP-адрес ESP32. Вы увидите выбор цвета, который позволяет выбрать любой цвет, который затем будет отправлен на светодиодную ленту. Если ESP32 потеряет соединение с Wi-Fi, лента мигнет предупреждающим цветом, указывая на проблему (на видео в 14:30).

Распространенные ошибки включают неправильное подключение, которое может привести к тому, что светодиоды не загорятся, или использование неверных комбинаций SSID/пароля, которые мешают ESP32 подключиться к сети. Всегда перепроверяйте свои соединения и учетные данные.

Временные метки видео

  • 00:00 Начало
  • 2:01 Введение в проект
  • 3:09 Документация
  • 3:47 Объяснение RGB-цвета
  • 7:47 Подключение
  • 8:40 Объяснение кода Arduino для WS2812 с WIFI
  • 19:35 Выбор платы ESP32 и COM-порта в Arduino IDE
  • 21:17 Демонстрация управления светодиодной лентой через Wi-Fi

Изображения

ESP32-12-WS2812-wiring
ESP32-12-WS2812-wiring
ESP32-54-movile-screen-1
ESP32-54-movile-screen-1
ESP32-54-movile-screen-t-2
ESP32-54-movile-screen-t-2
ESP32-54-movile-screen-main
ESP32-54-movile-screen-main
855-ESP32 Tutorial 54/55- Arduino code Set WS2812 LED Strip Color over Wifi
Язык: C++
/*
 * Управление RGB LED по Wi-Fi с использованием ESP32
 * 
 * Полные видеоинструкции https://youtu.be/J_UFHk_T9aE  
 * 📚⬇️ Скачайте и получите страницу ресурсов https://robojax.com/RJT687  
 * Автор: Ахмад Шамшир на 18 декабря 2023 года
 * 
 * Смотрите видеоинструкцию к этому видео:
 * 
 * Я объединил библиотеку DHT от Adafruit с WebServer ESP8266, оба ссылки  
 * Библиотека DHT от Adafruit на GitHub: https://github.com/adafruit/DHT-sensor-library  
 * и  
 * ESP8266 на GitHub: https://github.com/esp8266/Arduino  
 * 
 * Авторские права (c) 2015, Majenko Technologies  
 * Все права защищены.  
 * 
 * Перераспределение и использование в исходной и двоичной формах, с модификацией или без, разрешены при соблюдении следующих условий:
 * 
 * Перераспределение исходного кода должно сохранять вышеуказанное уведомление о авторских правах, этот  
 * список условий и следующий отказ от ответственности.  
 * 
 * Перераспределение в двоичной форме должно воспроизводить вышеуказанное уведомление о авторских правах, этот  
 * список условий и следующий отказ от ответственности в документации и/или  
 * других материалах, предоставленных с распространением.  
 * 
 * Ни название Majenko Technologies, ни имена ее  
 * участников не могут использоваться для одобрения или продвижения продуктов, производных от  
 * этого программного обеспечения, без специального предварительного письменного разрешения.  
 * 
 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ ДЕРЖАТЕЛЯМИ АВТОРСКИХ ПРАВ И УЧАСТНИКАМИ "КАК ЕСТЬ" И  
 * ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫЕ  
 * ГАРАНТИИ ТОРГОВОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ ОТКЛОНЯЮТСЯ. В НИКАКОМ СЛУЧАЕ НИ ДЕРЖАТЕЛЬ АВТОРСКИХ ПРАВ, НИ УЧАСТНИКИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА  
 * ЛЮБЫЕ ПРЯМЫЕ, НЕПРЯМЫЕ, СЛУЧАЙНЫЕ, ОСОБЫЕ, ПРИМЕРНЫЕ ИЛИ ПОСЛЕДУЮЩИЕ УБЫТКИ  
 * (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ЗАКУПКОЙ ЗАМЕЩЕНИЯ ТОВАРОВ И УСЛУГ;  
 * ПОТЕРЯ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ; ИЛИ ПРЕРВАНИЯ БИЗНЕСА) УЧАСТКИ ВСЕХ УРОВНЕЙ, И ПО  
 * ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, БУДЬ У НАС ГРАЖДАНСКАЯ, СТРОГАЯ ОТВЕТСТВЕННОСТЬ ИЛИ ДЕЛИКТ  
 * (ВКЛЮЧАЯ НЕОБЯЗАТЕЛЬНОСТЬ ИЛИ ИНЫЕ) ВОЗНИКАЮЩИЕ В ЛЮБОЙ ФОРМЕ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО  
 * ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛИ УВЕДОМЛЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.
 */
#include <Adafruit_NeoPixel.h> // Включите библиотеку Adafruit NeoPixel.

#define LED_PIN 13 // Неоновая светодиодная лента
#define NUM_LEDS 8 // Количество светодиодов
 // Создайте экземпляр класса Adafruit_NeoPixel
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);


 // начальный цвет светодиодной ленты
int valueR = 178; // от 0 до 255 для Красного
int valueG = 27; // от 0 до 255 для Зелёного
int valueB = 84; // от 0 до 255 для синего

bool showSerialData = false;
String theColorR, theColorG, theColorB;
String theColor ="ff0000";

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>

const char *ssid = "dars";
const char *password = "hhhhhhhhhhh";

WebServer server(80);

void showColorPicker() {
  String page = "<!DOCTYPE html>\n";
  page +="<html>\n";
  page +="<body>\n";
  page +="<div style=\"zoom: 300%;\">\n";
  page +="<h2>Robojax RGB Color picker</h2>\n";
  page +="<p id=\"result\"></p>\n";
  page +="<form action=\"/color\">\n";
  page +="  <label for=\"favcolor\">Select your favorite color:</label>\n";
  page +="  <input type=\"color\" id=\"favcolor\" name=\"favcolor\" value=\"#";
  page += theColor;
  page +="\"><br><br>\n";
  page +="   <input type=\"submit\" value=\"Set Color\" />\n";
  page +="</form> \n</div>\n";
  page +="</body>\n";
  page +="</html>\n";

  server.send(200,  "text/html", page);


}

 // from https://stackoverflow.com/questions/44683071/convert-string-as-hex-to-hexadecimal
uint64_t StrToHex(const char* str)
{
  return (uint64_t) strtoull(str, 0, 16);
}

void getColor(){

 // server.send(200, "text/plain", message);

  if(server.argName(0) == "favcolor")
  {
    String newColor = String(server.arg(0)); // получите аргумент GET 0 и преобразуйте его в строку
    theColor = newColor.substring(1); // уберите символ # в начале цвета, например #B2a48d
    theColorR = newColor.substring(1, 3); // извлечь B2 из #B2a48d, например
    theColorG = newColor.substring(3, 5); // извлечь a4 из #B2a48d, например
    theColorB = newColor.substring(5, 7); // извлечь 8d из #B2a48d, например

    valueR = StrToHex(theColorR.c_str()); // преобразовать строку в HEX для R
    valueG = StrToHex(theColorG.c_str()); // преобразовать строку в шестнадцатеричный формат для G
    valueB = StrToHex(theColorB.c_str()); // преобразовать строку в HEX для B
    if(showSerialData)
    {
      Serial.print("valueR: ");
      Serial.println(valueR);
      Serial.print("valueG: ");
      Serial.println(valueG);
      Serial.print("valueB: ");
      Serial.println(valueB );
    }

  }

  showColorPicker(); // убедитесь, что палитра цветов отображается
 // server.send(200, "text/plain", message);

}


void setColor()
{
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, valueR, valueG, valueB); // Установите цвет i-го светодиода на красный.
    strip.show(); // Обновите светодиодную ленту новыми цветами.
    delay(10); // Подождите 100 миллисекунд.
  }
}

void noConnection()
{
   for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 255, 45, 0); // Установите цвет i-го светодиода на красный.
    strip.show(); // Обновите светодиодную ленту новыми цветами.
    delay(50); // Подождите 100 миллисекунд.
  }

  delay(200);
   for (int i = NUM_LEDS-1; i >=0; i--) {
    strip.setPixelColor(i, 0, 255, 180); // Установите цвет i-го светодиода на красный.
    strip.show(); // Обновите светодиодную ленту новыми цветами.
    delay(50); // Подождите 100 миллисекунд.
  }
}

void handleNotFound() {
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.send(404, "text/plain", message);

}

void setup_wifi() {
  delay(10);
 // Мы начинаем с подключения к WiFi сети.
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

 // Ожидание соединения
  while (WiFi.status() != WL_CONNECTED) {
    noConnection();
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Open: http: // ");
  Serial.print(WiFi.localIP());
  Serial.println(" to read temperature");

  if (MDNS.begin("robojaxRGB")) {
    Serial.println("MDNS responder started");
  }

}

void setup(void) {

  Serial.begin(115200);

  strip.begin(); // Инициализируйте ленту NeoPixel
  strip.show(); // Установите начальный цвет на черный.

  setup_wifi();

  server.on("/", showColorPicker); // показать главную страницу с выбором цвета
 // server.on("/color", setColor);//изменяет цвет на WS2812 RGB светодиоде


  server.on("/color", HTTP_GET, getColor);



  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
 // Robojax.com
    while (WiFi.status() != WL_CONNECTED) {
      setup_wifi();
    }

  server.handleClient();
 // showColorPicker();
  setColor();
  delay(300); // измените это на большее значение (1000 или больше), если вам не нужно часто читать
 // Код Robojax.com для ESP32 и DHT11 DHT22
}


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

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

Файлы📁

Нет доступных файлов.