- PVSM.RU - https://www.pvsm.ru -
Я уже много лет пытался сделать необычную звезду на новогоднюю ёлку. Первым вариантом была звезда с UV-светодиодами. Они просто светили без каких-либо фишек. Вторая версия звезды была со светодиодной лентой. Опять же ничего интересного — просто статическое свечение. Были задумки доделать режимы, но никак не хватало времени.
К празднованию 2015 года я решил подготовиться заранее, начав разработку новой звезды за месяц до нового года. Мне как раз пришла первая партия новых копеечных (3$) SoC ESP8266. Если интересно, что из этого получилось, прошу под кат.
ESP8266 — платформа достаточно новая, но на Хабре и Гиктаймс уже есть несколько статей по этой теме, например: «ESP8266: Революция в мире интернета вещей» [1] и «Работа с ESP8266: Собираем компилятор и пишем первую прошивку» [2].
Последняя ссылка — это небольшой 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 [3]. Рассказывать о принципах работы LPD6803 в рамках этой статьи я не буду, т.к. материал тянет ещё на одну статью.
Для интересующихся дам несколько полезных ссылок:
— Даташит [4]
— Мой код под ESP8266 на github.com [5]
В моей реализации GPIO0 используется для подключения к DATA LPD6803, а GPIO2 к CLK. Для релюшки мне потребовалось получить ещё один GPIO вывод. Грязные хаки [6] применять желания не было, поэтому я просто переназначил UART_RX в GPIO (всё равно никакого ввода от пользователя моя прошивка не поддерживает). Вот эта строчка кода переводит UART_RX в GPIO3:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3);
В качестве веб-сервера я использовал код [7] от товарища Sprite_tm. Этот веб-сервер, насколько я знаю, используется практически во всех любительских проектах на ESP8266. В этот веб-сервер уже включена функциональность подключения девайса к домашней сети. По-умолчанию, девайс работает в режиме точки доступа. После подключения к этой точке доступа пользователь может зайти браузером по адресу 10.10.10.1/wifi [8]. На этой страничке он сможет выбрать нужную сеть для подключения (при необходимости можно выбрать скрытую сеть и указать пароль). Все ответы веб-сервера можно получить в JSON формате, что очень удобно для интеграции в различные системы и приложения.
По софтовой части рассказать мне больше нечего, код прошивки доступен на github.com [9].
Теперь немного о железной реализации. Начнём с корпуса. Для него я выбрал старую звезду, в которой когда-то стояли минилампы накаливания. Выглядит корпус так:
Мне повезло, т.к. RGB-светодиоды с чипами LPD6803 идеально встали в фиксаторы для ламп накаливания:
Модуль ESP8266 я решил разместить непосредственно в звезде, т.к. качество Wi-Fi сигнала на верхушке ёлки будет лучше, чем под ней.
Под ёлкой же я установил блок питания 12В и самодельную плату такого вида:
Как видно, на ней два регулятора напряжения, которые выдают 5В и 3.3В. 5 вольт используется LPD6803, а 3.3 вольта, как уже писалось выше, кушает ESP8266. Кроме регуляторов на плате размещена 12В релюшка. Дёргается через транзистор. От коробочки под ёлкой к звезде идёт 4-жильный кабель: 3.3В, 5В, GND и канал управления реле.
На данный момент в работе этой звезды существует проблема, связанная с багой в обёртке TCPIP стека ESP8266.
Чтобы решить эту проблему, нужно перейти на прямое использование lwip без обёртки.
В планах развития проекта есть две вещи:
1. Реализовать работу через протокол MQTT;
2. Подружить звезду с OpenHab [10].
Ну и напоследок, видео работы. Для управления используется Android приложение (сырое, поэтому исходники не выкладываю). Озвучивает жена:
Автор: popsodav
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy/81563
Ссылки в тексте:
[1] «ESP8266: Революция в мире интернета вещей»: http://habrahabr.ru/company/coolrf/blog/235881/
[2] «Работа с ESP8266: Собираем компилятор и пишем первую прошивку»: http://geektimes.ru/post/241842/
[3] AdaFruit: https://github.com/adafruit/LPD6803-RGB-Pixels
[4] Даташит: http://www.adafruit.com/datasheets/LPD6803.pdf
[5] Мой код под ESP8266 на github.com: https://github.com/popsodav/esp8266-lpd6803
[6] Грязные хаки: http://esp8266.ru/esp8266-esp-01-hacked/
[7] использовал код: http://www.esp8266.com/viewtopic.php?f=6&t=376
[8] 10.10.10.1/wifi: http://10.10.10.1/wifi
[9] код прошивки доступен на github.com: https://github.com/popsodav/umka-xmas-star-esp8266
[10] OpenHab: http://www.openhab.org/
[11] Источник: http://habrahabr.ru/post/249643/
Нажмите здесь для печати.