FAQ - vvip-68/LedPanelWiFi GitHub Wiki
О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка "<> Code", вот её жми, там будет "Download ZIP"
О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.
О: Читай и смотри видос http://alexgyver.ru/arduino-first/
О: Читай тут: https://alexgyver.ru/arduino-first/#step-5
О: Это стандартная библиотека для 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
В: Проект собран, скетч загружен в плату. При попытке подключиться к устройству в браузере отображается "Сервер не активен"
О: Файлы 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 сегментов, на одном сегменте всегда другой цвет. Вопрос, может быть как-то можно сделать, чтобы каждому сегменту задавался свой тип ленты и порядок цветов в ней?
О: Два варианта решений.
- Распределить вывод на разные пины, каждому пину определить свой порядок цвета. В интерфейсе это тут - "Настройки", "Оборудование":
- Вариант второй. В custom.ino найти вот этот вот кусочек кода:
До и после вызова 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() - все вернуть на место.
Это общий принцип - нюансы смотрите на месте.