Почитывая обзоры на Муське, я узнал про замечательную вещь — светодиоды с пиксельной адресацией, а также увидел интересный вариант применения ленты для создания праздничного настроения. Было решено соорудить нечто подобное, но, скажем так, на базе чего-то более перспективного и интересного, чем ардуино из обзора sav13, и не настолько сложно, как это сделал yurok. Встречайте — esp8266 в роли этого самого «перспективного и интересного»! ДОПОЛНЕНО: Добавлен скетч для esp8266
Сразу оговорюсь — в обзоре будет очень мало работы паяльником и много букв, если кому-то интересен результат — прокручивайте вниз, фото и видео прилагается.
Итак, почему не arduino, тем более что у меня их уже имеется несколько штук? Дуина, конечно, хороша: для нее написано множество библиотек на все случаи жизни, имеется огромное сообщество разработчиков, привычная среда разработки и все такое… Но крошечный объем памяти — 32 кб на всё про всё, причем всего 2 кб под переменные — резко ограничивает полет фантазии для реализации эффектов и заставляет задуматься о смысле жизни искать что-то более мощное, но желательно не очень дорогое.
Прогресс не стоит на месте, и вот он, подходящий кандидат — микроконтроллер esp8266. Производителями готовых решений выпускаются различные платы и модули с этим чипом — практически на любой вкус и под любые цели. Можно отдельно отметить несколько любопытных вариантов.
1. ESP-09.
Чемпион по миниатюризации: квадратик «сантиметр на сантиметр». В каком-то обзоре один из муськовчан интересовался, что он может воткнуть в условиях очень ограниченного пространства… Вот и ответ! В наличии 1 мегабайт памяти, демократичный ценник (впрочем, как и на все платы на базе esp8266) — что еще надо? Из минусов — выводы на антенну и GPIO 0, 2, 12, 13, 14 и 15 находятся внизу, и для монтажа такое подойдет не всем.
Представляет собой прямоугольную плату 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» в меню «Инструменты», и заливаем файлы в ЕСПшку.
После ребута можно пользоваться!
ЗЫЖ Не забудьте поправить настройки вайфая в скетче!
Вот, пожалуй, и все, что я хотел вам рассказать в этом обзоре.
Спасибо за внимание, и с наступающим Новым Годом!
Планирую купить+160Добавить в избранноеОбзор понравился+143
+289
Прикольная штука, можно попробовать добавить такой функционал:) Только уже после НГ. Тем более что мысли по развитию проекта имеются, я собирался сделать еще как минимум режим ночника с автовыключением, про цифровую обработку звукового сигнала с отображением на ленте тоже подумывал и почитывал
Эта лента состоит из RGB-диодов, соответственно для «диммирования» необходимо пропорционально изменять яркость каждого компонента цвета на диодах. Статичного освещения в моей реализации нет, но можно выбрать режим «пульс» и установить одинаковые значения яркости в максимуме и минимуме — получится неменяющееся освещение заданного цвета с заданной яркостью. Как-то так…
Вот собственно и интересует при динамическом изменении света в добавок регулировать еще и яркость. Вот возьмем в пример«змейку», можно ли записать вычитание или добавление какого то переменного значения из каждого цвета RGB, а потом уже вновь появляющиеся значения цветов по отдельности управлять как у Вас?
Там скорее не вычитание нужно, а деление или умножение на некий коэффициент яркости. Но так-то да, это не сложно, хотя например для режима «волны» увеличение количества математичских операций нежелательно, т.к. нужно пересчитывать значения несколько раз в секунду для каждого диода в ленте.
Одно утверждение противоречит другому)))
Если менять не планируется, то в расчетах цветов железно зашиваете некий максимум ниже нынешнего 255 и забываете про все эти коэффициенты и множители. Скорость работы при этом не поменяется.
Если менять иногда все-таки хочется, причем руками и без перепрошивки модуля, то придется добавить например коэффициент яркости (дробное число от 0 до 1), домножать на него все рассчитанные цвета во всей ленте при каждом ее обновлении, и вывести управление этим коэффициентом куда-нибудь на страничку в виде ползунка.
Да да меняется исключительно ползунком. Благодарю за ответ! «более её не менять. Изменять лишь при желании» это я так описал работу ползунка от ручного управления) Ставить там рандомные изменения еще и яркости и в мыслях не было) Благодарю за ответ. Сколько +- таких световых программ, как у Вас уместится на эти 4 мб?
Сложно сказать, но думаю — фантазия закончится раньше. В моем случае эффекты создаются программно, поэтому один эффект — это лишь маленький кусочек двоичного кода в составе прошивки, а не толстые сгенерированные файлы с предопределенными цветами.
Будьте как добры объяснить человеку далёкому. Строчку ЗЫЖ Не забудьте поправить настройки вайфая в скетче! все остальные страдии заливки и настройки как по моему мнению были успешно выполнены.) вот на днях пришло всё с аллика, чешутся руки всё приладить)
Вот эти строки в скетче каждый должен править под себя:
const AccessPoint ap[] = {
{«ssid1», «password1»}, < — Имя первой точки доступа и пароль к ней
{«ssid2», «password2»} < — Имя второй точки доступа (если она нужна) и пароль к ней
};
int apCount = 2; < — Количество точек доступа, к которым можно пытаться подключиться
const char* host = «room»; < — Имя платы при регистрации в сети
Вариант с ИК-пультом работать не будет, т.к. для работы ИК-приемника используются прерывания, а библиотека NeoPixel их отключает. В итоге от ИК пульта приходят не нормальные читаемые данные, а черт знает что. Чтобы такого не происходило, можно, например, использовать ардуину в связке с ЕСПшкой: дуина будет получать данные от ИК-пульта и отдавать их на ЕСП, а та, в свою очередь, будет по мере возможности применять новые режимы в соответствии с указаниями ардуины. Как-то так…
И да — в моем случае в роли пульта может быть и смартфон, подключенный к домашней сети. Достаточно открыть в мобильном браузере страничку управления контроллером, и играйся сколько влезет.
Вариант с пультом абсолютно нормально будет работать, если не использовать NeoPixel.
Вот сейчас современные программисты все в этом — готового нет — ну нафиг!
Не программисты, а сборщики лего.
Протокол у диодов простейший, описан неплохо. Я не часто работая с ATMEGA-ой, на ATMEGA328 реализовал сам за прау часов, почитав мануал и поподбирав задержки.
А дальше все просто — прерывания работают и единственное, когда они дизейблятся — это при отправке данных в ленту, дальше энейблятся и все пашет дальше. Время отправки небольшое, никаких лагов с пультом (и не только с ним) не будет.
Есть еще один вариант — реализовать контроллер пульта на тиньке и ее опрашивать основным процом, если так хочется NeoPixel. Или наоборот :D
А дальше все просто — прерывания работают и единственное, когда они дизейблятся — это при отправке данных в ленту, дальше энейблятся и все пашет дальше. Время отправки небольшое, никаких лагов с пультом (и не только с ним) не будет.
Вы уверены? Проверяли сами, или размышляете чисто теоретически? Я вот проверял, и знаете — с пультом действительно нет почти никаких проблем, пока лента очень короткая. 1-2 диода работают без проблем, а при подключении отрезка хотя бы из 20 диодов начинаются трудности. Пока отрисовывается лента, прерывания отключены, и следовательно наш ИК-приемник не реагирует на нажатие. Да, это очень короткий промежуток времени, но его достаточно, чтобы ИК-приемник не успел начать обработку сигнала с пульта с самого начала этого сигнала. А если учесть, что данные в ленту идут практически постоянно, получаем вечные затыки с прерываниями и кашу на входе ИК-приемника. Про опрос ИК-порта с дополнительного контроллера я в курсе, написал про это в обсуждении.
У меня у усилка стоит кольцо из ws-ок — 64 диода. Это кольцо одновременно является vu-метром и указателем громкости, которая задается либо энкодером либо пультом. Никаких проблем не наблюдаю. По-моему 64 диода — вполне нормальная выборка, нет?
Зависит еще от вида приемника — это может быть простой диод, а может быть спец микруха, которая помнит последний пришедший код (их полно, стоят копейки, интерфейс хоть i2c, хоть spi) — с ней вообще проблем не будет. Ну и кроме того, большинство пультов повторяют сигнал, пока держится кнопка.
Скорее проблема зависит от частоты записей в ленту — именно в момент отправки данных прерывания блокируются. Если изменять содержимое ленты не очень часто — то да, проблемы может не быть вовсе, или она будет проявляться крайне редко. В моем случае лента может перерисовываться до 100 раз в секунду — согласитесь, шанс наступить на прерывание очень высок.
А зачем перерисовывать 100 раз в секунду, если для глаза человека 30 выше крыши?
Ну даже тогда можно так — пришел первый импульс на диод, остановили обновление ленты ждем оставшиеся импульсы с диода, пришли все — обработали команду, обновили ленту.
теоретиков много, к сожалению. На практике будет иначе — ловится мусор и все будет непрерывно дергаться. Нормально можно реализовать только разделением приема и управления лентой. По крайней мере, после множества экспериментов, я пришел к этому выводу — так и сделал. В иных случаях полурабочее решение получалось. Реализуйте и выложите проект — тогда иной разговор будет. Со статикой или с редко меняющимся сигналом конечно косяки почти не заметны.
Я описал свой усилок выше в комменте — все нормально работает.
Ничего не дергается. Кольцо обновляется 30 раз в секунду в режиме VU-метра, зачем бОльшее обновление, чем 30 FPS я вообще не понимаю — глаз не различит. Пульт китайский, юзаются только три кнопки — mode и volume up / down.
Код может быть и выложу, как причешу — в упор только не понимаю, чего там сложного.
Вы походу проблему не совсем понимаете. Давайте разложу по полочкам. Допустим, у нас есть время начала блокировки (Тнб) — это когда мы начинаем отправку данных в ленту. Разумеется, рано или поздно наступит время завершения блокировки (Тзб).
Задачка для начинающего — что будет, если сигнал с пульта придет как раз в промежуток между Тнб и Тзб? Как только вы сможете ответить на этот вопрос, вам станет ясно, что никакими средствами, кроме как дополнительный МК с ИК-приемником, данную проблему не победить. Ну, в этом конкретном случае, само собой.
Вы забываете, что во-первых можно использовать отдельный дешифратор для ИК и когда появилось время — считать с него распознанный им код. Этакий компромисс между решением «без отдельного контроллера».
Во-вторых Вы можете задетектить, что пойманный код неполный — в чем проблема его игнорить? Да, в этом случае будет лаг, но следующая посылка решает проблему.
Ну и совет — юзайте в критических местах асм — и все будет ок.
Мусор-то сам по себе откуда будет возникать?
Если пульты вокруг не жмакать? Не, бывает конечно, но это скорее флуктуация, чем нормальное поведение.
Детекция корректности достаточно проста.
Ну да, если реально вокруг есть ИК излучение — будет лагать, я только понять не могу — откуда она возникать будет?
На худой конец на диод кембрик одеть можно от боковой засветки — если уж так все сложно.
P.S. Забыл вот еще что — если делать на стмке (по есп не знаю) — у нее есть аппаратный DMA, который вполне справляется с отдачей данных для WS-ок — там вообще можно не париться с этой проблемой. СТМка простенькая дешевле атмеги.
Когда ИК-приемник будет получать сигнал с середины — вот вам и мусор. А если вы даже будете детектить мусор и отбрасывать его, то где гарантия, что в следующий раз нажатие кнопки на пульте произойдет между блокировкой прерываний? Поверьте, на ЕСП я эту тему изъездил вдоль и поперек, пока возился с проектом!
Это просто и весело, stm с DMA это stm32, цена от $1.8, отдавать на диодную ленту с частотой 250-500 кгц и при этом принимать с пульта ~30 кгц нет никакой проблемы, но нужно перейти на bare-metal esp, и писать http сервер, не знаю до какого уровня там зашито, а то и TCP придется :)
с новым годом, всех благ.
Еще разок — в отсутствии ИК сигнала мусора не будет, соответственно лента будет работать без рывков.
Если задетектил ИКсигнал — поставил ленту на паузу — т.е. пока сигнал полностью не примется — лента стоит и не меняется. Принял полностью, посчитал — мусор или нет.
Если мусор — игнорировать и снова запустить ленту, если нет — обработать и запустить ленту.
Если пульт не нажимать откуда возьмется мусор и дерганье?
Вобщем, я не знаю что там такого у Вас с длинными лентами — у меня на 64 диодах проблем не было. Мож в новогодние сделаю эксперимент с длинной лентой.
Ну и обновление ленты нужно сделать 30 раз в секунду, а не 100. Чтобы свести к минимуму возможные потери начала передачи. Ну и самое главное — можно вообще не использовать прерывания — опрашивайте диод в основном цикле — что мешает то?
А зачем вообще запрещать прерывания? Там настолько жесткие требования к таймингам, что обработчики прерываний вносят «джиттер», который принимающая система не может переварить? А как без прерываний организованы задержки?
заглянул в даташит WS2813, насколько я понял длительностью импульса кодируется 0 или 1, пауза в довольно широких пределах, 24 бит/диод, каскадное соединение, т.е. для ленты из 100 диодов нужно передать 2400 логических уровней. Если дать на заполнение скажем 100 мс, то получим 4 мкс/бит. Можно попробовать таймер на такую частоту настроить, который будет выдавать очередной бит на каждом прерывании и «вешать» контроллер максимум на 1 мкс. Все остальное время предлагаю заниматься остальными делами, типа опроса пульта или преобразования Фурье, кому что нужнее :)
Затупил, для ESP этот подход неприменим, только промежуточный контроллер специально для ленты, это сведет на нет все прелести node mcu и сильно увеличит время ввода в эксплуатацию конечного изделия.
Снапшот на ленту я указывал в обзоре. Оттуда можно и на сам товар выйти, сейчас ценник стал чуть дороже (на доллар).
Хм… Только что проверил снапшот, но ссылка не открывается. Вот вам ссылка на ленту.
там изначально контроллер не знает количество пикселей в конкретной ленте, поэтому обычно решают это участками — разбивая ленту, например, по полметра — все эффекты будут «полосатые» :) так и память экономится и прочее — эффект только на полметра и дубль на остальные…
Здравствуйте, скажите, есть ли возможность использования подобных систем для автономной работы, если взять 2 аккумулятора 18650 и кусочек ленты на 10-15 диодов, это будет работать? Если будет, то как долго?
Ну, почему бы и нет. В обзоре я привел фотки с типичным и максимальным энергопотреблением 60 диодов и еспшки, можете сами прикинуть, сколько будут кушать ваши диоды
возьмите банку силы побольше, например на 10000mah, работать будет навскидку 5+ часов. В сети есть калькуляторы работы от батарейки, вводите параметры и вперед.
я пришел к выводу, что как раз для таких целей, телефон или комп неудобно — пульт рулит
хорошо работают на связке двух контроллеров, я для пульта использовал тиньку — обзор тут был.
У вас все очень круто в железячном плане, я так не умею:)
А пульт это здорово, сначала тоже хотел с пультом сделать, но — увы. Сделал так как сделал, получилось не хуже, на мой взгляд. Смарт отлично справляется вместо пульта, да еще и кнопками не ограничен
Супер. Я использую библиотеку McLighting, но ваша нравится больше. Выкладывайте поскорее исходники)) А как вы подключаетесь для управления к плате? Через роутер или напрямую?
У меня не либа, а самописный велосипед. Упорядочить и сделать из него класс разумеется можно, но ведь праздник завтра! Исходники будут обязательно, если хотите — кину вам страничку и исходники, попробуете у себя раскрутить. В паблик выкладывать непричесанный код без комментариев не хочу
Подключаюсь через вайфай-маршрутизатор, никакой авторизации соответственно не прикручивал — зачем, если незнакомых клиентов не пустит сам роутер?
всё давно сделано и продаётся
цены «не радуют» ещё больше, чем качество картинки°
для поверхностей плоских и формой а-ля телевизор — лучше всего телевизор или проектор.
Длинная извилистая цилиндрическая хрень — велкам 'пиксельная адресация'!
Я не подаю на входы платы вообще ничего, только беру с нее 3.3 вольта — управление лентой. При этом сама лента питается от 5 вольт, как и плата. Раньше у меня не получалось управлять лентой 3.3 вольтами с платы, повышал до 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 вольта как высокий уровень.
Operating Voltage: 1.8 — 5.5V (atmega) 20MHz @ 4.5 — 5.5V если частота настолько принципиальна, а если приемная сторона 5В, то ей 2.4В для лог 1 хватит, а если она еще и передает на вашу атмегу, то резисторы резисторы резисторы, а дальше защитный диод пусть сливает, сам не пробовал, UART между 5В STM8 и 3.3 «малиной» делал через оптический PC123.
Да в случае с атмегой все проще оказалось. 328 на 3.3 завелась легко на нужные 16 MHz. Это я так, про проблему «глупых» девайсов, которые не толерантны к 5 вольтам :)
А так то конечно все способы приведения уровней известны. Но хочется то простоты и красоты :)
а мне интересно, если например 10мА максимальный ток и я хочу подать 15В на 5В контроллер, то получается 15-5=10В/10мА = 1 кОм. Итого резистор 1 кОм хватит чтобы не сгорел контроллер, или даже больше, он не выйдет за нормальный режим :) мне кажется бредом, но математика говорит об обратном. Где-то ошибка в расчетах?
да что тут рисовать, схема примерно одинакова у всех. На рисунке аналоговый вход, цифровой точно также защищен диодами, которые в состоянии «слить» (sink) 10 мА, я предполагаю, но могу ошибаться. И в большинстве случаев проще поставить стабилитрон/делитель/3й вариант, нежели рисковать входами мк, речь про сам принцип.
У меня не либа, а самописный велосипед. Упорядочить и сделать из него класс разумеется можно, но ведь праздник завтра! Исходники будут обязательно, если хотите — кину вам страничку и исходники, попробуете у себя раскрутить. В паблик выкладывать непричесанный код без комментариев не хочу
Да. Добавляю последние штрихи, так сказать.
Пока переделывал скетч в библиотеку, вылезло несколько неприятных косяков. Но вроде бы все получилось, сейчас комментарии к коду дописываю и публикую.
Отпишусь в качестве фидбэка. Залил еще вчера, глянул код по диагонали и залил. Завелась с первого раза, однако время от времени плата вешается. Стабильно после множественного изменения настроек. Видимо в тот момент когда она пытается их сохранить. Гирлянда продолжает мигать, а сама еспишка наглухо пропадает из сети. Через некоторое время (видимо встроенная собачка?) ее ребутит и она снова доступна. То что она ребутится видно по гирлянде.
Еще какой момент. Пришел к выводу что цвета нужно будет подобрать вручную и захардкодить. По той причине, что большинство переходных оттенков смотрятся очень блекло срываясь в сторону белого свечения. И это на мой взгляд смотрится не очень привлекательно. (У меня не лента а гирлянда на 2812)
В остальном оно работает, работает прикольно. Спасибо вам за исходники, начинать изучение ESP с готового проекта намного проще и интереснее.
Спасибо за отзыв! Зависоны ESP (точнее это даже не зависания, а сломы) периодически случаются. Как показало вскрытие дампа — это происходит вовсе не из-за сохранения-загрузки, и вообще, похоже, не из-за моего кода. У меня несколько раз сломы происходили в глубоких дебрях внутренних вызовов. Ну, как бы, основной цикл выполняет функцию delay (внутри ESP, как известно, в это время много чего происходит), в нем идет длинная череда системных вызовов, иногда при этом память выделяется, иногда — просмотр вай-фай сетей, и примерно на 25-26 вызове происходит слом. С чего такое случается и как это побороть, я пока не разобрался, но из-за сохранения настроек и автозагрузки при рестарте проблем обычно почти не заметно.
Насчет рандомной генерации цветов — да, тоже были мысли что почти-белого цвета многовато. Есть определенные идеи, как заставить цвета быть не такими, эммм, однотонными. И еще — не понял насчет «хардкодить»… там же вроде прямо со страницы линий можно задать 10 произвольных цветов, или вы про другой режим говорите?
Можно. Библиотека IRRemote, которой я пользовался для работы с ИК-приемником, использует прерывания. Но библиотека NeoPixel отключает все прерывания во время отправки данных в ленту. В итоге — упс — IRRemote работает неправильно. Вот так…
Можно попробовать библиотеку FastLED, она вроде бы получше работает с прерываниями. Как вариант использовать ленту с APA102, для этой микросхемы не нужна такая точная синхронизация.
проблема существенно глубже, ик-приемник генерит прерывания от шума — мусора он нахватывает прилично и ему требуется распознать что это мусор или полезный сигнал, как впрочем и радиоканал, — соответственно жесткий конфликт по таймингу — нормально это дело не работает, в свое время решилось только применением тиньки на пульт (она фильтрует мусор — и передает данные только о полезных командах, которые легко буферизуются). Либо применение специальной микросхемы — что эквивалентно второму контроллеру.
Вообще то у большинства ардуин всего два внешних прерывания с номерами 0 (на digital pin 2) и 1 (на digital pin 3). В библиотеке IRRemote они не используются. А приемник IR прекрасно работает на любой цифровой ноге. Поэтому мне и неясен смысл Вашего заявления.
// Interrupt Service Routine - Fires every 50uS
// TIMER2 interrupt code to collect raw data.
// Widths of alternating SPACE, MARK are recorded in rawbuf.
// Recorded in ticks of 50uS [microseconds, 0.000050 seconds]
// 'rawlen' counts the number of entries recorded so far.
// First entry is the SPACE between transmissions.
// As soon as a the first [SPACE] entry gets long:
// Ready is set; State switches to IDLE; Timing of SPACE continues.
// As soon as first MARK arrives:
// Gap width is recorded; Ready is cleared; New logging starts
в репозите ардуиновской IRRemote какбэ намекают, что ваши слова В библиотеке IRRemote они не используются — не соответствуют действительности. А так-то да, приемник прекрасно работает на любой цифровой ноге, но работает неправильно, если прерывания где-либо в коде отключаются.
А вот здесь вы можете увидеть строку
noInterrupts(); // Need 100% focus on instruction timing
и я надеюсь дальнейшие вопросы и сомнения отпадут…
Ok, Я то про Ардуину. А в Вашем случае действительно прерывания в библиотеке используются. Но в ардуине все работает правильно, если прерывания где-либо в коде отключаются. Просто нужно понимать, что приведенная Вами функция служит для временного отключения прерываний. Бывает, что это необходимо. После отработки критического к прерываниям кода, они снова включаются функцией interrupts().
p.s. и да… я свои слова проверил на реальном коде
эффекты унылые, как и у всех подобных поделок
никто не заморочился написанием эффектов на базе скриптов, которые бы генерили дамп и этот дамп потом проигрывался бы
на пикабу был пост пару дней назад, не твой часом? там тоже с телефона регуляторы были, только интерфейс другой и эффекты получше
Почитал автора и комменты. Это класс. Я давно мечтаю об умной управляемой светомузыке. Наверное пойду по стопам автора. Спасибо за потраченное время и работу. Интересно было бы несколько лент в матрицу объединить для умных дождей и текстов. Я даже НГ ждать не буду. Кругый год на балконе развлекаловку буду транслировать :)
Мечтаю реализовать когда-то что-то типа этого)
это управляется по стандартному протоколу dmx512
в прошлый год делал себе ленту такую, но на создание эффектов уйдет не один день
в этот раз делал просто эффекты скриптом и то готовые взял, их еще трудней написать
поэтому и нужен такой контроллер, который бы имел вебморду + общий хостинг с эффектами, где каждый бы мог шарить свои эффекты, а контроллер бы потом дергал дамп и проигрывал бы
можно было бы заморочиться в этот год с таким сервисом, так что если кто может быдлокодить на пхп и под 8266, то давайте сделаем, за год должны управиться
Почитал автора и комменты. Это класс. Я давно мечтаю об умной управляемой светомузыке. Наверное пойду по стопам автора. Спасибо за потраченное время и работу. Интересно было бы несколько лент в матрицу объединить для умных дождей и текстов. Я даже НГ ждать не буду. Кругый год на балконе развлекаловку буду транслировать :)
Мечтаю реализовать когда-то что-то типа этого)
Уважаемый автор, вы видимо в теме. Чтобы не рыть долго не подскажете, а можно управлять платой, подав на какой-то вход какое-то напряжение, и тогда плата выбрала бы какую-то программу и её выполнила? Хочу сделать себе поворотники полосой (ну да игрушка), чтобы получила сигнал левого — выдала на диодную полоску такую-то программу., правого — такую-то на другую полоску. получила на оба — оба включили третью программу (т.е. wifi мне не нужен в разрезе для транспрта, но раз он там есть то ладно).
Да в общем-то не проблема. Посмотрите в примерах библиотеки NeoPixel, там есть скетч buttoncycler.ino. Наверно, на основе этого скетча вы сможете сделать именно то что вам нужно
а ссылкой не швырнёте на что-то профильное по 8266 желательно на русском? А то я об этом ещё вчера не знал и с ардуиной дел не имел и не кодер нифига. Конструктор может и соберу, но самому icq не хватит что-то накодить.
Поясните, что именно вы ищете — вам нужно больше разных эффектов или собственно интерфейс управления? Эффекты есть в разных библиотеках (даже ссылки кто-то в комментах давал), а рулить можно как минимум через синезуб или вайфай, а если чуток заморочиться — то ИК-пультом. Морды можно сделать тоже разные — начиная от блинка и заканчивая самописным софтом под ПК или Android/iOS. А можно так как у меня — обычную веб-страницу прикрутить, и управлять из любого браузера.
Интерфейс управления. Хочеться веб+MQTT.
По MQTT подключение к серверу умного дома, а оттуда уже можно кучей способов рулить. Вот неплохой пример: github.com/bruhautomation/ESP-MQTT-Digital-LEDs
Спасибо за полезный обзор!
Простите за оффтоп — у вас на фото изображён сетевой фильтр с отображением мощности, напряжения и т.д.
Сколько ни гуглил, не нашёл такую модель, даже на сайте производителя.
Подскажите пожалуйста — где найти такой фильтр с дисплеем?
Как будет возможность, проверьте пожалуйста скетч, и файлы заливаемые на флэш. Безумно хочется повторить, но запустить, чтобы заработало не хватило знаний. Загрузка страницы в браузере до конца не доходит у меня. Время загрузки страницы и скриптов около 32 секунд. HTML грузит за 7. Но милых менюшек, которые прекрасно видны по f3 в тотал командоре, в браузере не появляются — голый экран. Лента при этом показывает неспешно показывает стартовую анимацию.
Хм… Я сталкивался с такой ситуацией на старом роутере — Nexx WT 3020 отсюда, с прошивкой Падавана. Почему так происходит, я честно говоря даже не представляю, списывал на глюки роутера. На домашнем Keenetic Giga III все быстро и без затыков. Беглый анализ показал, что ЕСПшка на Зухеле отдает страницу со всеми скриптами примерно за 2-3 секунды, а на Нексе загрузка данных идет секунд 30-40, потом отваливается по таймауту.
В общем, вариантов решения два. Первый — вы можете обновить недогруженную страницу — тогда у вас часть файлов будет взята из кэша, а недостающее загружено с ЕСПшки. Второй, более быстрый и наверно менее проблемный — вы можете открыть страницу index.html из папки data в браузере прямо со своего локального диска, в самом низу страницы можно будет заметить поле «Адрес контроллера». Подставите туда айпишник своего контроллера, ткнете куда-нибудь на пустое место, и через секунду-две можете попробовать порулить своей ЕСПшкой.
Причины такого разного поведения одной и той же ЕСПшки на разных роутерах для меня так и остались загадкой. В инете находил упоминание, что ЕСП очень медленно отдает данные, но говорилось также, что это было очень давно и в новых версиях якобы уже пофиксили.
Спасибо, большое! Сменил роутер с mi Mini прошитый Padavan-ом, на tl-mr3020 и смог загрузить страницу и управлять. Скорость загрузки низкая (секунд 15), но работает. Про кеширование — нигде не кешировало. Вопрос вы делали согласование уровней 3.3-5вольт или на прямую на порт ленту подключаете?
Никакого согласования я не делал, подключение ЕСПшки видно на предпоследней фотке, где она вверх ногами на блоке лежит. Там 3 провода, один из них напрямую идет на ленту.
И еще раз — вам необязательно грузить страницу управления по сети с ЕСПшки. Специально для таких случаев я сделал возможность управлять с локальной страницы: при открытии страницы с диска просто появляется дополнительное поле, в котором необходимо указать IP-адрес контроллера. Попробуйте, возможно для вас этот способ будет удобнее.
Если можно, дополните пожалуйста обзор электрической схемой с надписями где какой вывод у esp.
И второй вопрос. Можно ли приспособить под уже идущую с али WS2812B?
Я думал, что с выводами и так понятно — там два провода питают ЕСПшку, и всего один вывод на ленту идет, номер можно самостоятельно поменять в скетче. У меня это нодемковский вывод D4, также известный как GPIO2. Там фотка есть, на которой видно куда провода цепляются. С лентой ws2812b проблем быть не должно, т.к. она поддерживается библиотекой Neopixel.
У ws2813 четвертый контакт является запасным входом, который подключается параллельно входу предыдущего светодиода, таким образом, если один светодиод выходит из строя, то цепочка за ним не перестаёт работать.
Хостер похоже меняет сервера (у меня бесплатный хостинг), поэтому с доступом проблемы. Уже неделю наверно:(…
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»;
Само собой, предусматривается! В ближайшее время собираюсь запилить новые эффекты. Еще одна штука — я попробую (но пока ничего не обещаю) сделать такую «светомузыку», как на видео в этом комментарии; мысли есть, детали тоже, осталось найти время.
Буду внимательно следить за развитием проекта. Сам пока только начинаю изучать программирование МК. Попробовал данные проект на плате Wemos D1 mini и обнаружил что периодически контроллер не отвечает и нет возможности переключить эффекты.
Удачи вам в изучении, это интересно)))
Да, когда-то была такая проблема. Появлялась при частом изменении параметров эффектов (например, если подергать несколько раз ползунки цвета или скорости), но я ее давненько исправил, если не ошибаюсь. Возможно, здесь код устарел…
Проверял работу этой программы на двух нодемках и на вемосе мини — везде работало одинаково.
Что-то нарыл в закромах, но не факт что последнее и правильное (винт сбоил весной, но вроде бы почти все выжило). Загляните сюда, с новым скетчем должно работать лучше. Если все хорошо — отпишитесь потом здесь, иначе пишите на ящик, будем пробовать решить вопрос.
Попробовал обе версии скетча — в новой с зависаниями ситуация даже хуже — виснет после 1-2 попыток изменения параметра, а зачастую сразу. Страничка грузится больше минуты, и не всегда до конца, при ее загрузке или обновлении анимация не работает. При открытии странички локально настройки каждый раз обновляются секунд по 15, при этом анимация так же стоит.
В текущей конфигурации эта поделка практически неработоспособна, хотя сама идея очень интересна.
Уважаемый just_a_minute, если у Вас есть желание\время\возможность, пожалуйста, доведите программу до ума. Интерес к Вашей разработке у посетителей сайта есть, тем более что скоро Новый Год.
Подскажите, приобрел 5м ленты 2812, чипы 4х пиновые. При подключении ленты к БП, светодиоды сразу горят белым светом (при 5v потребление 3А), разве так должно быть?
Esp 8266 прошил, могу зайти на вэб страничку с настройками, но лентой управлять не могу.
Проверьте подключение ЕСПшки к ленте, возможно, прицепились не к тому выводу. И еще не знаю как 2812 диоды воспринимают 3.3 вольта в качестве логической единицы, возможно что нужно 5 вольт. Тогда только согласовывать логические уровни надо
Скажите, а это все такие модули кривые или только мне попались? В Win10Pro видятся только при нажатии последовательности Prog и Reset. После заливки скетча, модуль перезагружается и отваливается, приходится заново вводить в режим программирования для заливки во внутреннюю память. Но и после этого все равно модуль не коннектится с роутером.
Забыл добавить. После ребута появляется сеть с именем модуля, причем открытая. Так и должно быть?
Собрал такую гирлянду, спасибо автору за труд. Имею небольшое дополнение: если у вас в ленте больше 256 диодов, необходимо изменить тип переменной pCount. Строка 75 smartled.cpp:
Добрый день всем! Тема еще жива или нет? Новый год очередной подходит. Проект не доведен до конца? Все так же тормозит и виснет или у кого нибудь есть рабочая версия?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Автор, развивай эту тему далее.
Если менять не планируется, то в расчетах цветов железно зашиваете некий максимум ниже нынешнего 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:
И, кстати, не работают настройки «разноцветные змейки», «разноцветные вспышки» и т. д., не знаю, с чем это связано.
Было:
Стало:
Всего восемь таких мест.
Или можно заменить файл на скачанный по этой ссылке
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.