Плеер из старой Raspberry Pi Zero W

Как сделать аудио плеер из Raspberry Pi Zero W, если глючит радиочип? А он глючит, это было известно ещё в тот момент, когда такие устройства появились в продаже. Другое дело, что в современных ОС этот конструктивный недостаток, наверно, исправлен, но я нашёл на балконе самоделку, которой занимался лет 10 назад. Забросил же именно потому, что с радиосвязью на нём была какая-то дикая нестабильность: wifi, вроде, и работает, но минут через 15 сеть отрубается и единственный выход — перезагрузка. Не лучше обстояли дела и с bluetooth: устройства определяются через раз, rfcomm канал падает в непредсказуемый момент. Я тогда решил, что мне не повезло, потому что устройства заказывал в Китае, но потом выяснилось, что это модель такая: пытаясь уместить слишком многое в слишком маленьком объёме, инженеры принесли в жертву стабильность работы радиочипа. По крайней мере, не один я с этими проблемами столкнулся.

И вот я нашёл эту заброшку среди хлама и решил реанимировать. Скачал свежий образ ОС для таких компьютеров, хотел уже устанавливать на «диск», но в последний момент задумался: переустанавливать ОС — значит не только потерять плеер, который, хоть и неустойчиво, но работал уже тогда. Стало жалко стирать коллекцию музыки, которая находилась на той флешке — 6 Гб отборной музыки, заботливо распределённой по плейлистам! На это упорядочивание ушло тогда не меньше сил, чем на написание кода. В общем, я решил довести заброшенный проект до ума.

Раньше этот аудиопроигрыватель работал в режиме mpd-демона. Он мог часами проигрывать музыку, но управлять им по сети было мучением — зависал через каждые 15 минут. На этот раз я решил обойтись вообще без радио и управлять плеером с помощью пинов GPIO, к которым подключил две мембранные клавиатуры (даю ссылку на маркетплейс не из рекламных соображений, а потому что другой не нашлось). Кнопки лишь самые необходимые: навигация по плейлистам, по текущему плейлисту, пауза/проигрывание и регулировка звука (ступенчатая, одной кнопкой).

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

Всю систему упрятал в подвернувшуюся под руку аромолампу в форме лягушки. Тоже пылилась на балконе, а теперь приносит пользу в сочетании с забывшим свои капризы Raspberry Pi Zero W.

Проигрыватель в сборе.
Проигрыватель в сборе.

Процесс установки mpd и mpc, а также создания плейлистов не привожу, это отдельная тема. Какие задействованы пины видно из комментариев, но можно и другие. Я использовал те, что находятся со стороны USB (39-й и соседние). У мембранных клавиатур общий провод («земля») справа, остальные находятся методом подбора, благо их всего по 3 на каждой :) .

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