Я стал счастливым обладателем новых часов. Тех самых, которые, наверное, было бы правильнее называть компьютером с ремешком, чем часами, но всё же. В спальне, над кроватью была LED лента, которая управлялась с пульта. Как обычно бывает, когда он был нужен, пульт постоянно был где угодно, но только не под рукой. «А что может быть ближе, к рукам, чем часы?» — подумал я и начал потирать лапки, подобно мухе на стекле…
Данное повествование — это не ещё одна инструкция о том, как сделать ту или иную вещь, следуя по пунктам, шаг за шагом. Эта история про то, как можно найти свой путь среди огромного множества протоптанных тропинок, отказавшись от готовых инструкций и решений.
Когда на всё есть готовый ответ или набор
Гуляя по просторам интернета, я наткнулся на обсуждение, в котором поднимался вопрос создания автоматического шкафчика, который бы выдвигался, когда к сенсору подносится рука. Обсуждение это происходило в ключе решения проблемы, связанной с необходимостью трогать шкафчик руками, потом мыть руки, и.т.д. Да, да, актуальная нынче тема. Меня поразило то, что для решения этого вопроса было не только предложено несколько решений, но были даны ссылки на инструкции по сборке и даже на готовые наборы, которые можно за копейки заказать из поднебесной.
Кстати, читая это обсуждение, в моей голове невольно появилась новая фобия про мебель, которая специально (восстание машин и всё такое) открывает нижние полки, чтобы я ударялся о них мизинчиком.
Всё же вскоре я поймал себя на мысли, что на самом деле я не так уж и удивлён тому, что для «самовыдвигающихся шкафов» уже есть куча инструкций и готовых решений, ведь мы живём в очень интересное время. Время, когда каждая из проблем решалась уже множество раз, а информация и ресурсы доступны в короткие сроки и за малые деньги.
Свою же историю я начну с небольшого отступления про ненужные вещи, т.к. эта история напрямую связана с темой.
Ненужные вещи
Для одного из моих «pet project» мне было нужно несколько десятков простеньких микроконтроллеров Attiny45. Причина выбора именно этих контроллеров или даже суть самого проекта никак не повлияет на повествование, поэтому я не стану заострять на этом внимание. Поскольку речь шла о нескольких десятках, я не хотел переплачивать и воспользовался возможностью заказа необходимых мне железок на популярной китайской площадке. Естественно, правило «скупой платит дважды» не заставило себя долго ждать и поэтому мне пришло:
- 15 Attiny12
- Два Attiny45
- 23 единицы <чего-то ещё> с маркировкой Attiny45.
Деньги были возвращены и у меня на руках оказалось горстка совершенно ненужных мне Attiny12. Я отложил их до лучших времён, т.к. сам по себе микроконтроллер сильно ограничен, уже давно не поддерживается производителем и.т.д. Но всё же я решил, что «позорный недуг мы в подвиг определим», нужна только задача «попроще»…
На носу уже был Хэллоуин и можно было сделать что-то тематическое, несложное, да развлечь себя процессом создания чего-то своими руками. Какое-то время назад, когда я менял лампочки на энергосберегающие, я думал, что же мне делать со старыми лампочками. Очевидный выход «выбросить» приходил мне в голову, но я отложил их в дальний шкаф с мыслями «а вдруг пригодится». И вот так судьба свела ненужный микроконтроллер с ненужной лампочкой…
Новая жизнь ненужных вещей
Не буду спойлерить (если есть ещё что спойлерить, после первой картинки статьи), что за мысль пришла мне в голову, поэтому просто расскажу про реализацию…
Я распилил цоколь лампочки и вытащил «внутренности». Потом я спаял несколько LED лампочек, чтобы сделать из них новую спираль:
Покрасил лампочку изнутри, чтобы она смотрелась более старой и чтобы немного скрыть то, что нить накала теперь состоит из LEDов, всунул новую «нить» в колбу лампочки:
Тут на помощь подоспел Attiny12, щепотка кода на ASM и простенькая модель для 3d печати:
В результате получился вот такой магнит на холодильник:
Итак, в результате я получил хоть и совершенно бесполезную, но забавную поделку, которая подарила мне несколько часов творчества и радость от того, что всё получилось, как я планировал. В целом, важными моментами для меня были:
- Несмотря на наличие готовых 3d моделей, которые можно было бы приспособить, я сделал свою.
- Я использовал микроконтроллер, для которого необходимо писать код на ASM, чего я по сути не делал уже много лет и это был очень забавный опыт.
- Я применил вещь, которая просто без толку занимала место в шкафу. И да, я понимаю, что теперь она без толку занимает место на холодильнике, но она радует глаз.
Обратно к часам, подсветке и прочему
Теперь, когда тема праздника затронута, я отвлёкся от основного повествования, кажется, что можно вернуться к часам и подсветке.
Несколько лет назад, когда делался ремонт в спальне, было решено, что за полкой над кроватью можно расположить LED ленту, которая бы освещала декоративную стену за изголовьем кровати. Для управления лентой был взят готовый набор, который шёл в комплекте с пультом, который не требовал выводить наружу IR приёмник.
Годы шли и стало ясно, что хоть вся эта световая установка и работала безотказно, но она начала совершенно не соответствовать современным реалиям. Какие пульты, если у нас тут вокруг IoT и прочее? И тут мне в руки попали новые часы…
Главными требованиями для меня были:
- Не использовать готовых инструкций или наборов.
- Использовать уже существующую схему и «внедриться», минимально вмешиваясь в её работу (у меня слишком скудные познания в электронике, чтобы реверсировать железяку и подключиться к ней так, чтобы никто не пострадал).
- Пульт должен остаться цел, несмотря на то, что он сначала был главным кандидатом на «донорство органов».
- Управление должно быть доступно как с пульта, так и с часов / телефона / компьютера.
Общая идея такова: есть модуль управления LED лентой и в него я не лезу, я просто прикидываюсь пультом. Значит где-то в доме должен быть микроконтроллер, который подключен к сети и ожидает команды, которую он в дальнейшем сможет «прокинуть» через радиомодуль, как команду для модуля управления. Дополнительно необходимо было сделать и приложение для часов, чтобы всем этим было удобно пользоваться.
И сразу скажу, что нет, собрать устройство с приёмником/передатчиком радиосигналов, дампить все команды с пульта, написать простенький Web сервер (ладно, тут по сути готовая библиотека, но не суть), который будет отвечать на команды с приложения в часах и пересылать их через радиопередатчик — это не overengineering. Это ещё одна возможность «протоптать свою тропинку». Я уверен, что найдётся немало людей, который заметят множество излишних действий или компонентов в этой идее. Я это понимаю и даже не собираюсь спорить. Но вы можете быть спокойны, зная, что я не собираюсь налаживать какое либо производство подобных устройств, а поэтому и надеюсь, что ваше чувство прекрасного всё же не задето.
Было известно, что пульт работает не через IR, а значит там используется какой-то вид радиосигнала. А поскольку производители скорее всего не стали заморачиваться с придумыванием чего-то нового, то это должен был быть радиосигнал, который можно было бы поймать с помощью дешёвого супергетеродинного приемника (работающего на частоте 433.92 МГц).
Так и оказалось. Каждой кнопке пульта соответствовала своя «команда», которая отправлялась. Сделав дамп всех кнопок пульта, я взял передатчик (приёмник и передатчик обычно продаётся парами) и подключив его к микроконтроллеру, убедился, что все команды успешно выполняются. В качестве микроконтроллера был выбран ESP8266 потому, что его можно было легко «вбросить» в домашнюю сеть и получить управление через интернет без лишних телодвижений.
Интересным открытием для меня стала платформа Tizen — платформа, на которой работают часы. Я ожидал, что приложение для часов придётся писать на Java, используя Android SDK, но к моему удивлению, приложения делились на:
- Native (C++)
- Web
- .NET
Хуже всего я себе представлял, что же такое «Web приложение для часов», поэтому в этом направлении я и последовал. Приложение представляло собой набор html, css и js файлов, которые работали, как и обычная Web страница, если не брать во внимание некоторые незначительные особенности. Особую детскую радость мне доставлял отладчик, который позволял отлаживать приложение через браузер на компьютере, пока само приложение выполнялось на часах:
В целом, я знаком с Web разработкой, но всё стало сложнее, когда я осознал, что необходимо сделать круглую страницу. Т.е. речь идёт не только о том, что видимая область должна быть круглой, а о том, что и элементы следует располагать по кругу. Тут пришлось вспоминать про обширные возможности трансформации элементов средствами CSS.
Дополнительной проблемой стало то, что хотелось иметь некую индикацию состояния в часах, но связь с модулем была односторонней, поэтому я решил добавить датчик освещённости, который бы позволил ESP8266 иметь представление о состоянии LED ленты. Конечное приложение, в отличии от родного пульта научилось «понимать», включена ли лента на данный момент или нет:
Понятно, что я в целом не придумал ничего нового, но я дал себе возможность узнать что-то новое в процессе. Конечно, можно было просто выбросить лампочку и ненужные микроконтроллеры. Можно было и купить готовый набор для работы с LED лентой, но шопинг приносит мне куда меньше радости, чем процесс, в котором я делаю что-то своими руками.
Ищите свои тропинки, делайте что-то новое своими руками так, как будто вы первый, кто делает что-то подобное.
Спасибо всем, кто дочитал до конца.
Machcnc
Айс! Страничка в часы с ESP подгружается? Как часы ESP в сети видят? Жестко по IP?
simbiod Автор
На часах приложение, т.е. отдельная страничка с «круглым дизайном», поэтому грузить её с ESL не нужно. ESP во внутренней сети имеет статичный адрес, да.
Machcnc
а передача команд с часов на ESP как реализована? Через GET? А не пробовали эту страничку на ESP сохранить?
simbiod Автор
Как и для обычных Web страниц. GET для получения состояния, POST для отправки данных.
А про хранение страницы для часов на ESP… На самом деле, я не вижу преимуществ такого подхода. Получится, что для отображения интерфейса на часах нужно будет всегда дожидаться ответа от ESP.
vvzvlad
Зато устройство будет автономным. Вы и так ждете ответа, чтобы понять текущий статус.
Machcnc
ну а так, вы опрашиваете ESP и так же ждете ответа… В чем разница? Время загрузки странички минимально.
simbiod Автор
Вообще, в ESP есть страница для телефона / компа, которая по сути позволяет делать всё то же, что и часы, просто для часов была сделана «отдельная страница». для того, чтобы часы смогли бодно показать страницу, а не просто бублик загрузки.