Я уже много лет пытался сделать необычную звезду на новогоднюю ёлку. Первым вариантом была звезда с UV-светодиодами. Они просто светили без каких-либо фишек. Вторая версия звезды была со светодиодной лентой. Опять же ничего интересного — просто статическое свечение. Были задумки доделать режимы, но никак не хватало времени.
К празднованию 2015 года я решил подготовиться заранее, начав разработку новой звезды за месяц до нового года. Мне как раз пришла первая партия новых копеечных (3$) SoC ESP8266. Если интересно, что из этого получилось, прошу под кат.
ESP8266 — платформа достаточно новая, но на Хабре и Гиктаймс уже есть несколько статей по этой теме, например: «ESP8266: Революция в мире интернета вещей» и «Работа с ESP8266: Собираем компилятор и пишем первую прошивку».
Последняя ссылка — это небольшой how-to по настройке окружения для создания прошивок под ESP8266.
Сначала я определился с тем, что хочу получить от девайса.
Основными требованиями были:
1. Возможность включать\выключать ёлку целиком через HTTP протокол;
2. Возможность установки цвета каждого луча звезды через HTTP протокол;
3. Наличие различных «готовых» режимов для работы звезды.
Для подсветки лучей звезды я решил использовать пиксельную гирлянду на чипе LPD6803 (просто она у меня уже была).
У меня было два варианта создания девайса.
Первый вариант — использовать связку ESP8266 с прошивкой AT и Arduino Pro Mini. В этом случае мне требовалось бы только прописать логику работы: все библиотеки под Arduino уже есть. Да и регуляторы напряжения на борту Arduino Pro Mini уже имеются. Но это же неинтересно…
Поэтому я пошёл по второму пути — использование только ESP8266 без Arduino.
У меня была в наличии ESP8266 модификации 01 (самая популярная). Вот такая:
Эта модификация имеет два выведенных GPIO порта, плюс порты UART_RX и UART_TX можно перевести в режим GPIO. Для моей поделки требуется три GPIO порта: DATA и CLK для LPD6803 и порт для управления релюшкой включения\выключения всей ёлки.
Для программирования ESP8266 я решил использовать USB-UART конвертер на чипе PL2303 (который легко купить на ebay или aliexpress за пару долларов). Данный конвертер имеет четыре пина: +5В, GND, RX, TX. Проблема в том, что ESP8266 работает на 3.3В и к 5В не толерантен. По этой причине (и просто для удобства) я решил сделать что-то похожее на development board для ESP8266:
Эта плата понижает напряжение до 3.3В с помощью регулятора LM317, имеет пины для вывода GPIO, UART, GND, 3.3В, 5В и DIP-переключатели для перевода ESP8266 в режим прошивки (GPIO0 на GND, GPIO2 на 3.3В).
Теперь немного о реализации. Основная часть всего проекта это драйвер для LPD6803. Его я портировал из Arduino библиотеки AdaFruit. Рассказывать о принципах работы LPD6803 в рамках этой статьи я не буду, т.к. материал тянет ещё на одну статью.
В моей реализации GPIO0 используется для подключения к DATA LPD6803, а GPIO2 к CLK. Для релюшки мне потребовалось получить ещё один GPIO вывод. Грязные хаки применять желания не было, поэтому я просто переназначил UART_RX в GPIO (всё равно никакого ввода от пользователя моя прошивка не поддерживает). Вот эта строчка кода переводит UART_RX в GPIO3:
В качестве веб-сервера я использовал код от товарища Sprite_tm. Этот веб-сервер, насколько я знаю, используется практически во всех любительских проектах на ESP8266. В этот веб-сервер уже включена функциональность подключения девайса к домашней сети. По-умолчанию, девайс работает в режиме точки доступа. После подключения к этой точке доступа пользователь может зайти браузером по адресу 10.10.10.1/wifi. На этой страничке он сможет выбрать нужную сеть для подключения (при необходимости можно выбрать скрытую сеть и указать пароль). Все ответы веб-сервера можно получить в JSON формате, что очень удобно для интеграции в различные системы и приложения.
Теперь немного о железной реализации. Начнём с корпуса. Для него я выбрал старую звезду, в которой когда-то стояли минилампы накаливания. Выглядит корпус так:
Мне повезло, т.к. RGB-светодиоды с чипами LPD6803 идеально встали в фиксаторы для ламп накаливания:
Модуль ESP8266 я решил разместить непосредственно в звезде, т.к. качество Wi-Fi сигнала на верхушке ёлки будет лучше, чем под ней.
Под ёлкой же я установил блок питания 12В и самодельную плату такого вида:
Как видно, на ней два регулятора напряжения, которые выдают 5В и 3.3В. 5 вольт используется LPD6803, а 3.3 вольта, как уже писалось выше, кушает ESP8266. Кроме регуляторов на плате размещена 12В релюшка. Дёргается через транзистор. От коробочки под ёлкой к звезде идёт 4-жильный кабель: 3.3В, 5В, GND и канал управления реле.
На данный момент в работе этой звезды существует проблема, связанная с багой в обёртке TCP\IP стека ESP8266.
Чтобы решить эту проблему, нужно перейти на прямое использование lwip без обёртки.
В планах развития проекта есть две вещи:
1. Реализовать работу через протокол MQTT;
2. Подружить звезду с OpenHab.
Ну и напоследок, видео работы. Для управления используется Android приложение (сырое, поэтому исходники не выкладываю). Озвучивает жена:
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.