Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor

.Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor

В прошлом году я делал новогоднюю подсветку: Подсветка на Arduino и ws2812 - На новый год. Arduino UNO управляла данной подсветкой, информация выводилась на ЖК-дисплей 1602. В этом году я решил сделать гирлянду и подсветку под управлением NodeMCU. Это позволило организовать беспроводное управления с выводом информации на смартфон. Для управления можно сделать веб-интерфейс . Но на мой взгляд это не очень удачное решение для управления новогодней подсветкой на NodeMCU и адресных светодиодах ws2812. Так как скорость отклика и время загрузки страниц достаточно большое и в связи с чем возникают небольшие провисание.

Обновленная версия гирлянды тут:

Версия 2020 с поддержкой ESP32.

Елочная смарт-гирлянда с управлением через мобильное приложение.

Новый

год пора признака, салатов и торжества.

Но что делать если ваш холодильник

приболел в самый неподходящий момент.

Найти

запчасти либхер на этом сайте.


гирлянда из 33 ws2812 светодиодов

приложение в App Inventor для управления умной новогодней гирляндой

Поэтому я решил сделать простое приложение в App Inventor для управления умной новогодней гирляндой. Тем более у меня уже есть небольшой опыт по реализации связки NodeMCU и приложений написанных на App Inventor: Wi-Fi реле на NodeMCU. Управление Android приложением

Как я спаивал светодиоды расскажу и покажу в видео. В итоге у меня получилась гирлянда из 33 ws2812 светодиодов. Это оптимальное количество светодиодов для подключения к зарядному для телефона.

Подключил ws2812 к NodeMCU вот по такой схеме.

Подключить ws2812 к NodeMCU схема

Приложение решил разделить на 2 экрана.

Первый экран App Inventor управление светодиодами.

Первый экран App Inventor управление светодиодами.


Второй экран это экран настроек.

Второй экран это экран настроек


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

Блок обработки нажатия кнопок в App Inventor

Блок обработки нажатия кнопок в App Inventor


Данный блок аналогичен Предыдущему проекту: Wi-Fi реле на NodeMCU. Управление Android приложением и описывать его подробно не буду. Тут только кнопка Button6 не знакома вам, она переключается на экран Screen2. Функционал остальных кнопок:

prev — Предыдущий режим

next — Следующий режим

minus — Уменьшаем яркость

plus — Увеличиваем яркость

auto — Включение Авто-режима.

Авто-режим это переключение режимов по порядку с интервалом 1 мин. (время можно изменить в прошивке NodeMCU.)

У вас иноверное возник вопрос, а где выключение авто-режима. Я нестал делать отдельную кнопку и сделал включение авто-режима при нажатии смены режима: prev или next.

Создал две глобальные переменные:

Создал две глобальные переменные

num — содержит полученный ответ в цифровом формате

list — массив наших режимов.

Веб-обработчик организован по принципу предыдущего проекта

Веб-обработчик организован по принципу предыдущего проекта. Сперва мы получаем ответ от сервера. В нашем случае от NodeMCU. Если ответ 200 ( все в порядке). Дальше проверяем значение ответа.

Если значение Меньше 14. ( у меня просто сделано 13 режимов). Тогда в текстовое поле Label2 выводим режим. Для этого полученное число num сравниваем с массивом list.

В текстовое поле Label6 выводим информацию «Выключен». Это означает, что Авто режим выключен если он был включен. Так же активируем кнопку включения авто режима Button5.

Следующее условие Иначе Если значение больше или ровно 100 и при этом меньше или ровно 350 выполняем следующие действия. Вы наверное поняли, что тут мы будем управлять яркостью.

В текстовое значение Label4 выводим процент яркости. Но для этого от полученного значения вычтем 100. (Я в прошивке специально добавлял 100, чтобы наше значение не совпадали с режимами. ) И умножим на 0.4 - это приведение значения к процентам, так как наше значение яркости 250. Я думаю тут понятно. Это простая математика.

Последнее условие когда значение num равно 400. Это включение авто-режима.

В текстовое поле Label6 выводим информацию «Включен». Это означает, что Авто-режим управления новогодней гирляндой был включен. Так же прячем кнопку Button5.

С Приложением для Android разобрался приступаем к программированию NodeMCU.

Для этого нам понадобиться:

1. Второй урок Третьякова Сергея: ШАГ №2 * WEBSERVER WEB СЕРВЕР

2. Библиотека для работы с ws2812 светодиодами WS2812FX

В библиотеке Есть более 50 световых эффектов. Чтобы выбрать нужные режимы можно загрузить в NodeMCU пример который идет с библиотекой и выбрать понравившиеся режимы. Мне понравились (7,8,10,11,12,17,20,32,33,38,36,42,46).

Добавим в урок Сергея переменные и подключаем библиотеку WS2812FX

#include <WS2812FX.h>
#define LED_COUNT 285 // кол-во светодиодов в гирлянде
#define LED_PIN D4 // пин для вывода на гирлянду
WS2812FX strip = WS2812FX(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
int i = 0; // счётчик индекса в массиве эффектов
int m = 13; // кол-во эффектов, см. массив modes
int l = 0; // индекс прошлого (last) эффекта
#define DEFAULT_SPEED 3000 // задержка в мс, по дефолту 1000
#define TIMER_MS 60000 // время длительности одного эффекта в мс
int j = 25; // максимальнаяя яркасть *10 
boolean auto_rejim = false; // авто режим выкл. 
unsigned long last_change = 0; // предыдущее значениее времени
unsigned long now = 0; //текущее значениее времени
</code>

Затем создадим страницу управления Новогодней подсветкой. И Создадим все необходимые функции:

void HTTP_init(void) {
...
  HTTP.on("/led", handle_Led); // Упровляем Led http://192.168.0.101/led?status=auto
  // Запускаем HTTP сервер
  HTTP.begin();
}
void handle_Led() { 
  int modes[] = {7,8,10,11,12,17,20,32,33,38,36,42,46}; // массив с желаемыми ID эффектов
  String status = HTTP.arg("status");
  if (status == "prev") 
  {
    i++;
      if (i>12)
        i=0;
    strip.setMode(modes[i]);
    //strip.setMode(i);
    String k = String(i+1);
    auto_rejim = false;
    HTTP.send(200, "text/plain", k);
  }
  if (status == "next") 
  {
    i--;
       if (i<0)
          i=12;
    strip.setMode(modes[i]);
    String k = String(i+1);
    auto_rejim = false;
    HTTP.send(200, "text/plain", k);
  } 
  if (status == "minus") 
  {
    j--;
       if (j<1)
          j=1;
    strip.setBrightness(j*10);
    String k = String(j*10+100);
    HTTP.send(200, "text/plain", k);
  } 
  if (status == "plus") 
  {
    j++;
       if (j>25)
          j=25;
    strip.setBrightness(j*10);
    String k = String(j*10+100);
    HTTP.send(200, "text/plain", k);
  } 
  if (status == "auto") 
  {
  auto_rejim = true;
  HTTP.send(200, "text/plain", "400");
  } 
   if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
      strip.setSpeed(DEFAULT_SPEED*3); // очень быстрые - х3
    }
    else
     strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
}
void Auto_Led() {
 if (auto_rejim)
 { 
  int modes[] = {7,8,10,11,12,17,20,32,33,38,36,42,46}; // массив ID эффектов
  if(now - last_change > TIMER_MS) {
   if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
      strip.setSpeed(DEFAULT_SPEED*3); // очень быстро х3
    }
    else
     strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
    strip.setMode(modes[i]);
    last_change = now;
    l = modes[i];
    i++;
    if(i == m)
      i = 0;
  }
 }
}

Функция Auto_Led() переключает режимы в авто-режиме. Для ее работы необходимо в основной цикл loop добавить

now = millis();
strip.service();
Auto_Led();

Вот такая небольшая программа у нас получилась, но при этом достаточно функциональная.

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

В следующем Проекте расскажу как, я сделал пяти метровую светодиодную подсветку на окно и управляю данной подсветкой со смартфона . Фишка подсветки в том, что она запитана от 2 А блока питания и все работает. Не веришь!? Подписывайся на мой канала и вступай группу в ВК чтобы не пропустить.

Понравилась статья пишите в комментарии. Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Понравилась статья? Поделитесь ею с друзьями:

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

Приложения Android WifiPodsvetka Приложения Android WifiPodsvetka.apk3082 Kb 798 Скачать
Исходники проекта для MIT App Inventor WifiPodsvetka Исходники проекта для MIT App Inventor WifiPodsvetka.aia17 Kb 935 Скачать
Прошивка для NodeMCU Step2-WebServer Прошивка для NodeMCU Step2-WebServer.zip5 Kb 1053 Скачать
Вернуться в раздел: Проекты на NodeMCU, ESP8266, ESP-01 Дата публикации 14 января , 2019

Комментарии

Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.

Степка-3003
#4 Степка-3003 (28 ноября, 2019 в 19:05)
Уже скоро новый год! Опять столько хлопот. Подарки, застолье. Столько ненужного. Но гирлянду сделать нужно! А как без нее. 
haos89
#3 haos89 (18 октября, 2019 в 09:41)
А в Вашей программе нельзя реализовать управление скоростью мигания светодиодов (что бы подобрать комфортную). Было б еще неплохо реализовать возможность добавления и удаления эффектов.
haos89
#2 haos89 (17 октября, 2019 в 04:06)
Здравствуйте. Как с Вами проконсультироваться?
мармок
#1 мармок (30 сентября, 2019 в 14:13)
Супер пупер герлянда класс и высший асс.

Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box