Архив

Будильник из Banana Pi (Raspberry Pi)

Скопирую сюда статью которую писал в 2014 году на geektimes, про то как я будильник из микрокомпьютера делал.


Несколько месяцев назад в моей голове поселилась идея, что я хочу просыпаться не просто под музыку, а под интернет-радио. “Просто куплю будильник, который это умеет” - подумал я и отложил эту мысль. Когда дело дошло до покупок, то я был сильно удивлен в связи тем, что не смог найти подходящих мне моделей в продаже. Критерии, по которым я подбирал будильник:

  1. Уметь играть интернет-радио в качестве будильника.
  2. Работать по Wi-Fi (wpa2, “N” режим, желательно уметь без wps).
  3. Желательно уметь показывать время и работать как часы.
  4. Желательно иметь возможность настройки через телефон или компьютер.

Не могу сказать, что я требовал слишком много, т.к. обязательным требованием было только проигрывание интернет-радио, но все девайсы, которые мне встречались, были либо слишком большими, либо слишком дорогими, либо морально устаревшими.

Стоит отметить, что я принципиально не рассматривал в этой схеме использование телефона в качестве проигрывателя музыки, у меня уже был такой опыт и он мне не понравился, тем более хотелось отделить эти компоненты. Я изначально не собирался держать этот проигрыватель около кровати, там, где заряжается телефон, а хотел отодвинуть его подальше, чтобы исключить возможность выключения будильника в состоянии сна.

Обсудил с друзьями проблемы рынка современных будильников, они подсказали, что мне нужно использовать для этого дела любой микрокомпьютер. Идея была хорошая, ведь имея маленькую коробочку с линуксом на борту, я гарантированно смогу заставить этот девайс играть любое интернет-радио на любые колонки в доме, а вопросы его настройки — это уже дело техники.

Foxconn Banana Pi

Подбирая микрокомпьютер, я ориентировался на Raspberry Pi, но не отказывался и от его аналогов, которых сейчас появляется достаточно много. Именно так мне в руки и попал Banana Pi.

banana pi

Фото с сайта bananapi.org

Banana Pi это, как заявляют производители, улучшенный и более мощный аналог Raspberry Pi, который обладает совместимым слотом для подключения модулей. Banana Pi обладает двухъядерным процессором с тактовой частотой 1GHz, гигабайтом оперативной памяти, гигабитным ethernet-портом, sata-портом для подключения внешних дисков, микрофоном, инфракрасным приемником и остальными интерфейсами, присущими каждой модели.

banana pi schema

*На момент написания статьи производители уже представили новую плату под названием 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 и аудиокабели.

banana pi case

Будильник

Схема будильника довольно простая, устанавливаем mpd и mpc, добавляем радио, которое нам нравится, и настраиваем cron для автозапуска. В целом не обязательно использовать именно радио, я думаю, можно легко организовать сервис, который будет формировать плейлист из треков, которые вы лайкнули на soundcloud или которые присутствуют в ваших “аудиозаписях” на vk.com, но это, возможно, будет темой для следующих статей.

Так получилось, что у меня дома нету отдельного музыкального центра и потребности в нем никогда не было, покупать большие колонки не хотелось, поэтому первым делом я попытался отыскать небольшое устройство, которое питается от сети и обладает аудиовходом. Не знаю, зачем, но я пошел и купил JBL OnBeat-Micro, вроде всё как хотелось, даже есть зарядка для телефона и частотный анализатор шума, который выключит динамик, если на него подается крайне тихая музыка, это очень удобно, когда колонка не гудит, а либо играет музыку, либо выключается. Радость от новой игрушки прошла спустя часа полтора, когда я обнаружил, что после получаса тишины “умные” микросхемы выключают колонку полностью и для последующего включения нужно нажать на кнопку.

В итоге, избавившись от JBL, пришлось отыскать старую колонку Philips Fidelio DS3000. В ней есть аудиовход, она обладает механической кнопкой включения, довольно приятно звучит и размеры её, конечно, больше, чем у JBL, но всё равно достаточно скромные.

Следующая проблема, с которой я столкнулся, это наводка на провода, видимо, Banana Pi выдает электромагнитные помехи, в результате чего колонка в состоянии покоя выдавала слишком сильный треск, это решилось заменой провода на более крупный и экранированный.

Я сознательно не стал описывать, как я настраивал mpd и mpc, потому что материалов на эту тему огромное множество, и если возникнут вопросы, то я отвечу на них в комментариях.

Управление

Собранная схема работала и будила меня по утрам приятной музыкой, но нужно было решить вопрос с управлением этой системой. Для управления текущей сессией установил на телефон приложение MPoD.

mpd mobile

Оставалось только решить вопрос с управлением будильником. Изначально идей было несколько, самая первая — это поднять на Banana Pi веб-интерфейс для cron, но готовых и красивых решений сходу найти не удалось, поэтому пришлось смириться с мыслью, что и тут всё придётся делать самостоятельно. Пока я придумывал, как это сделать, то всё больше убеждался, что мне абсолютно не хочется писать веб-интерфейс для крона и устанавливать веб-сервер, поэтому ТЗ было переиграно, и конечная система должна будет работать следующим образом:

  • На внешнем сервере устанавливается скрипт, который предоставляет простой интерфейс к задачам.
  • Задачи должны формироваться простым образом из файла пресетов.
  • Задача имеет два состояния, включена/выключена.
  • Состояние задач отдается в виде cron-файла.
  • На Banana Pi мы запускаем в cron скрипт, который раз в n минут будет устанавливать задачи для mpc пользователя. При этом нам не столь важно наличие интернета, т.к. даже если у нас будут неверные задания, то радио всё равно проигрываться не сможет.

В итоге за вечер я написал простенький сервис, который отвечает всем условиям ТЗ, добавил его в избранное в мобильном телефоне, и теперь легко могу контролировать, во сколько начнет играть будильник.

alarm

Настройки заданий хранятся в yml-файле, я решил, что мне абсолютно не нужна возможность редактировать их “на лету”, в 99% случаев я просыпаюсь в одинаковое время, а на крайний случай есть будильник в телефоне и возможность отредактировать пресеты менее, чем за пять минут.

Планы

В дальнейшем я хочу изучить вопрос с беспроводными передатчиками для аудиоканала. Попробовать сделать plex/xbmc клиент. Научить играть не только радио, а ещё и музыку из социальных сетей. Допилить сервис до возможности редактирования заданий, но это задача на самое дальнее будущее.

Что касается самой платы, то я рад, что мне в руки попала именно она, а не малинка, т.к. по слухам в ближайшие пару лет обновление малины не планируется, а при почти одинаковой цене банан даёт больший запас ресурсов.


Другие статьи в блоге:

⟵ Wunder digest
macOS: Предотвращение оглушения ⟶