Прошло чуть больше года с момента написания моей первой статьи про устройство для качания детской кроватки. За это время мною был разработан новый пульт управления с экраном, а затем и web-интерфейс к этому устройству. Если интересно узнать подробности — добро пожаловать под кат.
Вначале — пара слов о самом устройстве, небольшое краткое содержание предыдущих серий.
Итак, устройство предназначено для качания детской кроватки с маятниковым механизмом. На неподвижную часть кроватки устанавливается приводной блок с электромагнитом и электроникой внутри. На подвижной части закрепляется неодимовый магнит. Пролетая над электромагнитом, постоянный магнит наводит ЭДС, по форме которой определяется момент подключения этого же электромагнита к источнику питания. Таким образом, электромагнит в нужные моменты времени подталкивает постоянный магнит и, следовательно, подвижную часть кроватки. В те же моменты времени, когда электромагнит не запитан, он играет роль датчика положения подвижной части кроватки.
Первый экземпляр устройства я сделал для себя. Потом оказалось, что такие устройства можно продавать, и уже три с небольшим года я и занимаюсь этим с разной степенью успеха. Сейчас небольшими партиями производятся четыре модели устройства и продаются через одного из крупных российских производителей детской мебели.
В первой модели устройства для качания детской кроватки в качестве пульта управления используется вот такой пульт-брелок. На нем четыре кнопки, имеющие функциональность «Пуск», «Стоп», «Сильнее» и «Слабее». Соответственно, с помощью этого пульта можно запускать и останавливать качание, а также менять его интенсивность – выбирать один из шести возможных уровней. Брелок работает на частоте 433 МГц и никакой обратной связи не имеет.
Через какое-то время был разработан упрощенный вариант устройства (модель 0), вообще без пульта управления. Качнули кроватку рукой – и она продолжает качаться неограниченно долго. Остановили – качание прекратилось.
При разработке следующей, второй модели устройства качания (модель 2) основной задачей было добавить таймер укачивания и запуск качания от крика ребенка. И это оказалось проблемой.
Дело в том, что время качания нужно как-то задавать, в часах и минутах. И чувствительность микрофона тоже как-то было бы неплохо устанавливать. А для всего этого нужен интерфейс, и «слепого» пульта с четырьмя кнопками здесь явно недостаточно.
Конечно, первой мыслью было сделать на корпусе устройства какую-нибудь индикацию. Поставить там несколько светодиодов и/или небольшой дисплей. А управлять также, с помощью этого маленького пульта. Однако, ущербность этого решения заключается в том, что устройство в общем случае устанавливается в недоступном месте, где-нибудь на задней стенке кроватки у стены. И индикации на корпусе в этом случае просто не будет видно.
Так было принято решение сделать пульт управления с дисплеем. Чуть меньше года разработки – и устройство с пультом готово!
Внутри пульта – ATMega32A, в качестве дисплея – экран от Nokia 1202, приемопередатчик – NRF24L01+. Корпус – готовый стандартный, клавиатура – пленочная. С пульта можно задавать время укачивания, чувствительность микрофона, интенсивность качания, а также запускать и останавливать процесс. Для случая нахождения нескольких кроваток в одном помещении предусмотрена возможность смены канала управления, благо NRF24L01+ это легко позволяет.
Пульт и устройство все время находятся в диалоге между собой. Сделано это для обратной связи – на экране отображается актуальное состояние устройства, а именно — идет ли процесс качания или нет (если идет — изображение кроватки на пульте тоже качается), сколько времени осталось качать, каковы текущие уставки интенсивности укачивания и чувствительности микрофона. Для того, чтобы батарейки в пульте управления не садились слишком быстро, предусмотрен режим сна – если на кнопки пульта никто не нажимает в течение получаса, пульт «засыпает».
После разработки и запуска «Модели 2» пусть в скромное, но все же производство, я продолжал думать об усовершенствовании устройства качания. Вот было бы здорово, думал я, если бы можно было управлять устройством с сотового телефона! Или с планшета. Я вот, например, когда сплю, кладу рядом с собой сотовый телефон. Там и будильник, и почта, и почитать что-нибудь можно перед сном. И ведь наверняка многие молодые родители делают также. Зачем же использовать отдельный пульт управления устройством качания, когда вот она – универсальная вещь – смартфон или планшет! Пусть он и будет пультом управления, думал я.
Какие более-менее подходящие радиоинтерфейсы есть в современном смартфоне? Bluetooth и Wi-Fi. Поначалу я рассматривал возможность управления устройством качания по Bluetooth. Из плюсов – легко реализовать со стороны устройства. Можно применить модуль – «мост» Bluetooth-UART, вот задача и решена.
Правда, со стороны смартфона – сплошные проблемы.
Начать с того, что держать постоянно включенный Bluetooth на телефоне – плохая идея. Далее, под каждую ОС придется писать собственный софт, это как минимум, два приложения – под Android и под iPhone. А ведь есть еще и телефоны под Windows Phone… Немного углубившись в тему, я обнаружил, что c iPhone вообще может ничего не получиться, там вроде бы есть какие-то ограничения. Ну и даже если все получится. Приложения нужно сначала написать. Потом опубликовать в соответствующих магазинах. Потом их нужно поддерживать в работоспособном состоянии, исправлять ошибки, реагировать на замечания пользователей. Проблема в том, что я никогда ничего из этого не делал, для меня это «темный лес с партизанами» и по-хорошему для этой части работы нужно нанимать знающего человека. И нанимать не разово, а постоянно с ним потом сотрудничать в плане поддержки программ. Ну или учиться всему самому. Получается как-то дорого, да и технически некрасиво. Поэтому Bluetooth отпадает.
А потом я узнал о существовании ESP8266.
Да, об этих модулях уже очень много здесь писали, кроме того, есть отличнейший русскоязычный форум по ним. Чуть меньше года назад, начав рассматривать этот модуль для своего применения, я долго не мог составить мнение о его возможностях. Да и сейчас, судя по вопросам новичков на том же форуме, я вижу, что многие не представляют, на что способен этот модуль (чип).
Здесь надо сказать важную вещь – изначально ESP8266 «комплектовался» очень «сырой» и «глючной» китайской SDK, в связи с чем чип нельзя было использовать для решения настоящих «боевых» задач. Так, поиграть, поморгать светодиодом, конечно, можно было, но сделать что-то стабильно работающее было невозможно.
За последний год, однако, ситуация коренным образом изменилась. На русскоязычном форуме, посвященном этому чипу, одним из его участников был реализован проект – «Разработка ‘библиотеки’ малого webсервера на ESP8266». Удивительный человек-инкогнито, скрывающийся под ником pvvx, практически в одиночку создал прошивку для ESP8266, которая позволяет в полной мере раскрыть возможности этого чипа. Исходники проекта выложены в открытый доступ, автор разрешает их использовать как угодно, в том числе и в коммерческих целях. Более того, pvvx продолжает дополнять сборку новыми возможностями, а также, что очень важно, активно присутствует на форуме и не устает (ну, наверное) консультировать новичков (и не новичков тоже).
В результате этой, не побоюсь пафоса, выдающейся работы, стало возможно (помимо многого другого) снабдить какое-либо устройство полноценным стабильно работающим web-интерфейсом. Этим применением возможности чипа и прошивки не ограничиваются, но мне нужно было решить именно эту задачу.
Преимущества использования ESP8266 очевидны, и более того, каких-то других вариантов, сравнимых по цене и функционалу, на данный момент нет.
Действительно, при цене около 170 рублей на модуле ESP8266 можно организовать web-сервер с интерфейсом управления устройством, что позволяет не писать вообще никаких программ ни под какие операционные системы, только один раз сделать web-интерфейс. Модуль может работать как точка доступа и как станция, а также одновременно в двух этих режимах. Например, подключившись к модулю как к точке доступа, можно настроить его параметры связи, а потом, при желании, подключить модуль как станцию к своей домашней Wi-Fi сети. Сборка («свалка», как почтительно называет ее автор) имеет множество настроек (больше 250), доступных из web-интерфейса.
Конечно, существуют и другие прошивки для ESP8266, но ни одна из них не обладает такими возможностями, такой стабильностью и качеством работы, как сборка от pvvx (это мое субъективное мнение, применительно к моей задаче).
На основе этой прошивки и был разработан web-интерфейс для устройства качания детской кроватки. Непосредственно сама веб-часть была написана таким образом, чтобы сайт корректно отображался на различных экранах с разными размерами и разрешениями.
Конечно, аппаратную часть устройства пришлось здорово переделать (по факту – сделать заново). Алгоритм качания теперь реализован на микроконтроллере Attiny441, взаимодействие с ESP8266 посредством UART. Питание 3.3 вольта выполнено с помощью ST1S10. Вариант платы с ошибкой (исправлена навесным монтажом):
Таким образом, сейчас стало как никогда просто «прикрутить» Wi-Fi и web-интерфейс к чему угодно. При этом система будет работать вполне стабильно, а стоимость компонентов составит всего-навсего около 250 рублей (если подсчитать всю обвязку, не только сам модуль ESP8266).
Так и появился web-интерфейс у устройства для качания детской кроватки.