Форум Вопросы и темы по программированию Arduino, ESP8266, STM32, Digispark и пр.

Почти собрал гирлянду на nodemcu v3 Cp2102 + WS2811 12V

21 марта, 2019 - 12:30
Создание беспроводных гирлянд
Всем добрый день!
Собрал всю свою волшебную гирлянду на nodemcu v3 Cp2102 с лентой RGB
WS2811, которая идёт с одной микросхемой на 3 диода и питанием 12 В.
Пересмотрел все гайды по библиотекам, проверил apk-файл, скетчи...
Вайфай работает, телефон коннектится, приложение работает, а гирлянда не
запускается.
три страницы кода прилагаю и надеюсь на помощь...

вкладка раз
#include <ESP8266WiFi.h>        //Содержится в пакете

#include <ESP8266WebServer.h> //Содержится в пакете

#include <WS2812FX.h>

#define LED_COUNT 59 // кол-во светодиодов в гирлянде

#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; //текущее значениее времени

IPAddress apIP(192, 168, 0, 101);

// Web интерфейс для устройства

ESP8266WebServer HTTP(80);

// Определяем переменные wifi

String _ssid  = "home"; // Для хранения SSID

String _password = "i12345678"; // Для хранения пароля сети

String _ssidAP = "WiFi esp"; // SSID AP точки доступа

String _passwordAP = ""; // пароль точки доступа

void setup() {

  Serial.begin(115200);

  Serial.println("");

  Serial.println("Start 1-WIFI");

  //Запускаем WIFI

  WIFIinit();

  //Настраиваем и запускаем HTTP интерфейс

  Serial.println("Start 2-WebServer");

  HTTP_init();

}

void loop() {

  HTTP.handleClient();

  delay(1);

вкладка два

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;

  }

 }

}
 
и три


void WIFIinit() {

  // Попытка подключения к точке доступа

  WiFi.mode(WIFI_STA);

  byte tries = 11;

  WiFi.begin(_ssid.c_str(), _password.c_str());

  // Делаем проверку подключения до тех пор пока счетчик tries

  // не станет равен нулю или не получим подключение

  while (--tries && WiFi.status() != WL_CONNECTED)

  {

Serial.print(".");

delay(1000);

  }

  if (WiFi.status() != WL_CONNECTED)

  {

// Если не удалось подключиться запускаем в режиме AP

Serial.println("");

Serial.println("WiFi up AP");

StartAPMode();

  }

  else {

// Иначе удалось подключиться отправляем сообщение

// о подключении и выводим адрес IP

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

  }

}

bool StartAPMode()

{ // Отключаем WIFI

  WiFi.disconnect();

  // Меняем режим на режим точки доступа

  WiFi.mode(WIFI_AP);

  // Задаем настройки сети

  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));

  // Включаем WIFI в режиме точки доступа с именем и паролем

  // хронящихся в переменных _ssidAP _passwordAP

  WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());

  return true;

}

Будущее за микроконтроллерами
Гость
22 марта, 2019 - 08:45 #1
Лента WS2811 у вас работает?
скетч проверки работоспособности ленты как выглядит?

Будущее за микроконтроллерами
Admin Admin Зарегистрирован:
3.07.2018
22 марта, 2019 - 14:39 #2
Admin пишет:
Лента WS2811 у вас работает?
скетч проверки работоспособности ленты как выглядит?
Обычный любой пример заливал и проверял - лента точно работает.
скетч работоспособности брал такой:
#include <WS2812FX.h>
#define LED_COUNT 59 // кол-во светодиодов в гирлянде
#define LED_PIN D4 // пин для вывода на гирлянду
#define DEFAULT_SPEED 2500 // задержка в мс, по дефолту 1000
#define TIMER_MS 60000 // время длительности одного эффекта в мс
WS2812FX strip = WS2812FX(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
unsigned long last_change = 0;
unsigned long now = 0;
int modes[] = {7,46,8,32,10,38,11,33,12,42,17,39,20}; // массив с желаемыми ID эффектов
//  7 - Color Wipe Random
//  8 - Random Color
// 10 - Multi Dynamic
// 11 - Rainbow
// 12 - Rainbow Cycle
// 17 - Theater Chase Rainbow (x3)
// 20 - Twinkle Random
// 32 - Chase Random
// 33 - Chase Rainbow
// 38 - Chase Blackout Rainbow
// 39 - Color Sweep Random
// 42 - Running Random (x3)
// 46 - Fireworks Random (x3)
int i = 0; // счётчик индекса в массиве эффектов
int l = 0; // индекс прошлого (last) эффекта
int m = 13; // кол-во эффектов, см. массив modes
  
void setup() {
  strip.init();
  strip.setBrightness(150); // установка яркости 0 - 255
  strip.setSpeed(DEFAULT_SPEED); // установка скорости (задержки)
  strip.setColor(0xFF0400); // дефолтный цвет
  strip.setMode(6); // стартовая установка 6го режима 
  strip.start();
}
void loop() {
  now = millis();
  strip.service();
  if(now - last_change > TIMER_MS) {
    if(l == 17 || l == 42 || l == 46){
      strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
    }
    if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
      strip.setSpeed(DEFAULT_SPEED*3); // очень быстрые - замедлить, больше задержка х3
    }
    strip.setMode(modes[i]);
    last_change = now;
    l = modes[i];
    //i = random(0,12);
    i++;
    if(i == m){
      i = 0;
    }
  }
}
Ума не приложу, куда копать...
Гость
23 марта, 2019 - 06:10 #3
Дело в вашей невнимательности.
Если вы пытаетесь сделать на моем примере читайте внимательно всю статью и добавьте не достающие строчки кода: Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor
now = millis();
strip.service();
Auto_Led();

Будущее за микроконтроллерами
Admin Admin Зарегистрирован:
3.07.2018
24 марта, 2019 - 00:00 #4
Admin пишет:
Дело в вашей невнимательности.
Если вы пытаетесь сделать на моем примере читайте внимательно всю статью и добавьте не достающие строчки кода: Управляй новогодней гирляндой со смартфона. NodeMCU + App Inventor
now = millis();
strip.service();
Auto_Led();
Да, всё верно, делал по вашему примеру. Вставил на первую вкладку и итог тот же самый, к сожалению. Может я не туда вставил строчки?
Прошу сильно не пинать, только начинаю потихоньку вникать arduino IDE.

void loop() { now = millis();
strip.service();
Auto_Led();
HTTP.handleClient();
delay(1);
}
Гость
26 марта, 2019 - 13:21 #5
Попробуйте вот так. Порядок играет очень важную роль
void loop() {
  HTTP.handleClient();
now = millis();
strip.service();
Auto_Led();
}

Будущее за микроконтроллерами
Admin Admin Зарегистрирован:
3.07.2018
27 марта, 2019 - 10:18 #6
Admin пишет:
Попробуйте вот так. Порядок играет очень важную роль
void loop() {
  HTTP.handleClient();
now = millis();
strip.service();
Auto_Led();
}
Спасибо, попробую.
Гость
28 марта, 2019 - 09:07 #7
Класное название. Почти собрал. Но ни чего не работает!!

ESP лучшая линейка МК!
Егор-Тин Егор-Тин Зарегистрирован:
28.03.2019

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

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

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

Мы в соц сетях

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

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