Елочная гирлянда на ESP8266 (ESP32). Управление с приложения.

И вот наступает новый год, и чтобы украсить новогоднюю елку сделал новую версию гирлянды. По многочисленным просьбам, данная версия кода подходит как для ESP8266 (NodeMCU), так и для старшего брата ESP32. Код переписал полностью, так как предыдущая библиотека, которую я использовал для реализации новогодней смарт-гирлянды, не совместима с ESP32. Изменения затронули не только код для ESP, но также приложение. Поменял оформление, доработал код, что привело к более стабильной и быстрой работе приложения. А сейчас обо всем по порядку.

Функции гирлянды:

1. 15 световых эффектов (можно расширять).

2. Авторежим. Автоматически переключает режимы по кругу. Продолжительность одного режима настраивается в прошивке.

3. Настройка яркости.

4. Управление сенсорной кнопкой: переключение режимов и изменение яркости.

5. Выбор цвета звезды. Палитра из 6 цветов.

Паяем гирлянду.

Заказал спаянную гирлянду на адресных светодиодах WS2812, но как бывает, посылка застряла где-то в пути. И решил спаять гирлянду своими руками. Есть в наличии штучные светодиоды WS2812. Приступил я к пайке, сборке, поклейке обоев, покраске стен. Ой! Что-то я не о том.

старый шлейф от ПК

Так вот, взял я старый шлейф от ПК, который использовался для подключения флопиков и CD-рома к материнской плате, порезал его на лоскутки, вернее на проводники нужной длины, по 3 проводника в каждом, зачистил с обоих концов. Взял в руки паяльник и спаял светодиоды в одну гирлянду.

на проводники нужной длины, по 3 проводника в каждом

Дальше началось самое сложное, надо было сделать рассеиватель. В прошлой версии: Елочная смарт-гирлянда с управлением через мобильное приложение, приклеивал 2 куска акрила молочного цвета. Но этот вариант меня не устроил. В этом году сделал свою пресс-форму и порисовал каждый светодиод в термоклей.

Для изготовления пресс-формы разрезал шприц на 5 мл, благо шприцы остались от создания проекта: «Самодельный Лазерный гравёр с ЧПУ, в домашних условиях». Так вот, нарезал я корпус шприца на кольца одинаковой длины. С помощью напильника сделал углубления для укладки проводов, чтобы светодиод опускался ниже верхнего бортика пресс-формы.

Для изготовления пресс-формы разрезал шприц на 5 мл

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

брызнул на форму силиконовой смазкой

Установил светодиод в форму и, с помощью клеевого пистолета, нанес клей, сперва на заднюю сторону светодиода, потом с передней части заполнил форму до краев.

Установил светодиод в форму и, с помощью клеевого пистолета, нанес клей

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

нажал пальцами с двух сторон, чтобы клей выдавило

Затем приступаю к самому веселому этапу сборки. Начинаю выдавливать заготовку из формы.

Начинаю выдавливать заготовку из формы

Для этого использую поршень от шприца, сняв предварительно резиновый наконечник. Или как там его называют. И нехитрым движением светодиод в клее выталкивается из формы.

И так повторяем с каждым светодиодом.

Затем, берем кусачки, удаляем все неровности. У меня получилась вот такая кучка от 45 светодиодов.

Затем, берем кусачки, удаляем все неровности

Электроника для управления гирляндой на ESP8266 (ESP32).

В этом году использую ту же самую электронику для гирлянды. И ее укладываю в ту же коробку.

Электроника для управления гирляндой на ESP8266 Тут ничего нового.

Схема подключения новогодней гирлянды на ESP8266.

Схема подключения новогодней гирлянды на ESP8266.

Как видим, подключение осталось таким же. Но я добавил версию для ESP32. Для ESP32 все то же самое, но без сенсорной кнопки. Я её вырезал из программы. Это связано с тем, что с этим куском кода были небольшие проблемы, а времени разбираться уже нет. И поэтому версия новогодней гирлянды на ESP32 без возможности внешнего управления. Но в следующей версии гирлянды постараюсь все подправить и добавить еще новых функций и возможностей.

Схема подключения новогодней гирлянды на ESP32.

Схема подключения новогодней гирлянды на ESP32.

С подключением разобрались. Давайте посмотрим, что же изменилось в приложении.

Приложение для управления гирляндой на ESP8266 (ESP32).

Приложение для управления гирляндой на ESP8266 (ESP32)

В приложении, как и в предыдущей версии, можно переключать режимы. Включить авторежим, который автоматически переключает режимы через определённое время, указанное в прошивке.

Регулирование яркости изменил, и добавил вывод значения в процентах. А изменение скорости эффектов убрал. По мне, эта функция не нужна. А как вы считаете? Пишите ваше мнение в комментариях.

А сейчас самое главное изменение. Добавил возможность менять цвет звезды. Как это работает? Определенное количество светодиодов, с краю гирлянды, помещаем в звезду, у меня там 5 шт. И в приложении мы можем менять цвет звезды, не зависимо от эффекта, включённого для гирлянды. Мне уже задали знакомые и друзья вопрос: «А можно для звезды режимы мигания добавить?» Да, можно. Но я не успел это сделать. Будет в следующей версии.

http://cnc-tex.ru/news/10/samodelnyi-lazernyi-graver-s-chpu-v-domashnih.html

На экране настроек все урезал до минимума. Только оставил добавление IP устройства. Есть наработки по расширению функционала, но об этом вы можете узнать, подписавшись на меня на boosty.

А сейчас самое интересное, что же изменилось в скетче? Почему появилась возможность сделать универсальную прошивку ESP8266 (ESP32)?

Код (скетч) Новогодней гирлянды на ESP8266 (ESP32).

Как писал вначале статьи, библиотеку пришлось поменять, чтобы была возможность использовать прошивку и для ESP32. В библиотеке WS2812FX много эффектов, но она менее стабильна, чем библиотека FastLED. И при этом библиотека FastLED отлично работает с ESP32, но эффектов в комплекте нет. Пришлось поискать в интернете. Подправить несколько эффектов для работы с гирляндой.

Также в прошивке стало больше настроек и возможностей. И при этом прошивать стало проще.Скачать скетч можно внизу статьи в разделе "Файлы для скачивания".

Описание кода.

Сперва устанавливаем библиотеки необходимые для работы с Wi-Fi и работы с HTTP-запросами ESP8266 и ESP32.

#if defined(ESP8266)
#include <ESP8266WiFi.h>        //Содержится в пакете
#include <ESP8266WebServer.h>   //Содержится в пакете
#endif
#if defined(ESP32)
#include <WiFi.h>
#include <WebServer.h>
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#endif

Затем подключаем библиотеку "FastLED.h".

#include "FastLED.h"
FASTLED_USING_NAMESPACE

Делаем проверку версии библиотеки, и если она ниже, чем FastLED 3.1, то выводим предупреждение.

#if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
#warning "Requires FastLED 3.1 or later; check github for latest code."
#endif

Определяем, к каким пинам подключим кнопку и светодиоды.

#ifdef ESP8266
#define DATA_PIN    6     // пин для вывода на гирлянду
byte button_rejim = D2;  // пин подключения кнопки
#else
#define DATA_PIN    19   // пин для вывода на гирлянду
byte button_rejim = 21;  // пин подключения кнопки
#endif

Определяем тип светодиодов и цветовую схему.

#define LED_TYPE WS2812B        // What kind of strip are you using (APA102, WS2801 or WS2812B)?
#define COLOR_ORDER GRB         // It's GRB for WS2812B

Указываем сколько светодиодов в гирлянде и сколько в звезде. Если у вас нет звезды, то укажите значение переменной #define NUM_LEDS_STAR0.

#define NUM_LEDS    270          // кол-во светодиодов в гирлянде 33 
#define NUM_LEDS_STAR    15      // + 5 звезда

Указываем сколько времени длиться эффект в авторежиме, время указывается в секундах, по истечению которого эффект автоматически переключится на следующий.

#define TIMER_MS 60      // время длительности одного эффекта 
                          //в сек. для авто режима

Дальше настраиваем подключение к Wi-F сети. Расписывать подробно не буду, по данной теме у меня есть отличный урок: «Веб-сервер ESP32 (ESP8266) в среде Arduino IDE».

/* настройка wi-fi */
IPAddress apIP(192, 168, 4, 1);
// Web интерфейс для устройства
#ifdef ESP8266
// Web интерфейс для устройства
ESP8266WebServer HTTP(80);
#else
// Web интерфейс для устройства
WebServer HTTP(80);
#endif
// Определяем переменные wifi
String _ssid     = "Wi-Fi"; // Для хранения SSID
String _password = "12345678"; // Для хранения пароля сети
String _ssidAP = "ATGarland";   // SSID AP точки доступа
String _passwordAP = "012345678"; // пароль точки доступа

Следующие 2 массива нужны для определения количества эффектов и для вывода названия текущего эффекта в приложении.

String Effect(int n)  // Название эффектов выводиться в приложении
{
  char* effects[] = {
    "конфетти 2","Радуга с блестками","жонглирование 2","синелон 2",
    "конфетти","синелон", "радуга","жонглирование","синелон 3","bpm",
    "полное заполнение", "жонглирование 3", "мерцание","три цвета","матрица"  };
  return effects[n];
}
// массив функций эффектов
typedef void (*SimplePatternList[])();
 SimplePatternList gPatterns = { confetti2, rainbowWithGlitter, juggle2, sinelon2, 
    confetti, sinelon, rainbow, juggle, sinelon3, bpm, 
    cylonfill,juggle3,twinkle,three_sin,matrix };

Первый массив нужен для вывода названия эффекта в приложении.

Второй массив хранит название функции, которая выводит эффект на светодиодную ленту. Все функции эффектов хранятся во вкладке «led». Вы можете добавлять свои эффекты. Для этого добавляем функцию эффекта на вкладку «led» и в массивах, в первом, прописываете название, во втором, название функции. В обеих функциях добавлять нужно строго на одинаковую позицию массива. Если название добавили в конце массива, то и название функции нужно добавить так же в конце массива.

Дальше идут вспомогательные переменные, которые лучше не трогать.

// Не менять //
uint8_t gCurrentPatternNumber = 0; // порядковый номер эффекта
uint8_t gHue = 0; // "базовый цвет" используется многими эффектами
uint8_t i = 0; // счётчик индекса в массиве эффектов
uint8_t j = 0; // Счечик яркости
boolean auto_rejim = false; // авто режим выкл.
unsigned long last_change = 0; // предыдущее значениее времени
unsigned long now = 0; //текущее значениее времени
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
long prestroMillis = 0;        // время для кнопки, до
int interval = 4000;// Время изменения яркости после выход
byte flag = 0;      // состояние кнопки

В блоке setup() есть замечательная функция, которая позволяет задать параметры блока питания, от которого работает гирлянда, и не даст превысить указанный ток. Что приводит к стабильной работе гирлянды. Первое значение в функции - это напряжение, второе, ток в мА.

// Источник питания 1A 5v 
   FastLED.setMaxPowerInVoltsAndMilliamps(5,1000);

Еще хотелось бы отметить , что для ESP32 не работает сенсорная кнопка для переключения эффектов. Есть небольшой глюк, а времени исправить не было. Поэтому для данной отладочной платы функция внешнего переключения эффектов не добавлена.

#if defined(ESP8266)
      Led();
  #endif

Вы также можете отключить внешнюю кнопку и для ESP8266, для этого достаточно закомментировать строчку вызова функции Led().

Остальной код, без хороших знаний программирования, рекомендую не трогать.

Вывод по возможностям прошивки.

Как видим из описания кода, прошивка стала проще и более гибкой. Сейчас можно добавлять любое количество эффектов. Расчет количества происходит в автоматическом режиме. Также добавил отдельное управление звездой. Но при желании, звезду можно отключить, указав в прошивке #define NUM_LEDS_STAR0.

добавил отдельное управление звездой

Для увеличения стабильности, добавлена функция, ограничивающая ток гирлянды. В предыдущей версии самая большая проблема была в неправильном подборе источника питания.

Также добавил простой способ удаления внешней кнопки для переключения режимов.

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

Подведем итоги уходящего года.

Гирлянда получилась достаточно функциональная с гибкими настройками, но, к сожалению, это не все функции, которые я планировал сделать. Наработки уже есть, возможно, после Нового года выложу еще одну версию прошивки и приложения. Что я запланировал, вы можете узнать, подписавшись на меня в boosty. Там уже есть примеры доработки приложения, и код.

Понравился проект Елочная гирлянда на ESP8266 (ESP32). Управление с приложения? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Код (скетч) Новогодней гирлянды на ESP8266 (ESP32) Код (скетч) Новогодней гирлянды на ESP8266 (ESP32).zip9 Kb 367 Скачать
библиотека FastLED библиотека FastLED.zip348 Kb 227 Скачать
Приложение для управления гирляндой на ESP8266 (ESP32) Приложение для управления гирляндой на ESP8266 (ESP32).apk6296 Kb 305 Скачать

Комментарии

Ваше Имя*