Шановні друзі!
26 та 31 грудня магазин працюватиме до 16 години. 1 та 2 січня магазин працювати не буде.
Вітаємо всіх з Різдвом та Новим Роком!
Мобильная версия Форум Arduino Документация Гарантийные условия 0 0
UA RU
График работы магазина:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Вс: выходной
Каталог
Напиши статью и получи скидку!

Музыкальный медиа центр на базе Raspberry Pi Zero W и Pimoroni Pirate Audio

2020-12-24

Все статьи →

В данной статье, мы опишем процесс создания музыкального медиа центра, c возможностью удаленного управления на базе мини-компьютера Raspberry Pi Zero W (Изображение - №1), звуковой платы расширения Pimoroni Pirate Audio Headphone Amp 24bit/192KHz (Изображение - №2) и расширяемого музыкального сервера Mopidy.

Изображение - №1

Изображение - №2

В качестве мини-компьютера можно использовать любую модель Raspberry Pi имеющую на борту контактную площадку - 40pin GPIO, но самая подходящая с точки зрения размера и аппаратного функционала, это Raspberry Pi Zero W.

Кратко пробежимся по аппаратным характеристикам звуковой платы расширения Pirate Audio, от Pimoroni (производство United Kingdom). Данная плата позволяет превратить Raspberry Pi в музыкальный медиа центр с поддержкой удаленного управления и воспроизведением музыки с локальных или сетевых хранилищ и музыкальных сервисов, таких как: Spotify, AppleMusic, SoundCloud и не только. Сердцем платы, является чип PCM5100A от Texas Instruments воспроизводящий звук в 24bit/192KHz и работающий на шине I2S. На лицевой панели располагается 1.3” IPS LCD монитор с разрешением 240х240px, подключенный к шине SPI и работающий на драйвере ST7789. Монитор отображает обложку исполняемого альбома, значки кнопок и их значения, активные полосы регулировки звука и воспроизводимого трека. С левой стороны от монитора расположены кнопки: верхняя А - [пауза] / [воспроизведение] / [безопасное выключение системы] и нижняя B - [регулировка звука] в сторону уменьшения, а с правой стороны верхняя X - [cледующий трек] / [перезагрузка системы] и нижняя Y - [регулировка громкости] в сторону увеличения. Все четыре кнопки могут быть перепрограммированы под любые задачи пользователя. С тыльной стороны платы (Изображение - №3), расположились все компоненты, включая центральную микросхему, физический переключатель High/Low, 3.5мм джек для подключения платы к внешним источникам воспроизведения звука, контактная площадка 40pin GPIO и разъем подключения дисплея. Удаленное управление осуществляется с помощью WEB клиента, который может быть запущен например на телефоне. Физическое исполнение платы (качество компонентов, пайка и т.д.) качественное и каких либо нареканий не вызывает, как и ее работоспособность. Для такого класса устройства, звук довольно таки чистый и приятный, что не может не радовать.

Изображение - №3

Стоит сказать пару слов и о музыкальном сервере Mopidy. Как указанно на официальном сайте, Mopidy - это расширяемый музыкальный сервер, написанный на Python. Он может воспроизводить музыку с локального или сетевого диска и облачных сервисов: Spotify, AppleMusic, SoundCloud, TuneIn и других. Вы можете управлять вашей музыкой с любого телефона, планшета или компьютера, используя различные MPD и WEB клиенты, благо коих существует большое множество, на любой вкус и цвет. Он запускается в терминале или в фоновом режиме на компьютерах с операционной системой Linux или Mac, которые имеют сетевое подключение и аудиовыход. По умолчанию это HTTP сервер, но если установить расширение Mopidy-MPD, он станет сервером MPD. Многие дополнительные интерфейсы для управления, доступны в виде расширений. После установки и настройки, пользователю нужно будет только подключиться по средствам MPD или WEB клиента к серверу Mopidy и наслаждаться своей любимой музыкой. Не маловажным фактором является и тот факт, что Mopidy поддерживает множество расширений и API интерфейсы Python, JSON-RPC и JavaScript. Это делает его идеальной базой для разнообразных DIY проектов. В данном проекте от Matt Brailsford, Raspberry Pi был встроен в старый кассетный проигрыватель. Кнопки и регулятор громкости подключены к GPIO на Raspberry Pi и используются для управления воспроизведением через собственное расширение Mopidy. Кассеты имеют метки NFC, используемые для выбора плейлистов из Spotify.

Официальный сайт Mopidy: https://mopidy.com/

Для проекта нам понадобится:

С технической стороной разобрались, теперь приступим к реализации самого проекта. Для начала, запишем операционную систему на карту памяти. В качестве ОС мы используем последний образ Raspbian OC.

* * *

Примечание: На момент написания статьи, релиз Raspbian OC - от 12.02.2020. В случае ошибки записи или не корректной записи ОС, следует полностью очистить карту памяти (Operating System > CHOOSE OS > Erase) и произвести запись повторно!

* * *

Для этого нам понадобится программа для записи образов ОС Raspberry Pi Imager, которую можно скачать с официального сайта raspberrypi.org перейдя по ссылке: https://www.raspberrypi.org/software/ После загрузки и установки данной утилиты, откройте ее и выберете один из трех вариантов установки Raspbian OC:

 

  • Стандартная - Raspberry Pi OS (32-bit): операционная система с графической средой и минимальным пакетом утилит.
  • Минимальная - Raspberry Pi OS Lite (32-bit): операционная система без графической среды и минимальным пакетом утилит.
  • Максимальная - Raspberry Pi OS Full (32-bit): операционная система и максимальное количество утилит.

Оптимальный вариант, это стандартная установка, ее мы и выберем.

1. Установка ОС - Raspbian OC.

Выбираем ОС: Operating System > CHOOSE OS > Raspberry Pi OS (32-bit) (Изображение - №4).

Изображение - №4

Далее, выбираем карту памяти: SD Card > CHOOSE SD CARD > ваша карта памяти (Изображение - №5)

 

Изображение - №5

* * *

Примечание: Скорей всего у вас будет отличаться название и буквы дисков, но если к компьютеру подключен один кардридер с одной картой памяти, то выбор очевиден :)

* * *

После выбора карты памяти, нажимаем кнопку WRITE (Изображение - №6). Программа отобразит сообщение, что все данные находящиеся на карте памяти будут уничтожены. Поскольку мы используем новую карту, то смело нажимаем YES (Изображение - №7), после чего начнется полностью автоматическая установка ОС.

Изображение - №6

Изображение - №7

В первую очередь будет произведена запись ОС на карту памяти, а затем верификация данных на ошибки и финальное сообщение об успешном окончании всего процесса (Изображение - №8, Изображение - №9, Изображение - №10).

Изображение - №8

Изображение - №9

Изображение - №10

2. Первоначальное конфигурирование файла config.txt

После установки, закройте Raspberry Pi Imager и извлеките карту памяти из кардридера (Безопасное извлечение устройств и дисков). Далее верните карту в кардридер. Вы увидите, что в системе появились два подключенных дика. Поскольку мы использовали основную ОС Windows 10, в нашем случае это:

  • Съемный диск (D:)
  • boot (F:)

Абсолютно не важно, какие у вас будут буквы или разделы дисков (зависит от используемой ОС), нас интересует диск на который была произведена инсталляция Raspbian OC. У нас, это диск boot (F:). Открываем его и находим файл config.txt. Поскольку у мини-компьютеров отсутствует физическая микросхема BIOS, ее роль исполняет конфигурационный файл. Как вы уже наверное догадались на системах Raspberry Pi, это config.txt. В нем прописываются все основные настройки использующиеся при старте системы. Откройте его в любом текстовом редакторе, например Блокнот. Перед вами появятся дефолтные значения, смело можете их все удалить и прописать ниже приведенные. Единственное, что вам нужно будет изменить, так это два параметра: hdmi_group и hdmi_mode. Второй параметр отвечает за разрешение экрана, а первый за группу к которому оно относится. Все значения данных параметров, вы можете найти перейдя по ссылке: https://elinux.org/RPiconfig#Video

# For more options and information see

# http://rpf.io/configtxt

# Some settings may impact device functionality. See link above for details

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : Temperature Control

temp_soft_limit=70

temp_limit=85

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : Automatic Frequency Control

force_turbo=1

initial_turbo=0

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : Frequency Values

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : Maximum Values

arm_freq=1000

core_freq=400

sdram_freq=450

#gpu_freq=250

h264_freq=250

v3d_freq=250

isp_freq=250

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : RAM - GPU / ARM

total_mem=512

gpu_mem=64

disable_l2cache=0

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : HDMI Mode

hdmi_group=2 // группа

hdmi_mode=85 // разрешение экрана

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : Hardware Interfaces

#dtparam=i2c_arm=on

#dtparam=i2s=on

#dtparam=spi=on

# =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= : Enable Audio - Loads snd_bcm2835

dtparam=audio=on

[pi4]

dtoverlay=vc4-fkms-v3d

max_framebuffers=2

[all]

* * *

Примечание: Если вам интересно разобраться, что из себя представляет файл config.txt, какие параметры в нем могут быть прописаны и т.д. У нас есть постоянно обновляющаяся рубрика кратких руководств по нему. На данный момент существуют две части, с которыми мы рекомендуем ознакомиться:

* * *

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

3. Установка контактной площадки - 40pin GPIO и сборка

Теперь мы перейдем к небольшой доработке самой Raspberry Pi Zero W. Поскольку у нас она шла с не распаянной контактной гребенкой (Изображение - №1), то нам нужно ее припаять к плате. После монтажа контактной площадки, между мини-компьютером и звуковой платой, установим пластиковые стойки длинной 10мм М3 (мама-мама), затем соединим получившуюся конструкцию пластиковыми стойками 6мм М3 (мама-папа) снизу и пластиковыми винтами М3 сверху (предварительно укороченными до длинны 5мм). После проделанных манипуляций общий вид конструкции примет вид, как на изображении №11.

Изображение - №11

4. Первый запуск и базовая настройка ОС

Подключите блок питания к мини-компьютеру и всю сопутствующую периферию (клавиатуру, мышку и монитор), затем установите карту памяти с записанной ОС, после чего подключите БП в розетку. Изначально система произведет тестовый запуск и автоматически перезагрузится. После повторной загрузки, на экране монитора появится окно приветствия и предложение о настройке некоторых базовых параметров. Нажав NEXT вы перейдете к следующему окну, где сможете выбрать страну, язык системы и часовой пояс. Сделайте свой выбор и переходите к следующему шагу.

* * *

Примечание: Галочка напротив Use English language устанавливает основной язык системы английский, игнорируя предыдущую настройку (поле: Language). Галочка напротив Use US keyboard устанавливает основной язык клавиатуры английский.

* * *

Следующим шагом, будет установка пароля пользователя pi, тут можно ввести или комбинацию цифр от единицы до девяти или оставить поля пустыми. Пароли пользователей pi и root мы изменим позже. На вкладке Set Up Screen ничего не отмечаем и переходим к следующему шагу. Теперь в появившемся списке найдите свою WiFi сеть и подключитесь к ней введя пароль. После подключения к беспроводной сети, вам предложат обновить списки репозиториев и саму систему. Соглашаемся и ждем завершения обновления. После окончания, перезагрузите систему.

* * *

 

Примечание: Полное обновление ОС может занять какое то время, обязательно дождитесь завершения его!

 

Конечно вы можете и не обновлять ОС в данный момент, но мы настоятельно рекомендуем это сделать. Если по какой то причине, вы этого не сделали, то открыв окно терминала, введите команду:

 

pi@raspberrypi:~ $ sudo apt update

 

А затем:

 

pi@raspberrypi:~ $ sudo apt upgrade

 

* * *

После перезагрузки, убедимся, что ваша WiFi сеть настроена корректно и работает. Для этого, нужно проверить корректность внесенных вами данных для беспроводной сети, которые находятся в файле wpa_supplicant.conf в /etc/wpa_supplicant.

1. pi@raspberrypi:~ $ cat /etc/wpa_supplicant/wpa_supplicant.conf

На экране отобразится содержимое файла wpa_supplicant.conf, в самом конце которого находятся настройки вашей сети, проверьте их.

network={

ssid=”название вашей сети

psk=”пароль вашей сети

}

Далее проверяем работоспособность сети:

2. pi@raspberrypi:~ $ ping -c 15 google.com

Если данные корректны и ping идет без обрывов, то ваша сеть настроена и работает корректно. Теперь изменим имя хоста вашей системы с дефолтного raspberrypi, например на RPiW-MUSIC. Для этого, нужно отредактировать файлы hosts и hostname в директории /etc.

* * *

Примечание: После каждого окончания внесения изменений в каком либо файле, нажмите сочетание клавиш ctr+o для его сохранения, а затем ctr+x для выхода из файла обратно в командную строку.

* * *

Открываем файл hosts:

3. pi@raspberrypi:~ $ sudo nano /etc/hosts

Вносим изменения в последнюю строку.

 

127.0.1.1 raspberrypi // в данной строке нужно изменить имя raspberrypi, в нашем случае на RPiW-MUSIC

 

После сохранения изменений, вернитесь в консоль и откройте файл hostname:

 

4. pi@raspberrypi:~ $ sudo nano /etc/hostname

 

Внесите изменения в него.

 

 

raspberrypi // измените имя raspberrypi на тоже имя, что вы указали в файле hosts, в нашем случае на RPiW-MUSIC

 

 

Сохраните файл и для вступления изменений в силу, перезагрузите систему.

5. pi@raspberrypi:~ $ reboot

После перезагрузки системы, открыв консоль вы увидите, что приветствие с pi@raspberrypi:~ $ изменилось на pi@RPiW-MUSIC:~ $

Осталось только сменить пароли пользователей и приступить непосредственно к конфигурации звуковой платы.

* * *

Примечание: Дефолтный пароль для пользователя pi: raspberry

* * *

Первым изменим пароль пользователя pi.

6. pi@RPiW-MUSIC:~ $ passwd

Вводим текущий пароль, а затем новый.

Changing password for pi.

Current password: текущий пароль

New password: новый пароль

Retype new password: повторный ввод нового пароля

passwd: password updated successfully

После подтверждения успешного изменения пароля, изменим и пароль пользователя root:

7. pi@RPiW-MUSIC:~ $ sudo passwd root

Действия аналогичны с предыдущими.

New password: новый пароль

Retype new password: повторный ввод нового пароля

passwd: password updated successfully

Для вступления изменений в силу, перезагрузите систему:

8. pi@RPiW-MUSIC:~ $ reboot

5. Настройка звуковой платы расширения Pimoroni Pirate Audio Headphone Amp

В качестве ПО, мы будем использовать альтернативное от G-a-v-r-o-c-h-e. Ссылка на него: https://github.com/G-a-v-r-o-c-h-e/PIpod-Nano Перейдя по ссылке, вы найдете все нужные файлы и описания двух вариантов установки, автоматической и ручной. Мы приведем пример автоматической установки. Для начала, клонируем нужные нам данные с GitHub.

1. pi@RPiW-MUSIC:~ $ git clone https://github.com/G-a-v-r-o-c-h-e/PIpod-Nano

Клонированные файлы, располагаются в дирректории /home/pi/Pipod-Nano.

* * *

 

Примечание: Файлы дирректории Pipod-Nano:

  • Конфигурационные файлы: buttons.py, frontend.py, mopidy.conf, Pipod.service
  • Исполняемые файлы: autoplay.sh, install.sh
  • Файл с описанием установки и настройки: README.md
  • Директория с изображениями: image

 

* * *

После клонирования, создадим резервную копию Pipod-Nano в /home/pi/Backup_Pipod-Nano. Для этого создаем папку Backup_Pipod-Nano и производим копирование:

2. pi@RPiW-MUSIC:~ $ mkdir Backup_Pipod-Nano

3. pi@RPiW-MUSIC:~ $ cp -r ~/home/pi/Pipod-Nano ~/home/pi/Backup_Pipod-Nano

Затем переходим в дирректорию Pipod-Nano, где изменяем права доступа файла install.sh, и запускаем его с указанием локальной дирректории в которой будут хранится пользовательские аудио файлы:

* * *

Примечание: Дефолтная директория расположения локальных аудио файлов: /home/pi/Music Вы можете изменить ее на любую другую, по вашему усмотрению. Обратите внимание, что окончание пути ни в коем случае не должно заканчиваться на / !!!

* * *

 

4. pi@RPiW-MUSIC:~ $ cd Pipod-Nano

5. pi@RPiW-MUSIC:~ $ sudo chmod +x install.sh

6. pi@RPiW-MUSIC:~ $ sudo ./install.sh /home/pi/Music

 

После завершения установки, перезагружаем систему:

 

7. pi@RPiW-MUSIC:~ $ reboot

 

Когда система перезагрузится, дисплей звуковой платы активируется и выведет сообщение с адресом для подключения к WEB клиенту. Теперь займемся непосредственно конфигурационными файлами. Основная директория файлов конфигурации кнопок, располагается в /usr/local/lib/python3.7/dist-packages/mopidy_raspberry_gpio. Где ext.conf - это инициализация GPIO button pins, а frontend.py, __init__.py, pinconfig.py - это файлы логики, инициализации и конфигурации. Переходим в данную дирректорию и открываем файл frontend.py:

 

8. pi@RPiW-MUSIC:~ $ cd /usr/local/lib/python3.7/dist-packages/mopidy_raspberry_gpio

9. pi@RPiW-MUSIC:~ $ sudo nano frontend.py

 

В нем находим приведенные ниже строки и вносим свои значения, после чего сохраняем их.

def handle_volume_up(self):

volume = self.core.mixer.get_volume().get()

volume += 5 // шаг увеличения громкости в %

volume = min(volume, 100) // значение максимальной громкости в %

self.core.mixer.set_volume(volume)

def handle_volume_down(self):

volume = self.core.mixer.get_volume().get()

volume -= 5 // шаг уменьшения громкости в %

volume = max(volume, 0 // значение минимальной громкости в %

self.core.mixer.set_volume(volume)

Далее переходим в дирректорию с пользовательскими файлами настройки /usr/share/PipodScripts и открываем файл buttons.py:

10. pi@RPiW-MUSIC:~ $ cd /usr/share/PipodScripts

11. pi@RPiW-MUSIC:~ $ sudo nano buttons.py

Ниже приведено содержимое файла buttons.py. Вносим в него изменения, после чего сохраняем их.

 

#!/usr/bin/env python

from gpiozero import Button

import time

import os

 

stopButton = Button(5) // кнопка отвечающая за команду shutdown -h now / пауза

rebootButton = Button(16) // кнопка отвечающая за команду reboot / следующий трек

#volumeUp = Button(20) // кнопка увеличения громкости звукаь

#volumeDown = Button(6) // кнопка уменьшения громкости звука

 

while True:

if stopButton.is_pressed:

tmp, duration = time.time(), 0

while stopButton.is_pressed:

duration = time.time() - tmp

if duration > 3:

os.system("shutdown now -h")

if rebootButton.is_pressed:

tmp, duration = time.time(), 0

while rebootButton.is_pressed:

duration = time.time() - tmp

if duration > 3:

os.system("reboot")

# if volumeUp.is_pressed:

# time.sleep(.25)

# while volumeUp.is_pressed:

# os.system("mpc volume +5") // шаг увеличения громкости в %

# time.sleep(.01)

 

# if volumeDown.is_pressed:

# time.sleep(.25)

# while volumeDown.is_pressed:

# os.system("mpc volume -5") // шаг уменьшения громкости в %

# time.sleep(.01)

 

time.sleep(1)

 

Теперь следует проверить наличие одной строки в файле rc.local в /etc/rc.local.

12. pi@RPiW-MUSIC:~ $ cat /etc/rc.local

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.

# Print the IP address

_IP=$(hostname -I) || true

if [ "$_IP" ]; then

printf "My IP address is %sn" "$_IP"

fi

sudo python /usr/share/PIpodScripts/buttons.py & // обязательное наличие данной строки !!!

exit 0

Также следует проверить наличие следующих строк в config.txt, располагающийся в /boot/config.txt.

13. pi@RPiW-MUSIC:~ $ cat /boot/config.txt

dtparam=spi=on

gpio=25=op,dh

dtoverlay=hifiberry-dac

После всего проделанного, осталось внести изменения в файл mopidy.conf в /etc/mopidy/mopidy.conf. Для этого следует внести нужные данные в него, после чего сохранить их и перезагрузить систему.

* * *

Примечание: client_id и client_secret вы можете получить по ссылке: https://mopidy.com/ext/spotify/

* * *

14. pi@RPiW-MUSIC:~ $ sudo nano /etc/mopidy/mopidy.conf

# For information about configuration values that can be set in this file see:

#

# https://docs.mopidy.com/en/latest/config/

#

# Run `sudo mopidyctl config` to see the current effective config, based on

# both defaults and this configuration file.

[raspberry-gpio]

enabled = true

bcm5 = play_pause,active_low,250

bcm6 = volume_down,active_low,250

bcm16 = next,active_low,250

bcm20 = volume_up,active_low,250

bcm24 = volume_up,active_low,250

[file]

enabled = true

media_dirs = /home/pi/Music

show_dotfiles = false

excluded_file_extensions =

.directory

.html

.jpeg

.jpg

.log

.nfo

.pdf

.png

.txt

.zip

follow_symlinks = false

metadata_timeout = 5000

[pidi]

enabled = true

display = st7789

rotation = 90

[mpd]

hostname = 0.0.0.0

[http]

hostname = 0.0.0.0

[audio]

mixer_volume = 30

output = alsasink device=hw:sndrpihifiberry

[spotify]

enabled = true

username = // почта на которую зарегистрирован Spotify

password = // пароль от аккаунта

client_id = // клиент ID

client_secret = // секретный ключ

bitrate = 320 // битрейт

15. pi@RPiW-MUSIC:~ $ reboot

На этом базовая конфигурация звуковой платы расширения окончена. Введите в браузере вашего PC, планшета или телефона адрес указанный на дисплее, выберете нужный вам WEB клиент (по умолчанию, это Iris) и наслаждайтесь любимой музыкой. :) Отметим, тот факт, что Iris не единственный WEB клиент (все расширения Mopidy вы можете найти перейдя по ссылке: https://mopidy.com/ext/). Например если вы хотите установить Mopidy-MusicBox-Webclient, введите в консоле:

pi@RPiW-MUSIC:~ $ sudo python3 -m pip install Mopidy-MusicBox-Webclient

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

P.S. Если вы планируете использовать данную звуковую плату, как основную, а не в автономном режиме. Внесите ниже приведенные изменения в файл asound.conf расположенный в etc/asound.conf:

 

pcm.!default{

type hw

card 1

device 0

}

 

Ваша оценка статьи:

Отлично
Хорошо
Удовлетворительно
Плохо
Очень плохо

Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
оплата картами Visa и MasterCard