RSS блога
Подписка
esp8266 + ws2813 = новогоднее настроение
- Цена: $3.45
- Перейти в магазин
Почитывая обзоры на Муське, я узнал про замечательную вещь — светодиоды с пиксельной адресацией, а также увидел интересный вариант применения ленты для создания праздничного настроения. Было решено соорудить нечто подобное, но, скажем так, на базе чего-то более перспективного и интересного, чем ардуино из обзора sav13, и не настолько сложно, как это сделал yurok. Встречайте — esp8266 в роли этого самого «перспективного и интересного»!
ДОПОЛНЕНО: Добавлен скетч для esp8266
Сразу оговорюсь — в обзоре будет очень мало работы паяльником и много букв, если кому-то интересен результат — прокручивайте вниз, фото и видео прилагается.
Итак, почему не arduino, тем более что у меня их уже имеется несколько штук? Дуина, конечно, хороша: для нее написано множество библиотек на все случаи жизни, имеется огромное сообщество разработчиков, привычная среда разработки и все такое… Но крошечный объем памяти — 32 кб на всё про всё, причем всего 2 кб под переменные — резко ограничивает полет фантазии для реализации эффектов и заставляетзадуматься о смысле жизни искать что-то более мощное, но желательно не очень дорогое.
Прогресс не стоит на месте, и вот он, подходящий кандидат — микроконтроллер esp8266. Производителями готовых решений выпускаются различные платы и модули с этим чипом — практически на любой вкус и под любые цели. Можно отдельно отметить несколько любопытных вариантов.
1. ESP-09.
Чемпион по миниатюризации: квадратик «сантиметр на сантиметр». В каком-то обзоре один из муськовчан интересовался, что он может воткнуть в условиях очень ограниченного пространства… Вот и ответ! В наличии 1 мегабайт памяти, демократичный ценник (впрочем, как и на все платы на базе esp8266) — что еще надо? Из минусов — выводы на антенну и GPIO 0, 2, 12, 13, 14 и 15 находятся внизу, и для монтажа такое подойдет не всем.
2. ESP-07.
Представляет собой прямоугольную плату 22 мм на 16 мм, имеет на борту керамическую антенну, разъем для подключения внешней антенны, выводы GPIO 0, 2, 4, 5, 12, 13, 14, 15 и 16. Памяти по меркам esp самый минимум — «всего» 512 кб.
3. ESP-12 и ее разновидности.
По размерам практически идентичны предыдущему варианту, но отсутствует вывод на внешнюю антенну, а керамическая антенна заменена «змейкой» прямо на плате. Модели с различными буквенными индексами отличаются размером памяти.
4. Платы NodeMCU.
Главное внешнее отличие от всех предыдущих — это привычный шаг выводов и собственно наличие этих самых выводов, позволяющее легко подключать к плате модули. Кроме того, к этой плате гораздо проще подключаться с точки зрения разработчика — не нужно никаких конвертеров, программаторов и прошивальщиков — на плате имеется преобразователь напряжения, встроен UART-конвертер на базе чипа CH340 и есть разъем micro-USB. И, кроме того, через пин Vin ее можно запитать от 5 вольт (и даже больше). Проще некуда!
5. WeMOS D1 mini.
Тоже интересная плата, прежде всего тем, что конкретно под нее выпускается много модулей и имеется возможность объединять плату с модулями в своеобразный «бутерброд»: никаких лишних проводов, ничего нигде не болтается — мечта! По характеристикам аналогична платам NodeMCU — имеет много памяти, достаточное количество пинов и micro-USB разъем, но при этом компактнее.
Дабы не заморачиваться с преобразованием напряжения (все равно блок питания ленты на 5 вольт) и пайкой мелких элементов, я заказал пару плат NodeMCU ver.2, по цене одна плата вышла чуть дешевле трех с половиной долларов. К слову говоря, я заказывал еще и NodeMCU ver.3 (она дешевле на 60 центов), никакой разницы кроме размеров я не заметил.
Теперь о доставке. В Беларусь посылка добралась быстро, недели через 3 после покупки я забрал ее на почте. Упаковка — стандартный полиэтиленовый пакет, внутри несколько запаянных антистатических пакетиков с платами, всунутыми в куски вспененного полиэтилена. В общем — нормально. Ноги не погнуты, а бьющихся частей там нет.
А вот — наглядное сравнение плат NodeMCU с ардуино. Слева направо:
шилд для Nodemcu v.2, Arduino Uno R3, Nodemcu v.3, Nodemcu v.2, Arduino nano
Лента была куплена у другого продавца, 5 метров ленты с учетом долларового купона обошлись чуть дороже 20 баксов.Вот снапшот снапшот почему-то не открывается, вот ссылка на ленту.
Сначала думал найти подходящий профиль, но после пробных подключений и чтения форумов решил сделать проще — вместо алюминиевого профиля у меня используется обычный белый пластиковый кабель-канал. Лента совсем не греется, проверено многочасовыми тестами. Если кому интересно, я сфоткал потребление ленты вместе с esp8266. Вот довольно легкий режим «змейка», потребление чуть больше 2 ватт:
А вот максимальная нагрузка, все диоды на 2 метрах ленты светят ярким белым светом, потребление около 18 ватт:
Место подключения кабеля к ленте я закрепил термоклеем, выглядит примерно так
Как я уже говорил выше, для питания ленты на диодах ws2813 необходимо напряжение 5 вольт, а 2-метровому отрезку будет достаточно 18 Ватт в пике. Блок питания был взят с запасом — это MeanWell RS-50-5, купленный в одном известном российском магазине. Забегая немного вперед, скажу, что даже при длительном использовании блок совершенно не греется, что для меня является плюсом. Чтобы спрятать эту железяку с глаз долой, я использовал распределительную коробку стоимостью около полутора долларов, купленную с местном строительном магазине.
Блок питания в нее кое-как поместился, хоть его и пришлось немного доработать напильником:)
Сам модуль NodeMCU пока болтается снаружи — прячется за блоком, со стороны незаметен и никому не мешает.
Вот так вся конструкция выглядит на подоконнике:
Подходящей коробочки для модуля сначала не нашлось, и как его прятать — я особо даже не думал. Есть мысль, что подойдет пластиковая коробка для пальчиковых батареек, но эстетикой я займусь позже.
Теперь по управлению. Сначала у меня была мысль прикрутить управление с помощью обычного ИК-пульта, тем более что пульт с ИК-модулем для ардуино у меня давным-давно лежит в коробке. Но увы — ИК-приемник не сможет корректно работать без прерываний, а библиотека NeoPixel не даст их использовать. Короче, надо выбрать или одно или другое. Пришлось отказаться от этой идеи и копать дальше, в сторону Wi-fi или Bluetooth. Модуль имени короля Харальда I Синезубого у меня отсутствовал, да и выбор из двух беспроводных вариантов был очевиден — это однозначно встроенный вайфай.
Захотелось прикрутить управление подсветкой через Wi-fi, но появились новые вопросы — что именно использовать для управления? Будем разбираться.
Сам собой напрашивался Blynk, как правильно подумали знающие читатели. Для остальных следует пояснить, что есть блинк, чем он хорош, а чем неудобен. Итак, блинк — это проект, призванный помочь самоделкиным контролировать целый зоопарк различных устройств и тратить при этом минимальное время на разработку интерфейса управления. Однако есть важная деталь: для работы сервиса устройствам требуется или доступ в интернет, или установленный в локальной сети сервер. Интерфейс можно слепить в простом редакторе из довольно большого набора элементов на все случаи жизни, пользователю бесплатно выделяется 2000 единиц «энергии» для творчества. Каждый элемент стоит некоторое количество энергии, и при исчерпании лимита ее можно пополнить (проще говоря — купить). Можно установить сервер blynk где-нибудь в локальной сети, и тогда ограничение с энергией снимается, но появляется новый вопрос — куда бы так воткнуть сервер, чтобы он был доступен в любой момент времени? В общем, у блинка есть свои тонкости, и мне он в целом понравился, но не подошел.
Смотрим дальше. Следующий вариант — это раскрутка вебсервера на ЕСП и управление устройством напрямую, с помощью гиперссылок вида myesp.local/color/red/25. Подключение к устройству через браузер доступно с любого устройства в локальной сети и может быть удобно, если будет сделан хороший интерфейс, но… Примитивный HTML — это же каменный век, и с элементами управления особо не разгуляешься. В общем — этот вариант также отвалился на стадии первых тестовых подключений.
Погуглив в интернетах, я пришел к выводу, что можно сделать красивый и, что немаловажно, удобный веб-интерфейс с помощью JQuery mobile, а последующее взаимодействие с устройством реализовать через WebSocket. Что это такое, я знал только в общих чертах, и работать ни с тем, ни с другим несколько недель назад еще не умел. Но, как говорится — наши руки не для скуки! Сначала я хотел приспособить к ЕСПшке micro-SD карту и хранить на ней все, что нужно было для создания мини-сервера, но когда начал разбираться с esp8266 глубже, оказалось, что внешняя память в моем случае не нужна. Esp-12E, которая является основой платы NodeMCU, имеет на борту аж 4 мегабайта памяти, из которых один или три мегабайта можно задействовать под внутреннюю файловую систему. Учитывая размер единственной странички со всеми дополнительными скриптами и картинками, мне этого объема теоретически было более чем достаточно!
В общем, идея сформировалась: нужно сделать простую страницу, разместить ее во встроенной файловой системе ЕСПшки, поднять на ЕСПшке вебсервер и при обращении к нему — отдавать эту страницу. Все дальнейшее взаимодействие предполагалось только через websocket, такой подход должен снизить трафик и поможет избежать ненужной перерисовки управляющей веб-страницы.
Для быстрой разработки интерфейса был использован онлайн-инструмент Rapid interface builder, который при всей своей замечательности у меня нормально работал только один день, а потом перестал экспортировать архив с готовым интерфейсом. К счастью, прямо на странице можно посмотреть и скопировать исходный код интерфейса (кнопка Code), так что невозможность экспорта не стала большой проблемой. К тому же, интерфейс и таблицы стилей были впоследствии исправлены вручную. Когда наброски интерфейса были готовы, я забросил интерфейс во внутренюю память ESP, добавил в исходники взаимодействие через websocket, и тут случился облом: ESP не может работать с файлами во внутренней файловой системе, если полное имя файла и путь к нему длиннее 32 символов. Пришлось сократить имена, после чего все стало работать как я и ожидал, и я начал экспериментировать с эффектами.
Их не то чтобы много, но что-то я все-таки придумал. Я старался сделать эффекты не статичными (это слишком просто и скучно), а с возможностью «тюнинга». Как правило, пользователь может изменить скорость анимации, выбрать цвет и т.п. В общем, мелочь, которая позволяет иногда изменить один и тот же эффект до неузнаваемости. Если фантазия в отпуске или просто хочется поэкспериментировать, можно воспользоваться кнопкой «Придумать» — так можно сгенерить значения некоторых параметров случайным образом.
Список эффектов пока небольшой, но надеюсь что он будет расширяться.
1. Волны. Пользователь указывает минимальное и максимальное значение цвета в «волне», количество волн и скорость их движения. Волны трех базовых цветов могут как бы накладываться друг на друга, в итоге создавая новый цвет. Объяснять тяжело, фотография наверное тоже не очень поможет, лучше смотрите видео.
2. Радуга. Ну, название говорит само за себя… Пользователь может указать от 2 до 10 цветовых точек, между ними будут плавные цветовые переходы. Для динамики можно указать еще скорость движения радуги.
3. Линии. Вся лента плавно заполняется одним цветом справа налево или наоборот. Цвета могут быть случайными или выбранными заранее.
4. Снежинки. Они появляются, затем медленно тают. Или быстро — это зависит от настроек. Кроме того, можно указать частоту появления снежинок и их цвет… А еще цвет можно генерировать случайно для каждой «снежинки». Красиво, в общем.
5. Стробоскоп. Что-то вроде снежинок, только размер поменьше и скорость исчезновения побольше. Хотя что тут объяснять, все наверно и так знают, что такое стробоскоп.
6. Змейки. В одном направлении движутся полосы одного или разных цветов, могут менять направление движения. Настройки в общем-то как у большинства — скорость движения, цвет.
7. Пульс. Вся лента плавно пульсирует от минимального цвета до максимального и обратно. Цвета задаются пользователем, скорость пульсаций — тоже.
8. Автосмена режимов. Еще одно говорящее название — эффекты переключаются или по кругу, или случайным образом. Можно указать длительность действия эффекта, но фильтра по эффектам нет.
9. Планировщик. Реализовать эту фичу — в самых ближайших планах. Должен быть следующий функционал — пользователь настраивает какой-либо эффект, затем добавляет его в планировщик и задает длительность его выполнения, затем еще и еще. По моим расчетам, в теории можно будет задать не меньше сотни различных конфигураций, на практике наверно хватит и 10-15. Ну а планировщик будет переключать режимы согласно очередности.
И последнее — дабы не приходилось постоянно после включения выбирать эффекты и настраивать их под себя, параметры хранятся в энергонезависимой памяти, т.е. при включении пользователь увидит тот эффект, который был установлен перед выключением. Автосохранение происходит через минуту после того, как пользователь последний раз изменял настройки.
Ну а теперь — ссылки на видео. В этом плейлисте вы можете увидеть разные режимы в действии:
А вот здесь я покажу, как происходит управление параметрами
Вот такая поделка у меня получилась. Как я уже говорил, в JQuery не силен, поэтому местами там сделано неправильно или даже используются откровенные «костыли», но все работает, а это главное. В силу возможностей постараюсь развивать проект (есть мысли по добавлению расписания и режима ночника), но ваши пожелания и улучшения всячески приветствуются. Исходники появится здесь же через пару дней (как только приведу их в порядок), но если кому-то уж очень сильно невмоготу, есть ESP, лента и желание повторить этот проект — обращайтесь, отдам исходники как есть, а потом обновитесь.
И еще один важный момент. Вот что нам понадобится для работы с esp:
1. библиотека WebSockets by Markus Sattler, версия 2.0.5
2. библиотека Adafruit NeoPixel, версия 1.0.6
3. плагин ESP8266FS для заливки файлов во внутреннюю файловую систему ЕСПшки. Обратите внимание, что версия 0.3.0 у многих не работает, и у меня в том числе. Решение простое — используйте версию 0.2.0.
ДОПОЛНЕНО:
Последовательность действий для заливки программы в NodeMCU.
1. Качаем и устанавливаем среду разработки Arduino (у меня стоит версия 1.6.7), настраиваем ее для работы с NodeMCU. Как это сделать, в сети их уже неоднократно разжевано.
2. Устанавливаем библиотеки WebSockets и Adafruit Neopixel, ссылки на библиотеки есть чуть выше.
3. Качаем плагин ESP8266FS для заливки данных во внутреннюю файловую систему, устанавливаем его. Ссылка на плагин — чуть выше, у меня работает версия 0.2.0. Распаковываем этот плагин в папку tools, которая находится там, где установлена среда разработки Arduino. У меня это d:\Program Files (x86)\Arduino\tools\
4. Качаем мой архив, распаковываем его куда-нибудь. Структура архива такова:
SmartLED\
data\
smartled.h
smartled.cpp
SmartLED.ino
Ну, собственно, здесь почти все понятно: .h и .cpp — это файлы библиотеки, .ino — сам скетч, а вот папка data содержит файлы, которые необходимо будет залить во внутреннюю файловую систему ЕСПшки с помощью плагина ESP8266FS.
В общем, открываете в среде разработки файл SmartLED.ino, подключаем ЕСПшку и компилим скетч. Если все подключено верно, то скомпиленный бинарник зальется в плату. Теперь открываем пункт «ESP8266 Sketch Data Upload» в меню «Инструменты», и заливаем файлы в ЕСПшку.
После ребута можно пользоваться!
ЗЫЖ Не забудьте поправить настройки вайфая в скетче!
Вот, пожалуй, и все, что я хотел вам рассказать в этом обзоре.
Спасибо за внимание, и с наступающим Новым Годом!
ДОПОЛНЕНО: Добавлен скетч для esp8266
Сразу оговорюсь — в обзоре будет очень мало работы паяльником и много букв, если кому-то интересен результат — прокручивайте вниз, фото и видео прилагается.
Итак, почему не arduino, тем более что у меня их уже имеется несколько штук? Дуина, конечно, хороша: для нее написано множество библиотек на все случаи жизни, имеется огромное сообщество разработчиков, привычная среда разработки и все такое… Но крошечный объем памяти — 32 кб на всё про всё, причем всего 2 кб под переменные — резко ограничивает полет фантазии для реализации эффектов и заставляет
Прогресс не стоит на месте, и вот он, подходящий кандидат — микроконтроллер esp8266. Производителями готовых решений выпускаются различные платы и модули с этим чипом — практически на любой вкус и под любые цели. Можно отдельно отметить несколько любопытных вариантов.
1. ESP-09.
Чемпион по миниатюризации: квадратик «сантиметр на сантиметр». В каком-то обзоре один из муськовчан интересовался, что он может воткнуть в условиях очень ограниченного пространства… Вот и ответ! В наличии 1 мегабайт памяти, демократичный ценник (впрочем, как и на все платы на базе esp8266) — что еще надо? Из минусов — выводы на антенну и GPIO 0, 2, 12, 13, 14 и 15 находятся внизу, и для монтажа такое подойдет не всем.
2. ESP-07.
Представляет собой прямоугольную плату 22 мм на 16 мм, имеет на борту керамическую антенну, разъем для подключения внешней антенны, выводы GPIO 0, 2, 4, 5, 12, 13, 14, 15 и 16. Памяти по меркам esp самый минимум — «всего» 512 кб.
3. ESP-12 и ее разновидности.
По размерам практически идентичны предыдущему варианту, но отсутствует вывод на внешнюю антенну, а керамическая антенна заменена «змейкой» прямо на плате. Модели с различными буквенными индексами отличаются размером памяти.
4. Платы NodeMCU.
Главное внешнее отличие от всех предыдущих — это привычный шаг выводов и собственно наличие этих самых выводов, позволяющее легко подключать к плате модули. Кроме того, к этой плате гораздо проще подключаться с точки зрения разработчика — не нужно никаких конвертеров, программаторов и прошивальщиков — на плате имеется преобразователь напряжения, встроен UART-конвертер на базе чипа CH340 и есть разъем micro-USB. И, кроме того, через пин Vin ее можно запитать от 5 вольт (и даже больше). Проще некуда!
5. WeMOS D1 mini.
Тоже интересная плата, прежде всего тем, что конкретно под нее выпускается много модулей и имеется возможность объединять плату с модулями в своеобразный «бутерброд»: никаких лишних проводов, ничего нигде не болтается — мечта! По характеристикам аналогична платам NodeMCU — имеет много памяти, достаточное количество пинов и micro-USB разъем, но при этом компактнее.
Дабы не заморачиваться с преобразованием напряжения (все равно блок питания ленты на 5 вольт) и пайкой мелких элементов, я заказал пару плат NodeMCU ver.2, по цене одна плата вышла чуть дешевле трех с половиной долларов. К слову говоря, я заказывал еще и NodeMCU ver.3 (она дешевле на 60 центов), никакой разницы кроме размеров я не заметил.
Теперь о доставке. В Беларусь посылка добралась быстро, недели через 3 после покупки я забрал ее на почте. Упаковка — стандартный полиэтиленовый пакет, внутри несколько запаянных антистатических пакетиков с платами, всунутыми в куски вспененного полиэтилена. В общем — нормально. Ноги не погнуты, а бьющихся частей там нет.
А вот — наглядное сравнение плат NodeMCU с ардуино. Слева направо:
шилд для Nodemcu v.2, Arduino Uno R3, Nodemcu v.3, Nodemcu v.2, Arduino nano
Лента была куплена у другого продавца, 5 метров ленты с учетом долларового купона обошлись чуть дороже 20 баксов.
Сначала думал найти подходящий профиль, но после пробных подключений и чтения форумов решил сделать проще — вместо алюминиевого профиля у меня используется обычный белый пластиковый кабель-канал. Лента совсем не греется, проверено многочасовыми тестами. Если кому интересно, я сфоткал потребление ленты вместе с esp8266. Вот довольно легкий режим «змейка», потребление чуть больше 2 ватт:
А вот максимальная нагрузка, все диоды на 2 метрах ленты светят ярким белым светом, потребление около 18 ватт:
Место подключения кабеля к ленте я закрепил термоклеем, выглядит примерно так
Как я уже говорил выше, для питания ленты на диодах ws2813 необходимо напряжение 5 вольт, а 2-метровому отрезку будет достаточно 18 Ватт в пике. Блок питания был взят с запасом — это MeanWell RS-50-5, купленный в одном известном российском магазине. Забегая немного вперед, скажу, что даже при длительном использовании блок совершенно не греется, что для меня является плюсом. Чтобы спрятать эту железяку с глаз долой, я использовал распределительную коробку стоимостью около полутора долларов, купленную с местном строительном магазине.
Блок питания в нее кое-как поместился, хоть его и пришлось немного доработать напильником:)
Сам модуль NodeMCU пока болтается снаружи — прячется за блоком, со стороны незаметен и никому не мешает.
Вот так вся конструкция выглядит на подоконнике:
Подходящей коробочки для модуля сначала не нашлось, и как его прятать — я особо даже не думал. Есть мысль, что подойдет пластиковая коробка для пальчиковых батареек, но эстетикой я займусь позже.
Под спойлером несколько снимков
Теперь по управлению. Сначала у меня была мысль прикрутить управление с помощью обычного ИК-пульта, тем более что пульт с ИК-модулем для ардуино у меня давным-давно лежит в коробке. Но увы — ИК-приемник не сможет корректно работать без прерываний, а библиотека NeoPixel не даст их использовать. Короче, надо выбрать или одно или другое. Пришлось отказаться от этой идеи и копать дальше, в сторону Wi-fi или Bluetooth. Модуль имени короля Харальда I Синезубого у меня отсутствовал, да и выбор из двух беспроводных вариантов был очевиден — это однозначно встроенный вайфай.
Захотелось прикрутить управление подсветкой через Wi-fi, но появились новые вопросы — что именно использовать для управления? Будем разбираться.
Сам собой напрашивался Blynk, как правильно подумали знающие читатели. Для остальных следует пояснить, что есть блинк, чем он хорош, а чем неудобен. Итак, блинк — это проект, призванный помочь самоделкиным контролировать целый зоопарк различных устройств и тратить при этом минимальное время на разработку интерфейса управления. Однако есть важная деталь: для работы сервиса устройствам требуется или доступ в интернет, или установленный в локальной сети сервер. Интерфейс можно слепить в простом редакторе из довольно большого набора элементов на все случаи жизни, пользователю бесплатно выделяется 2000 единиц «энергии» для творчества. Каждый элемент стоит некоторое количество энергии, и при исчерпании лимита ее можно пополнить (проще говоря — купить). Можно установить сервер blynk где-нибудь в локальной сети, и тогда ограничение с энергией снимается, но появляется новый вопрос — куда бы так воткнуть сервер, чтобы он был доступен в любой момент времени? В общем, у блинка есть свои тонкости, и мне он в целом понравился, но не подошел.
Смотрим дальше. Следующий вариант — это раскрутка вебсервера на ЕСП и управление устройством напрямую, с помощью гиперссылок вида myesp.local/color/red/25. Подключение к устройству через браузер доступно с любого устройства в локальной сети и может быть удобно, если будет сделан хороший интерфейс, но… Примитивный HTML — это же каменный век, и с элементами управления особо не разгуляешься. В общем — этот вариант также отвалился на стадии первых тестовых подключений.
Погуглив в интернетах, я пришел к выводу, что можно сделать красивый и, что немаловажно, удобный веб-интерфейс с помощью JQuery mobile, а последующее взаимодействие с устройством реализовать через WebSocket. Что это такое, я знал только в общих чертах, и работать ни с тем, ни с другим несколько недель назад еще не умел. Но, как говорится — наши руки не для скуки! Сначала я хотел приспособить к ЕСПшке micro-SD карту и хранить на ней все, что нужно было для создания мини-сервера, но когда начал разбираться с esp8266 глубже, оказалось, что внешняя память в моем случае не нужна. Esp-12E, которая является основой платы NodeMCU, имеет на борту аж 4 мегабайта памяти, из которых один или три мегабайта можно задействовать под внутреннюю файловую систему. Учитывая размер единственной странички со всеми дополнительными скриптами и картинками, мне этого объема теоретически было более чем достаточно!
В общем, идея сформировалась: нужно сделать простую страницу, разместить ее во встроенной файловой системе ЕСПшки, поднять на ЕСПшке вебсервер и при обращении к нему — отдавать эту страницу. Все дальнейшее взаимодействие предполагалось только через websocket, такой подход должен снизить трафик и поможет избежать ненужной перерисовки управляющей веб-страницы.
Для быстрой разработки интерфейса был использован онлайн-инструмент Rapid interface builder, который при всей своей замечательности у меня нормально работал только один день, а потом перестал экспортировать архив с готовым интерфейсом. К счастью, прямо на странице можно посмотреть и скопировать исходный код интерфейса (кнопка Code), так что невозможность экспорта не стала большой проблемой. К тому же, интерфейс и таблицы стилей были впоследствии исправлены вручную. Когда наброски интерфейса были готовы, я забросил интерфейс во внутренюю память ESP, добавил в исходники взаимодействие через websocket, и тут случился облом: ESP не может работать с файлами во внутренней файловой системе, если полное имя файла и путь к нему длиннее 32 символов. Пришлось сократить имена, после чего все стало работать как я и ожидал, и я начал экспериментировать с эффектами.
Их не то чтобы много, но что-то я все-таки придумал. Я старался сделать эффекты не статичными (это слишком просто и скучно), а с возможностью «тюнинга». Как правило, пользователь может изменить скорость анимации, выбрать цвет и т.п. В общем, мелочь, которая позволяет иногда изменить один и тот же эффект до неузнаваемости. Если фантазия в отпуске или просто хочется поэкспериментировать, можно воспользоваться кнопкой «Придумать» — так можно сгенерить значения некоторых параметров случайным образом.
Список эффектов пока небольшой, но надеюсь что он будет расширяться.
1. Волны. Пользователь указывает минимальное и максимальное значение цвета в «волне», количество волн и скорость их движения. Волны трех базовых цветов могут как бы накладываться друг на друга, в итоге создавая новый цвет. Объяснять тяжело, фотография наверное тоже не очень поможет, лучше смотрите видео.
2. Радуга. Ну, название говорит само за себя… Пользователь может указать от 2 до 10 цветовых точек, между ними будут плавные цветовые переходы. Для динамики можно указать еще скорость движения радуги.
3. Линии. Вся лента плавно заполняется одним цветом справа налево или наоборот. Цвета могут быть случайными или выбранными заранее.
4. Снежинки. Они появляются, затем медленно тают. Или быстро — это зависит от настроек. Кроме того, можно указать частоту появления снежинок и их цвет… А еще цвет можно генерировать случайно для каждой «снежинки». Красиво, в общем.
5. Стробоскоп. Что-то вроде снежинок, только размер поменьше и скорость исчезновения побольше. Хотя что тут объяснять, все наверно и так знают, что такое стробоскоп.
6. Змейки. В одном направлении движутся полосы одного или разных цветов, могут менять направление движения. Настройки в общем-то как у большинства — скорость движения, цвет.
7. Пульс. Вся лента плавно пульсирует от минимального цвета до максимального и обратно. Цвета задаются пользователем, скорость пульсаций — тоже.
8. Автосмена режимов. Еще одно говорящее название — эффекты переключаются или по кругу, или случайным образом. Можно указать длительность действия эффекта, но фильтра по эффектам нет.
9. Планировщик. Реализовать эту фичу — в самых ближайших планах. Должен быть следующий функционал — пользователь настраивает какой-либо эффект, затем добавляет его в планировщик и задает длительность его выполнения, затем еще и еще. По моим расчетам, в теории можно будет задать не меньше сотни различных конфигураций, на практике наверно хватит и 10-15. Ну а планировщик будет переключать режимы согласно очередности.
И последнее — дабы не приходилось постоянно после включения выбирать эффекты и настраивать их под себя, параметры хранятся в энергонезависимой памяти, т.е. при включении пользователь увидит тот эффект, который был установлен перед выключением. Автосохранение происходит через минуту после того, как пользователь последний раз изменял настройки.
Ну а теперь — ссылки на видео. В этом плейлисте вы можете увидеть разные режимы в действии:
А вот здесь я покажу, как происходит управление параметрами
Вот такая поделка у меня получилась. Как я уже говорил, в JQuery не силен, поэтому местами там сделано неправильно или даже используются откровенные «костыли», но все работает, а это главное. В силу возможностей постараюсь развивать проект (есть мысли по добавлению расписания и режима ночника), но ваши пожелания и улучшения всячески приветствуются. Исходники появится здесь же через пару дней (как только приведу их в порядок), но если кому-то уж очень сильно невмоготу, есть ESP, лента и желание повторить этот проект — обращайтесь, отдам исходники как есть, а потом обновитесь.
И еще один важный момент. Вот что нам понадобится для работы с esp:
1. библиотека WebSockets by Markus Sattler, версия 2.0.5
2. библиотека Adafruit NeoPixel, версия 1.0.6
3. плагин ESP8266FS для заливки файлов во внутреннюю файловую систему ЕСПшки. Обратите внимание, что версия 0.3.0 у многих не работает, и у меня в том числе. Решение простое — используйте версию 0.2.0.
ДОПОЛНЕНО:
Последовательность действий для заливки программы в NodeMCU.
1. Качаем и устанавливаем среду разработки Arduino (у меня стоит версия 1.6.7), настраиваем ее для работы с NodeMCU. Как это сделать, в сети их уже неоднократно разжевано.
2. Устанавливаем библиотеки WebSockets и Adafruit Neopixel, ссылки на библиотеки есть чуть выше.
3. Качаем плагин ESP8266FS для заливки данных во внутреннюю файловую систему, устанавливаем его. Ссылка на плагин — чуть выше, у меня работает версия 0.2.0. Распаковываем этот плагин в папку tools, которая находится там, где установлена среда разработки Arduino. У меня это d:\Program Files (x86)\Arduino\tools\
4. Качаем мой архив, распаковываем его куда-нибудь. Структура архива такова:
SmartLED\
data\
smartled.h
smartled.cpp
SmartLED.ino
Ну, собственно, здесь почти все понятно: .h и .cpp — это файлы библиотеки, .ino — сам скетч, а вот папка data содержит файлы, которые необходимо будет залить во внутреннюю файловую систему ЕСПшки с помощью плагина ESP8266FS.
В общем, открываете в среде разработки файл SmartLED.ino, подключаем ЕСПшку и компилим скетч. Если все подключено верно, то скомпиленный бинарник зальется в плату. Теперь открываем пункт «ESP8266 Sketch Data Upload» в меню «Инструменты», и заливаем файлы в ЕСПшку.
После ребута можно пользоваться!
ЗЫЖ Не забудьте поправить настройки вайфая в скетче!
Вот, пожалуй, и все, что я хотел вам рассказать в этом обзоре.
Спасибо за внимание, и с наступающим Новым Годом!
Самые обсуждаемые обзоры
+72 |
3453
144
|
+51 |
3663
67
|
+31 |
2645
51
|
+39 |
3032
42
|
Автор, развивай эту тему далее.
Если менять не планируется, то в расчетах цветов железно зашиваете некий максимум ниже нынешнего 255 и забываете про все эти коэффициенты и множители. Скорость работы при этом не поменяется.
Если менять иногда все-таки хочется, причем руками и без перепрошивки модуля, то придется добавить например коэффициент яркости (дробное число от 0 до 1), домножать на него все рассчитанные цвета во всей ленте при каждом ее обновлении, и вывести управление этим коэффициентом куда-нибудь на страничку в виде ползунка.
const AccessPoint ap[] = {
{«ssid1», «password1»}, < — Имя первой точки доступа и пароль к ней
{«ssid2», «password2»} < — Имя второй точки доступа (если она нужна) и пароль к ней
};
int apCount = 2; < — Количество точек доступа, к которым можно пытаться подключиться
const char* host = «room»; < — Имя платы при регистрации в сети
{
const char* apName;
const char* apPassword;
} AccessPoint;
const AccessPoint ap[] = {
{«Keenetic-7901», «massreborn2016»},
};
int apCount = 1;
const char* host = «ESP8266MODH»;
так примерно?
Сам скомуниздил
И да — в моем случае в роли пульта может быть и смартфон, подключенный к домашней сети. Достаточно открыть в мобильном браузере страничку управления контроллером, и играйся сколько влезет.
Только надо смотреть под какую ленту, под 2801 или 2812. Протоколы разные.
Вот сейчас современные программисты все в этом — готового нет — ну нафиг!
Не программисты, а сборщики лего.
Протокол у диодов простейший, описан неплохо. Я не часто работая с ATMEGA-ой, на ATMEGA328 реализовал сам за прау часов, почитав мануал и поподбирав задержки.
А дальше все просто — прерывания работают и единственное, когда они дизейблятся — это при отправке данных в ленту, дальше энейблятся и все пашет дальше. Время отправки небольшое, никаких лагов с пультом (и не только с ним) не будет.
Есть еще один вариант — реализовать контроллер пульта на тиньке и ее опрашивать основным процом, если так хочется NeoPixel. Или наоборот :D
Зависит еще от вида приемника — это может быть простой диод, а может быть спец микруха, которая помнит последний пришедший код (их полно, стоят копейки, интерфейс хоть i2c, хоть spi) — с ней вообще проблем не будет. Ну и кроме того, большинство пультов повторяют сигнал, пока держится кнопка.
Вобщем, проблема надуманная, ИМХО.
Ну даже тогда можно так — пришел первый импульс на диод, остановили обновление ленты ждем оставшиеся импульсы с диода, пришли все — обработали команду, обновили ленту.
Ничего не дергается. Кольцо обновляется 30 раз в секунду в режиме VU-метра, зачем бОльшее обновление, чем 30 FPS я вообще не понимаю — глаз не различит. Пульт китайский, юзаются только три кнопки — mode и volume up / down.
Код может быть и выложу, как причешу — в упор только не понимаю, чего там сложного.
Задачка для начинающего — что будет, если сигнал с пульта придет как раз в промежуток между Тнб и Тзб? Как только вы сможете ответить на этот вопрос, вам станет ясно, что никакими средствами, кроме как дополнительный МК с ИК-приемником, данную проблему не победить. Ну, в этом конкретном случае, само собой.
Вы забываете, что во-первых можно использовать отдельный дешифратор для ИК и когда появилось время — считать с него распознанный им код. Этакий компромисс между решением «без отдельного контроллера».
Во-вторых Вы можете задетектить, что пойманный код неполный — в чем проблема его игнорить? Да, в этом случае будет лаг, но следующая посылка решает проблему.
Ну и совет — юзайте в критических местах асм — и все будет ок.
вторая составляющая проблемы — пойманный мусор — на его обработку и отбраковку уходит время, лента будет дергаться
второе решение — реально на практике почти невозможно пользоваться — это первое что приходит в голову — и потом отбрасывается
Если пульты вокруг не жмакать? Не, бывает конечно, но это скорее флуктуация, чем нормальное поведение.
Детекция корректности достаточно проста.
Ну да, если реально вокруг есть ИК излучение — будет лагать, я только понять не могу — откуда она возникать будет?
На худой конец на диод кембрик одеть можно от боковой засветки — если уж так все сложно.
P.S. Забыл вот еще что — если делать на стмке (по есп не знаю) — у нее есть аппаратный DMA, который вполне справляется с отдачей данных для WS-ок — там вообще можно не париться с этой проблемой. СТМка простенькая дешевле атмеги.
с новым годом, всех благ.
Если задетектил ИКсигнал — поставил ленту на паузу — т.е. пока сигнал полностью не примется — лента стоит и не меняется. Принял полностью, посчитал — мусор или нет.
Если мусор — игнорировать и снова запустить ленту, если нет — обработать и запустить ленту.
Если пульт не нажимать откуда возьмется мусор и дерганье?
Вобщем, я не знаю что там такого у Вас с длинными лентами — у меня на 64 диодах проблем не было. Мож в новогодние сделаю эксперимент с длинной лентой.
Ну и обновление ленты нужно сделать 30 раз в секунду, а не 100. Чтобы свести к минимуму возможные потери начала передачи. Ну и самое главное — можно вообще не использовать прерывания — опрашивайте диод в основном цикле — что мешает то?
Задержки по-нормальному организовать можно только через асм, ну либо постоянно смотреть что там наоптимизировал компилятор.
Я выбрал PL9823, 5мм 20шт 3.80 долл
Хм… Только что проверил снапшот, но ссылка не открывается. Вот вам ссылка на ленту.
Господа, есть ли у китаёнцев уже готовые такие решения? Пробовал как-то искать, но безрезультатно.
8266, конечно — в остальных десяти местах написано правильно
я пришел к выводу, что как раз для таких целей, телефон или комп неудобно — пульт рулит
хорошо работают на связке двух контроллеров, я для пульта использовал тиньку — обзор тут был.
ничего не мешает, кстати, подключить так к esp
А пульт это здорово, сначала тоже хотел с пультом сделать, но — увы. Сделал так как сделал, получилось не хуже, на мой взгляд. Смарт отлично справляется вместо пульта, да еще и кнопками не ограничен
Подключаюсь через вайфай-маршрутизатор, никакой авторизации соответственно не прикручивал — зачем, если незнакомых клиентов не пустит сам роутер?
А вообще, не сложно. Проект на вечер.
В рекламе само то ИМХО. Надо заказывать.
цены «не радуют» ещё больше, чем качество картинки°
для поверхностей плоских и формой а-ля телевизор — лучше всего телевизор или проектор.
Длинная извилистая цилиндрическая хрень — велкам 'пиксельная адресация'!
° появляются варианты…
ПС Останкинскую башню — честно, не имел ввиду)
У вашей платы получается нет проблем если подавать на вход логические уровни 5 вольт?
Recently there are some discussion regarding whether ESP8266 I/Os are 5V tolerant. The most active one being the article on Hackaday. The same article was shared on ESP8266 Facebook group and Espressif CEO Mr Teo Swee Ann commented that “i can reply officially here: it is 5V tolerant at the IO. while the supply voltage is at 3.3V.”
А то вечная проблема, атмега хочет 5 вольт, а RFM 3.3 сигнальные, приходится заводить атмегу на 3.3. Тут вроде пофиг, лишь бы приемной стороне хватило 3 вольта как высокий уровень.
А так то конечно все способы приведения уровней известны. Но хочется то простоты и красоты :)
да что тут рисовать, схема примерно одинакова у всех. На рисунке аналоговый вход, цифровой точно также защищен диодами, которые в состоянии «слить» (sink) 10 мА, я предполагаю, но могу ошибаться. И в большинстве случаев проще поставить стабилитрон/делитель/3й вариант, нежели рисковать входами мк, речь про сам принцип.
Интересные решения, даже мне, криворукому, захотелось повторить Ваши поделки.
Удачи и С Новым Годом!!!
написать работающий код — достижение; выложить работающее, структурированное & откомментированное — подвиг)°
Пока переделывал скетч в библиотеку, вылезло несколько неприятных косяков. Но вроде бы все получилось, сейчас комментарии к коду дописываю и публикую.
Еще какой момент. Пришел к выводу что цвета нужно будет подобрать вручную и захардкодить. По той причине, что большинство переходных оттенков смотрятся очень блекло срываясь в сторону белого свечения. И это на мой взгляд смотрится не очень привлекательно. (У меня не лента а гирлянда на 2812)
В остальном оно работает, работает прикольно. Спасибо вам за исходники, начинать изучение ESP с готового проекта намного проще и интереснее.
Насчет рандомной генерации цветов — да, тоже были мысли что почти-белого цвета многовато. Есть определенные идеи, как заставить цвета быть не такими, эммм, однотонными. И еще — не понял насчет «хардкодить»… там же вроде прямо со страницы линий можно задать 10 произвольных цветов, или вы про другой режим говорите?
Попробую это воплотить в стационарную подсветку праздничную, для загородного дома. Масштабируемость, как мне кажется, есть.
И в-третьих, вот эти строки
в репозите ардуиновской IRRemote какбэ намекают, что ваши слова В библиотеке IRRemote они не используются — не соответствуют действительности. А так-то да, приемник прекрасно работает на любой цифровой ноге, но работает неправильно, если прерывания где-либо в коде отключаются.
А вот здесь вы можете увидеть строку
и я надеюсь дальнейшие вопросы и сомнения отпадут…
ЗЫЖ дуиновская IRRemote на ЕСПшке не работает.
p.s. и да… я свои слова проверил на реальном коде
никто не заморочился написанием эффектов на базе скриптов, которые бы генерили дамп и этот дамп потом проигрывался бы
на пикабу был пост пару дней назад, не твой часом? там тоже с телефона регуляторы были, только интерфейс другой и эффекты получше
Мечтаю реализовать когда-то что-то типа этого)
в прошлый год делал себе ленту такую, но на создание эффектов уйдет не один день
в этот раз делал просто эффекты скриптом и то готовые взял, их еще трудней написать
поэтому и нужен такой контроллер, который бы имел вебморду + общий хостинг с эффектами, где каждый бы мог шарить свои эффекты, а контроллер бы потом дергал дамп и проигрывал бы
можно было бы заморочиться в этот год с таким сервисом, так что если кто может быдлокодить на пхп и под 8266, то давайте сделаем, за год должны управиться
скиньте мне ваш скайп на почту crap kalobyte.com
договоримся о дате выхода на связь в конфу
скиньте мне ваш скайп на почту crap kalobyte.com
договоримся о дате выхода на связь в конфу
Мечтаю реализовать когда-то что-то типа этого)
Уважаемый автор, вы видимо в теме. Чтобы не рыть долго не подскажете, а можно управлять платой, подав на какой-то вход какое-то напряжение, и тогда плата выбрала бы какую-то программу и её выполнила? Хочу сделать себе поворотники полосой (ну да игрушка), чтобы получила сигнал левого — выдала на диодную полоску такую-то программу., правого — такую-то на другую полоску. получила на оба — оба включили третью программу (т.е. wifi мне не нужен в разрезе для транспрта, но раз он там есть то ладно).
Нашел уже обзор, надо будет тоже запилить.
Тоже занят таким проектом. Ищу способ управления лентой.
По MQTT подключение к серверу умного дома, а оттуда уже можно кучей способов рулить. Вот неплохой пример: github.com/bruhautomation/ESP-MQTT-Digital-LEDs
Простите за оффтоп — у вас на фото изображён сетевой фильтр с отображением мощности, напряжения и т.д.
Сколько ни гуглил, не нашёл такую модель, даже на сайте производителя.
Подскажите пожалуйста — где найти такой фильтр с дисплеем?
В общем, вариантов решения два. Первый — вы можете обновить недогруженную страницу — тогда у вас часть файлов будет взята из кэша, а недостающее загружено с ЕСПшки. Второй, более быстрый и наверно менее проблемный — вы можете открыть страницу index.html из папки data в браузере прямо со своего локального диска, в самом низу страницы можно будет заметить поле «Адрес контроллера». Подставите туда айпишник своего контроллера, ткнете куда-нибудь на пустое место, и через секунду-две можете попробовать порулить своей ЕСПшкой.
Причины такого разного поведения одной и той же ЕСПшки на разных роутерах для меня так и остались загадкой. В инете находил упоминание, что ЕСП очень медленно отдает данные, но говорилось также, что это было очень давно и в новых версиях якобы уже пофиксили.
И еще раз — вам необязательно грузить страницу управления по сети с ЕСПшки. Специально для таких случаев я сделал возможность управлять с локальной страницы: при открытии страницы с диска просто появляется дополнительное поле, в котором необходимо указать IP-адрес контроллера. Попробуйте, возможно для вас этот способ будет удобнее.
И второй вопрос. Можно ли приспособить под уже идущую с али WS2812B?
Страница не открывается.
2All: Если адрес недоступен — киньте почту в личку, отправлю архив всем кому он нужен
typedef struct AccessPoint
{
const char* apName; — Вот это что?
const char* apPassword; — Вот это что?
} AccessPoint;
const AccessPoint ap[] = {
{«ssid1», «password1»}, — Тут я так понимаю имя точки доступа
{«ssid2», «password2»} — Тоже самое. имя точки доступа
};
int apCount = 2; — количество точек доступа.
const char* host = «room»;
Дальнейшее его развитие не предусматривается?
Да, когда-то была такая проблема. Появлялась при частом изменении параметров эффектов (например, если подергать несколько раз ползунки цвета или скорости), но я ее давненько исправил, если не ошибаюсь. Возможно, здесь код устарел…
Проверял работу этой программы на двух нодемках и на вемосе мини — везде работало одинаково.
В текущей конфигурации эта поделка практически неработоспособна, хотя сама идея очень интересна.
Уважаемый just_a_minute, если у Вас есть желание\время\возможность, пожалуйста, доведите программу до ума. Интерес к Вашей разработке у посетителей сайта есть, тем более что скоро Новый Год.
Esp 8266 прошил, могу зайти на вэб страничку с настройками, но лентой управлять не могу.
А как у Вас дела с изготовлением цветомузыки?
Забыл добавить. После ребута появляется сеть с именем модуля, причем открытая. Так и должно быть?
Строка 236 smartled.h:
И, кстати, не работают настройки «разноцветные змейки», «разноцветные вспышки» и т. д., не знаю, с чем это связано.
Было:
Стало:
Всего восемь таких мест.
Или можно заменить файл на скачанный по этой ссылке