Несколько месяцев назад в моей голове поселилась идея, что я хочу просыпаться не просто под музыку, а под интернет-радио. “Просто куплю будильник, который это умеет” — подумал я и отложил эту мысль. Когда дело дошло до покупок, то я был сильно удивлен в связи тем, что не смог найти подходящих мне моделей в продаже.
Критерии, по которым я подбирал будильник:
- Уметь играть интернет-радио в качестве будильника.
- Работать по Wi-Fi (wpa2, “N” режим, желательно уметь без wps).
- Желательно уметь показывать время и работать как часы.
- Желательно иметь возможность настройки через телефон или компьютер.
Не могу сказать, что я требовал слишком много, т.к. обязательным требованием было только проигрывание интернет-радио, но все девайсы, которые мне встречались, были либо слишком большими, либо слишком дорогими, либо морально устаревшими.
Стоит отметить, что я принципиально не рассматривал в этой схеме использование телефона в качестве проигрывателя музыки, у меня уже был такой опыт и он мне не понравился, тем более хотелось отделить эти компоненты. Я изначально не собирался держать этот проигрыватель около кровати, там, где заряжается телефон, а хотел отодвинуть его подальше, чтобы исключить возможность выключения будильника в состоянии сна.
Обсудил с друзьями проблемы рынка современных будильников, они подсказали, что мне нужно использовать для этого дела любой микрокомпьютер. Идея была хорошая, ведь имея маленькую коробочку с линуксом на борту, я гарантированно смогу заставить этот девайс играть любое интернет-радио на любые колонки в доме, а вопросы его настройки — это уже дело техники.
Foxconn Banana Pi
Подбирая микрокомпьютер, я ориентировался на Raspberry Pi, но не отказывался и от его аналогов, которых сейчас появляется достаточно много. Именно так мне в руки и попал Banana Pi.
Фото с сайта bananapi.org
Banana Pi это, как заявляют производители, улучшенный и более мощный аналог Raspberry Pi, который обладает совместимым слотом для подключения модулей. Banana Pi обладает двухъядерным процессором с тактовой частотой 1GHz, гигабайтом оперативной памяти, гигабитным ethernet-портом, sata-портом для подключения внешних дисков, микрофоном, инфракрасным приемником и остальными интерфейсами, присущими каждой модели.
*На момент написания статьи производители уже представили новую плату под названием Banana PRO, которая является улучшенной версией Banana Pi.
Banana pi поддерживает установку Lubuntu, Raspbian, Android, Bananian, OpenWrt, Fedora, ArchLinux и других linux-систем, но для перечисленных выше уже есть готовые образы, которые нужно только скачать с сайта производителя и прожечь на карту памяти.
По идее, в этом месте я должен произвести сравнительный анализ Raspberry Pi и Banana Pi, но т.к. с первым мне поработать не доводилось, то далее я расскажу о своих впечатлениях от второго.
Процесс установки операционной системы не вызывает никаких сложностей, я просто скачал образ с сайта, залил его на флешку и запустил систему. Наигравшись с разными операционными системами, я остановился на Raspbian, предположив, что с ним будет меньше всего потенциальных проблем, да и различных материалов по нему достаточно. После первой загрузки с помощью raspi-config были произведены следующие настройки: отключен графический режим, sshd всегда включен, настроено wifi-подключение.
Первое, с чем пришлось столкнуться — это маленькое сообщество вокруг данной платы, если для малины полно модулей, мануалов и статей, то тут приходится изучать скромную выдачу гугла и официальный форум, хотя форум вполне живой и основные вопросы, судя по датам, решаются быстро. Приобретение корпуса не стало проблемой, хотя я ожидал, что придется заказывать его доставку из Китая, оказалось, что запчасти уже продаются на барахолках. О совместимости с WiFi-модулями было прочитано заранее, а остальные запчасти для будильника были в любом магазине. Таким образом вместе с корпусом я приобрел usb wifi-модуль, microusb и аудиокабели.
Будильник
Схема будильника довольно простая, устанавливаем mpd и mpc, добавляем радио, которое нам нравится, и настраиваем cron для автозапуска. В целом не обязательно использовать именно радио, я думаю, можно легко организовать сервис, который будет формировать плейлист из треков, которые вы лайкнули на soundcloud или которые присутствуют в ваших “аудиозаписях” на vk.com, но это, возможно, будет темой для следующих статей.
Так получилось, что у меня дома нету отдельного музыкального центра и потребности в нем никогда не было, покупать большие колонки не хотелось, поэтому первым делом я попытался отыскать небольшое устройство, которое питается от сети и обладает аудиовходом. Не знаю, зачем, но я пошел и купил JBL OnBeat-Micro, вроде всё как хотелось, даже есть зарядка для телефона и частотный анализатор шума, который выключит динамик, если на него подается крайне тихая музыка, это очень удобно, когда колонка не гудит, а либо играет музыку, либо выключается. Радость от новой игрушки прошла спустя часа полтора, когда я обнаружил, что после получаса тишины “умные” микросхемы выключают колонку полностью и для последующего включения нужно нажать на кнопку.
В итоге, избавившись от JBL, пришлось отыскать старую колонку Philips Fidelio DS3000. В ней есть аудиовход, она обладает механической кнопкой включения, довольно приятно звучит и размеры её, конечно, больше, чем у JBL, но всё равно достаточно скромные.
Следующая проблема, с которой я столкнулся, это наводка на провода, видимо, Banana Pi выдает электромагнитные помехи, в результате чего колонка в состоянии покоя выдавала слишком сильный треск, это решилось заменой провода на более крупный и экранированный.
Я сознательно не стал описывать, как я настраивал mpd и mpc, потому что материалов на эту тему огромное множество, и если возникнут вопросы, то я отвечу на них в комментариях.
Управление
Собранная схема работала и будила меня по утрам приятной музыкой, но нужно было решить вопрос с управлением этой системой. Для управления текущей сессией установил на телефон приложение MPoD.
Оставалось только решить вопрос с управлением будильником. Изначально идей было несколько, самая первая — это поднять на Banana Pi веб-интерфейс для cron, но готовых и красивых решений сходу найти не удалось, поэтому пришлось смириться с мыслью, что и тут всё придётся делать самостоятельно. Пока я придумывал, как это сделать, то всё больше убеждался, что мне абсолютно не хочется писать веб-интерфейс для крона и устанавливать веб-сервер, поэтому ТЗ было переиграно, и конечная система должна будет работать следующим образом:
- На внешнем сервере устанавливается скрипт, который предоставляет простой интерфейс к задачам.
- Задачи должны формироваться простым образом из файла пресетов.
- Задача имеет два состояния, включена/выключена.
- Состояние задач отдается в виде cron-файла.
- На Banana Pi мы запускаем в cron скрипт, который раз в n минут будет устанавливать задачи для mpc пользователя. При этом нам не столь важно наличие интернета, т.к. даже если у нас будут неверные задания, то радио всё равно проигрываться не сможет.
В итоге за вечер я написал простенький сервис, который отвечает всем условиям ТЗ, добавил его в избранное в мобильном телефоне, и теперь легко могу контролировать, во сколько начнет играть будильник.
Настройки заданий хранятся в yml-файле, я решил, что мне абсолютно не нужна возможность редактировать их “на лету”, в 99% случаев я просыпаюсь в одинаковое время, а на крайний случай есть будильник в телефоне и возможность отредактировать пресеты менее, чем за пять минут.
Планы
В дальнейшем я хочу изучить вопрос с беспроводными передатчиками для аудиоканала. Попробовать сделать plex/xbmc клиент. Научить играть не только радио, а ещё и музыку из социальных сетей. Допилить сервис до возможности редактирования заданий, но это задача на самое дальнее будущее.
Что касается самой платы, то я рад, что мне в руки попала именно она, а не малинка, т.к. по слухам в ближайшие пару лет обновление малины не планируется, а при почти одинаковой цене банан даёт больший запас ресурсов.
Автор: Rpsl