FAQ - vvip-68/LedPanelWiFi GitHub Wiki

FAQ

Основные вопросы

В: Как скачать с этого грёбаного сайта?

О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка "<> Code", вот её жми, там будет "Download ZIP"

В: Скачался какой то файл .zip, куда его теперь?

О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.

В: Я совсем новичок! Что мне делать с Arduino, где взять все программы?

О: Читай и смотри видос http://alexgyver.ru/arduino-first/

В: Вылетает ошибка загрузки / компиляции!

О: Читай тут: https://alexgyver.ru/arduino-first/#step-5


Вопросы по этому проекту

В: Эй чувак! У тебя проект не компилится. Ты файл FastLed.h в проект забыл включить. Выложи!

О: Это стандартная библиотека для FastLED для управления адресными светодиодами. Идите в менеджер библиотек и установите ее. Версию библиотеки выбирайте 3.6.0 или 3.7.0; Или скачайте с сайта производителя.


В: Собрал, использую NodeMCU/Wemos. Ничего не работает! Мигает один или несколько светодиодов в начале матрицы. И всё.

О: Производители разных плат (NodeMCU, Wemos) могут использовать различные схемы соединения контактов микроконтроллера ESP8266 к выводам макетной платы. Обычно используемый в проекте пин вывода на ленту приходится или на пин D2 или на пин D4. Для проверки не подключайте сигнальный провод матрицы к микроконтроллеру, вместо этого через резистор коснитесь вывода D2 или D4 пина микроконтроллера. Большая вероятность что матрица заработает с тем или иным вариантом подключения.


В: Не компилируется. Выбрана плата "голая ESP8266-12E". Сообщение об ошибке: "D4 was not declared in this scope."

О: Очевидно производители библиотеки для "голой ESP8266-12E" не определили данную константу. Используйте вместо константы D4 числовое определение пина для вашей платы или выполните компиляцию проекта для плат NodeMCU или WeMos d1 mini. Рекомендуется в качестве платы назначения указывать ModeMCU v1.0 (ESP-12E Module) для плат NodeMCU и LOLIN(WEMOS) D1 mini (clone) для плат Wemos d1 mini.


В: Не компилируется. В сообщении об ошибке содержатся сведения о дублирующихся библиотеках.

О: В вашей среде установлено две версии одной и той же библиотеки. Обычно это библиотека FastLED - одна версия находится в папке установки среды Arduino (например в "C:\Program Files (x86)\Arduino\libraries"), другая - в папке документов пользователя (например "C:\Users\vvip-68\Documents\Arduino\libraries"). Удалите одну из версий библиотек, убедитесь что оставшаяся библиотека имеет версию 3.6.0 или 3.7.0 и попробуйте скомпилировать скетч снова.


В: Не компилируется. В сообщении об ошибке что-то про несоответствие типов.

О: Обычно такая ситуация возникает в двух случаях:

  • выбрана неверная плата. Используйте NodeMCU 1.0 (ESP-12E Module) или LOLIN(WEMOS) D1 mini (clone). Под эти платы проект собирается, под другие, возможно, нужна модификация кода.
  • установлена устаревшая версия библиотек поддержки плат - например для ESP8266 версия библиотеки 2.4.2. Данный проект использует библиотеки для плат ESP8266 версии 3.1.2..
    Для версии микроконтроллера ESP32 используйте версию ядра 2.0.14.
    Изучите инструкцию в комментариях в начале основного файла проекта. Обновите библиотеки поддержки плат (ядро) до этой версии. С другими версиями ядра, в том числе и более новыми, проект может работать нестабильно, вообще не работать или даже не компилироваться.

В: Собрал, использую NodeMCU (Wemos D1 mini). Эффекты работают, но нестабильно. Случайные вспышки на матрице. Буквы бегущей строки прыгают.

О: Для начала убедитесь, что вы используете рекомендованные версии ядра системы - 3.1.2 для ESP8266, 2.0.14 для ESP32.
Если версии ядра установлены правильные, но проблема всё еще наблюдается - попробуйте рекомендации изложенные в статье Три шага к успеху


В: Подскажите, что не так... C подключением через точку доступа всё исправно работает, а при попытке подключиться к локальной сети не могу законнектиться через Web-интерфейс. В чем может быть проблема?

О: Проблема может быть в неправильно указанном статическом адресе / параметрах сети в прошивке. В скетче по умолчанию используется адрес в сети 192.168.0.xxx.

Ваш WiFi роутер в зависимости от настроек может создавать сеть в другом диапазоне. Чаще всего это 192.168.1.xxx или 192.168.100.xxx; Проверьте какую сеть создает ваш роутер и укажите в скетче и при подключении приложения к сети именно эту сеть - назначьте устройству IP из этой сети. Допустим, роутер имеет IP-адрес 192.168.1.1; Укажите, что ваше устройство должно получить адрес 192.168.1.100

Следующий вариант - ваш роутер имеет адрес, отличный от стандартного - 1-й адрес в сети, например вместо адреса 192.168.0.1 роутер работает на адресе 192.168.0.254. Исправьте в скетче в разделе настроек сети параметр Gateway (GTW):
параметр, указывающий какую подсеть использует роутер задается в настройках в файле a_def_soft.h в строке 31.

#ifndef GTW
#define GTW     1  // Последняя цифра в IP адресе роутера. Обычно IP роутера 192.168.0.*1*, но некоторые роутеры имеют адрес 192.168.0.100 или 192.168.0.254
#endif             // Тогда здесь вместо *1* должно быть 100 или 254 соответственно

В: Устройство создает точку доступа, телефон к ней подключается. В браузере ввожу IP адрес панели 192.168.4.1, но соединение не происходит. Что я делаю не так?

О: Некоторые телефоны не могут передавать данные через точку доступа, пока в них активен мобильный интернет. Все передаваемые данные отправляются в интернет, вместо передачи их в точку доступа. В настройках телефона выключите мобильный интернет ("Мобильные данные"). После этого телефон из браузера должен подключиться к устройству.


В: Устройство подключается к сети, получает адрес - это видно в логах. Телефон к устройству подключается. В браузере ввожу IP адрес, полученный устройством - тот, что выводится в логе, но соединение не происходит. Что я делаю не так?

О: Некоторые роутеры (например роутеры ASUS, в частности Asus RT-AC58U), имеют в своих настройках параметр "Изоляция точки доступа", он же - "Режим изоляции клиентов". По умолчанию эта настройка включена. Отключите ее. После этого браузер должен подключиться к смартфону.


В: В скетче есть настройки который задают имя и пароль к локальной сети. Указываю, но к сети даже не пытается подключиться В чем дело?

#define NETWORK_SSID ""  // Имя WiFi сети - пропишите здесь или задайте из приложения настроек Web-приложения в браузере   
#define NETWORK_PASS ""  // Пароль для подключения к WiFi сети - пропишите здесь или задайте из приложения настроек Web-приложения в браузере

О: Эти настройки определяют параметры доступа к сети по умолчанию, которые используются при ПЕРВОЙ загрузке прошивки в устройство. В этот момент они сохраняются в памяти контроллера и при последующих запусках имя сети и пароль извлекаются из энергонезависимой памяти и используются уже извлеченные значения, а не те, что прописаны в #define. Если вы уже запускали устройство и ПОСЛЕ этого изменили в скетче имя и пароль сети, вам нужно также изменить значение флага, указывающее было ли уже сохранение параметров в EEPROM или еще нет. Этот флаг находится в файле a_def_soft.h в строке 7. Измените на любое другое 16-ричное число в 1 байт.

#define EEPROM_OK 0x5A // Флаг, показывающий, что EEPROM инициализирована корректными данными 

Измените его на любое другое значение, например 0xA5

Другой вариант сброса сохраненных настроек - загрузить прошивку с установленным режимом в меню "Инструменты" Arduino IDE "Erase Flash" - "All Flash Contents" для ESP8266 или "Erase All Flash Before Sketch Upload" - "Enabled" для ESP32.


В: Погода в Украине работать будет? Как узнать код региона для моего города?

О: Изучите настройку погоды для вашего региона тут


В: Собрал, всё работает, но на некоторых режимах сам эффект не отображается, но в начале матрицы мерцает один светодиод. Как исправить?

О: Это проблема совместимости библиотеки FastLED и ядра микроконтроллера. Проявляется в основном на устройствах, собранных на ESP8266.

В чем проявляются эти глюки:

  • Часть эффектов не работает, при переключении на них мерцает первый светодиод матрицы, на матрице остаток от предыдущего эффекта.
  • При включении бегущей строки или когда приходит время показа даты календаря - эффект на это время размораживается
  • Либо наоборот - эффекты работают, но при включении бегущей строки замирает.
  • Либо эффекты замирают, но при снятии в часах галочки "цветная температура днем" все размораживается
  • Либо работают все эффекты кроме какого-то одного (причем при разных сборках эффекты могут быть разными)
  • На эффектах Снегопад и Matrix (и не на каких других) движение снежинок и полосок с небольшими рывками / подтормаживанием.
  • Либо работает все, бегут все строки. Кроме одной какой-нибудь. Иногда в такой строке есть макрос {D} но это не обязательно - может только одна с макросом не показываться а другие - нормально. Или с каким-нибудь другим макросом типа {S}.

В общем - не работать может в любом случайном месте.

Как я с этим борюсь.

На примере FastLED 3.6.0, впрочем к другим версиям, думаю тоже применимо:

Идете в папку где установлена библиотека FastLED. Примерно - C:\Users<user>\Documents\Arduino\libraries\FastLED\src\platforms\esp\8266 и находите там файл clockless_esp8266.h

Где-то в первых строках этого файла находите строку

template <int DATA_PIN, int T1, int T2, int T3, EOrder RGB_ORDER = RGB, int XTRA0 = 0, bool FLIP = false, int WAIT_TIME = 85> 

Меняете вот это 85 на, скажем, 150 и пересобираете проект.
Если не помогает - попробуйте увеличивать это значение 200-250-300-350... В 99% случаев это помогает.


В: Как мне добавить свою анимацию в скетч в дополнение к эффекту "Анимация"?

О: Изучите утилиту редактирования роликов и анимации JinxFramer - прочтите инструкцию


В: Матрица после включения самопроизвольно меняет яркость. Или до максимума или до минимума.

О: Необходимое условие: Установить ядро рекомендованных версий 3.1.2 для ESP8266 или 2.0.14 для ESP32

Вариант 1: У вас физически не подключена кнопка, но скетч скомпилирован с опцией использования функционала кнопки #define USE_BUTTON 1. В этом случае микроконтроллер свободный пин кнопки, притянутый внутренним резистором микроконтроллера к "земле" воспринимает как состояние кнопки "нажато". Длительное "нажатие" кнопки воспринимается скетчем как запрос на регулировку яркости матрицы.
Решение: припаяйте кнопку, укажите в настройках скетча правильный тип кнопки - физическая тактовая или сенсорная - #define BUTTON_TYPE 0.

Вариант 2: Отключить в настройках использование кнопки совсем (особенно если ее на самом деле и нет).

#define USE_BUTTON 0

В: Проект собран, скетч загружен в плату. При попытке подключиться к устройству в браузере отображается "Сервер не активен"

image

О: Файлы Web-странички должны быть загружены в файловую систему микроконтроллера. Если вы этого не сделали - Web-сервер сообщает вам, что ему нечего отображать. То есть - сервер не активен.

Файлы для загрузки находятся в проекте в папке 'data' внутри парки скетча. Выполните загрузку файлов в файловую систему микроконтроллера.


В: На экране телефона в браузере Web-приложение смотрится как-то слишком мелко. Можно ли его как-нибудь увеличить?

О: В папке со скетчем, в подпапке data/web найдите файл index.html.gz; Это индексный файл главной страницы Web-приложения. Распакуйте его, получив доступ к неупакованному файлу index.html;

Найдите строчку

<meta name="viewport" content="width=device-width, initial-scale=0.825, minimum-scale=0.5, maximum-scale=2">

Измените значение параметра initial-scale с 0.825 до 1.0 или даже 1.2 (подбирайте опытным путем).
После редактирования - запакуйте файл обратно в архив index.html.gz (впрочем, можно оставить и неупакованным).
Загрузите папку data обратно в файловую систему микроконтроллера. После того, как микроконтроллер перезапустится - зайдите на главную страницу веб-приложения, открыв ее в браузере на телефоне. Если изменений не видно - значит браузер загрузил страницу из кэша. Вам нужно очистить кэш браузера и открыть приложение снова.

Если результат не удовлетворил вас - повторите снова редактирование - загрузка -очистка кэша - просмотр, пока результат не будет желаемым.


В: Порядок цветов - две разных ленты с разным порядком цветов

В прошлом году купил китайскую адресную ленту, прошил, всё супер, целый сезон гирлянда отработала шикарно. В этом году заказал ещё три ленты на АлиЭкспресс, чтобы сделать размер побольше. Светодиоды внутри новых лент подключены по другому. На одной ленте порядок светодиодов GRB, а на трёх других RGB, соответственно, когда собираю одну большую ленту из 4 сегментов, на одном сегменте всегда другой цвет. Вопрос, может быть как-то можно сделать, чтобы каждому сегменту задавался свой тип ленты и порядок цветов в ней?

О: Два варианта решений.

  1. Распределить вывод на разные пины, каждому пину определить свой порядок цвета. В интерфейсе это тут - "Настройки", "Оборудование":

image

  1. Вариант второй. В custom.ino найти вот этот вот кусочек кода:

image

До и после вызова FastLED.show() вставить два цикла по диодам ленты с другим порядком цветов (который кусок меньше - для того и цикл, а общий порядок цветов настроить в интерфейсе где на картинке выше

К примеру (абстрактно) два куска по 50 диодов, общее количество - 100 Один (первый) кусок имеет настроенный в интерфейсе порядок цветов GRB, Другой, например - RGB То есть - нужно поменять две компоненты цвета R и G местами.

До FastLED.show() вставляем цикл типа

    for (uint16_t idx = 50; idx < 99; idx++) {
      uint8_t t = leds[idx].r;
      leds[idx].r = leds[idx].g;
      leds[idx].g = t;
    }

после - меняем в обратную сторону, возвращая как было

    for (uint16_t idx = 50; idx < 99; idx++) {
      uint8_t t = leds[idx].r;
      leds[idx].r = leds[idx].g;
      leds[idx].g = t;
    }

Ну или для другого порядка - поиграться с компонентами r,g,b. Возможно не только r и g нужно менять, а по кругу типа r->g, g->b, и b->r - зависит от конкретного порядка в ленте. После FastLED.show() - все вернуть на место.

Это общий принцип - нюансы смотрите на месте.

⚠️ **GitHub.com Fallback** ⚠️