[Из песочницы] Новогодняя звезда с Wi-Fi на базе ESP8266

b3701e79e509461aa6e4712f4b1b625c.jpgЯ уже много лет пытался сделать необычную звезду на новогоднюю ёлку. Первым вариантом была звезда с 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 (самая популярная). Вот такая:

9c10acb1a30a4d7fa0f03efbc420f60c.jpg

Эта модификация имеет два выведенных 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:

f3ec1cc7aeb241e58eb122b71a9908eb.jpg

Эта плата понижает напряжение до 3.3В с помощью регулятора LM317, имеет пины для вывода GPIO, UART, GND, 3.3В, 5В и DIP-переключатели для перевода ESP8266 в режим прошивки (GPIO0 на GND, GPIO2 на 3.3В).

Теперь немного о реализации. Основная часть всего проекта это драйвер для LPD6803. Его я портировал из Arduino библиотеки AdaFruit. Рассказывать о принципах работы LPD6803 в рамках этой статьи я не буду, т.к. материал тянет ещё на одну статью.

Для интересующихся дам несколько полезных ссылок:

— Даташит— Мой код под ESP8266 на github.com

В моей реализации GPIO0 используется для подключения к DATA LPD6803, а GPIO2 к CLK. Для релюшки мне потребовалось получить ещё один GPIO вывод. Грязные хаки применять желания не было, поэтому я просто переназначил UART_RX в GPIO (всё равно никакого ввода от пользователя моя прошивка не поддерживает). Вот эта строчка кода переводит UART_RX в GPIO3:

PIN_FUNC_SELECT (PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3); В качестве веб-сервера я использовал код от товарища Sprite_tm. Этот веб-сервер, насколько я знаю, используется практически во всех любительских проектах на ESP8266. В этот веб-сервер уже включена функциональность подключения девайса к домашней сети. По-умолчанию, девайс работает в режиме точки доступа. После подключения к этой точке доступа пользователь может зайти браузером по адресу 10.10.10.1/wifi. На этой страничке он сможет выбрать нужную сеть для подключения (при необходимости можно выбрать скрытую сеть и указать пароль). Все ответы веб-сервера можно получить в JSON формате, что очень удобно для интеграции в различные системы и приложения.По софтовой части рассказать мне больше нечего, код прошивки доступен на github.com.

Теперь немного о железной реализации. Начнём с корпуса. Для него я выбрал старую звезду, в которой когда-то стояли минилампы накаливания. Выглядит корпус так:

b0834270e92647f08568c21df4858441.jpg

Мне повезло, т.к. RGB-светодиоды с чипами LPD6803 идеально встали в фиксаторы для ламп накаливания:

b73ae05b579b480db9e75a9a09284b82.jpg

Модуль ESP8266 я решил разместить непосредственно в звезде, т.к. качество Wi-Fi сигнала на верхушке ёлки будет лучше, чем под ней.

Под ёлкой же я установил блок питания 12В и самодельную плату такого вида:

0604a39a4bce4d479f90ce4df8ce79f6.jpg

Как видно, на ней два регулятора напряжения, которые выдают 5В и 3.3В. 5 вольт используется LPD6803, а 3.3 вольта, как уже писалось выше, кушает ESP8266. Кроме регуляторов на плате размещена 12В релюшка. Дёргается через транзистор. От коробочки под ёлкой к звезде идёт 4-жильный кабель: 3.3В, 5В, GND и канал управления реле.

На данный момент в работе этой звезды существует проблема, связанная с багой в обёртке TCP\IP стека ESP8266.Чтобы решить эту проблему, нужно перейти на прямое использование lwip без обёртки.

В планах развития проекта есть две вещи:1. Реализовать работу через протокол MQTT;2. Подружить звезду с OpenHab.

Ну и напоследок, видео работы. Для управления используется Android приложение (сырое, поэтому исходники не выкладываю). Озвучивает жена:

[embedded content]

© Habrahabr.ru