Как изготовить интернет радиоприемник и установить необходимое программное
обеспечение читайте в первой
и второй части статьи.
Сейчас займемся настройкой и русификацией Pi Radio. Затем установим и настроим
дистанционное управление. Как пользоваться интернет радиоприемником читайте
в четвертой части.
Автор проекта Pi Radio -
Bob Rathbone.
Все файлы Pi Radio находятся в каталоге /home/pi/radio. Основной
файл программы был выбран в процессе установки в зависимости от конфигурации
аппаратной части. Для варианта с двухстрочным индикатором и энкодерами это файл
rradiod.py, а для варианта с кнопками - radiod.py.
На всякий случай не поленитесь сделать сейчас точку возврата – выключите радио и
создайте образ с помощью программы Win32DiskImager. Ссылки на все программы есть
во второй части описания.
И так, займемся русификацией интерфейса. Перед редактированием файлов Python c
расширением .py нужно останавливать Pi Radio:
$ sudo service radiod stop
Запускаем на компьютере программу WinSCP, заходим в директорию
/home/pi/radio и копируем файл rradiod.py
(для варианта с двухстрочным индикатором и энкодерами) на компьютер для редактирования.
Оригинальный файл в /home/pi/radio переименовываем в rradiod_org.py.
Для варианта радио с кнопками аналогичным образом работаем с файлом radiod.py.
Если нет желания разбираться и редактировать файлы, можете взять нужный отредактированный
файл из моего архива, ссылка в конце странички. Все файлы там для версии PiRadio 4.7.
Во-первых, в процессе монтажа сложно угадать направление вращения энкодеров. Если
оказалось, как у меня, что направление нужно сменить, сделать это можно
программно. Ищем в файле строки:
# Switch definitions
# Volume rotary encoder
LEFT_SWITCH = 15
RIGHT_SWITCH = 14
...
При необходимости меняем местами цифры. Для варианта с кнопками это менее
актуально, но, при необходимости, тоже возможно. Имейте в виду, что можно только
менять цифры местами, заменить их на другие нельзя.
Очень важный момент! В языке программирования Python важно
количество пробелов в начале строки. Почему-то программисты не любят пробелы, а
предпочитают использовать табуляцию. Поэтому нужно редактировать файлы в редакторе,
который позволяет определить, сколько пробелов или табуляций в начале строки. И не
менять при редактировании их количество. Помните, если заменить, например, одну
табуляцию на четыре пробела, работа программы может полностью нарушиться, хотя
визуально в тексте ничего не изменится. Я использовал для редактирования AkelPad.
Изменение громкости при вращении энкодера оказалось слишком плавным, ускорим его.
Ищем строки:
volume = radio.getVolume()
while volAdjust > 0:
volume -= 1
и чуть дальше:
volume = radio.getVolume()
while volAdjust > 0:
volume += 1
Заменяем цифру 1 на 2 в обеих фрагментах. Т.е. получим ... -= 2 и ... += 2.
Для варианта с кнопками этот шаг пропускаем, там все и так нормально. Затем
ищем фрагмент кода:
if len(ipaddr) < 1 and radio.getSource() != radio.PLAYER:
lcd.line2("No IP network")
Комментируем эти строки:
# if len(ipaddr) < 1 and radio.getSource() != radio.PLAYER:
# lcd.line2("No IP network")
Для варианта радио с управлением кнопками в файле radiod.py
этот фрагмент выглядит немного иначе:
# if len(ipaddr) < 1:
# lcd.line2("No IP network")
Это нужно для того, чтобы можно было слушать музыкальные файлы на локальном
источнике без подключения к сети Интернет. Очевидно, Bob Rathbone
даже представить себе не может, что можно жить без Интернета.
На этом редактирование файла для «китайского» индикатора (с отображением русских
букв латиницей) закончено. Сохраняем файл. Если ваш индикатор приобретен в России
и вы хотите видеть на нем русские буквы, продолжаем. Ищем в файле строку:
lcd.scroll2(current[0:160],interrupt)
Убираем из нее параметр [0:160]. Получается:
lcd.scroll2(current,interrupt)
Так же точно поступаем еще с двумя строками:
lcd.scroll1("(" + str(index+1) + ")" + current_artist[0:160],interrupt)
...
lcd.scroll2(current_station[0:160],interrupt)
Имейте в виду, что эти строки идут не друг за другом. Будьте внимательны и не
удалите что-нибудь лишнее! Этим мы снимаем ограничение на длину строки на
индикаторе, что нужно для корректного отображения русских названий станций и
треков.
Сохраняем отредактированный файл, затем копируем его обратно на Raspberry Pi в
/home/pi/radio/. Напоминаю, что я выложил как русские, так и
латинские варианты отредактированных файлов rradiod.py и radiod.py в архиве,
ссылка в конце странички.
Переименовываем еще один файл - /home/pi/radio/translate_class.py
в translate_class_org.py. Затем копируем русский или латинский
вариант файла translate_class.py из моего архива в /home/pi/radio.
Все это легко делается в WinSCP. Изменений в этом файле гораздо больше, я не буду
их описывать. При желании можете сравнить с оригиналом.
Для русского индикатора, который поддерживает отображение кириллицы, нужно заменить
еще один файл - /home/pi/radio/lcd_class.py одноименным файлом
из моего архива. Оригинальный файл на всякий случай не удаляйте, а переименуйте,
как описано выше.
Таким образом, для радио с «китайским» индикатором мы заменили два файла:
rradiod.py (или radiod.py) и translate_class.py.
Для радио с индикатором, поддерживающим отображение кириллицы, дополнительно заменили
еще один файл: lcd_class.py. Все эти файлы должны быть в /home/pi/radio.
Это еще не все. В Linux гораздо больше проблем с правами доступа, чем в Windows.
Установите на все скопированные или переименованные файлы права доступа
rwx-rx-rx (755). Это можно сделать тоже в WinSCP нажатием кнопки
«F9 Свойства».
Запускаем радио:
$ sudo service radiod start
Если радио работает и управляется, значит вы все сделали правильно. Если нет,
восстанавливаем точку возврата и начинаем все сначала, но уже с проверкой
работоспособности после редактирования каждого файла. Не забывайте останавливать и
запускать радио.
Теперь можно подключить USB звуковую карту. Я проверил две вот такие карты,
обе работают с Raspberry Pi. Но в первой (той, что слева), очевидно, установлен
USB разъем очень плохого качества. Малейшие прикосновения к нему вызывают
отчетливо слышимый "шурш" и шорох. Поэтому, лучше вскрыть корпус и
припаять кабель с USB разъемом непосредственно к плате.
Вторая карта не имеет такого недостатка, качество звучания вполне на уровне.
Но при каждом 5-6 включении приемника она не активируется, в динамиках - тишина.
После выключения и повторного включения радио все OK. В чем причина - не знаю.
Чтобы включить вывод звука через USB нужно отредактировать файл
/etc/modprobe.d/alsa-base.conf. Методика справедлива только для
RASPBIAN WHEEZY, в новой системе RASPBIAN JESSIE формат этого файла совсем другой
и находится он по другому адресу.
$ sudo nano /etc/modprobe.d/alsa-base.conf
Ищем и комментируем в нем строку:
#options snd-usb-audio index=-2
Вместо нее добавляем две строки:
options snd-usb-audio index=0 nrpacks=1
options snd-bcm2835 index=-2
Сохраняем отредактированный файл и перезагружаемся. Если mpd не запускается, звука
нет или громкость не регулируется, открываем аналогичным образом файл
/etc/mpd.conf, ищем там секцию audio_output и
добавляем в нее параметр mixer_type "software". Получится так:
audio_output {
type "alsa"
name "My ALSA Device"
device "hw:0,0"
format "44100:16:2"
mixer_device "default"
mixer_control "PCM"
mixer_index "0"
mixer_type "software" # Add this line for some USB devices
}
Сохраняем изменения и перезагружаемся. Теперь все должно работать. Если все-таки
не работает, читайте авторское описание, ищите информацию в Интернет.
Можно увеличить уровень сигнала с USB звуковой карты, что улучшит отношение
сигнал/шум. Для этого наберите команду:
$ alsamixer
В открывшемся окне нажмите «F6» и выберите «USB Audio Device». Затем перейдите на
«Speaker» и установите уровень выхода 60...80.
Если все работает нормально, приступаем к установке дистанционного управления -
LIRC. Сначала ставим PiFacecad:
$ sudo apt-get install python{,3}-pifacecad
Перезагружаемся и продолжаем установку.
$ sudo reboot
$ sudo bash
# cd /home/pi/radio
Скачиваем и запускаем setup_pifacecad_lirc.sh:
# wget https://raw.github.com/piface/pifacecad/master/bin/setup_pifacecad_lirc.sh
# chmod +x setup_pifacecad_lirc.sh
# ./setup_pifacecad_lirc.sh
На вопрос «Do you wish to continue?», отвечаем «Yes», выбрав пункт «1». Когда
установка закончится, нужно отредактировать в файле /boot/config.txt
параметр gpio_in_pin, т.е. указать, куда подключен ИФК приемник.
В нашем случае это pin 21 (GPIO 9).
# nano /boot/config.txt
В открывшемся для редактирования файле в самом его конце ищем строку, которая
начинается с «dtoverlay=» и исправляем в ней gpio_in_pin=9.
dtoverlay=lirc-rpi,gpio_in_pin=9,gpio_in_pull=high
Сохраняем отредактированный файл, закрываем редактор и продолжаем.
# cp lircrc.dist /etc/lirc/lircrc
# reboot
LIRC установлен, убедимся, что все работает.
$ sudo mode2 -d /dev/lirc0
Если при нажатии кнопок на пульте на экран будут выводиться примерно такие строки,
значит вы все сделали правильно.
space 5358604
pulse 4591
space 4459
pulse 651
.........
Если ничего не происходит, - ошибка в монтаже, неисправен фотоприемник или пульт.
Ну и почитайте рекомендации автора в описании PiRadio. У меня проблем с установкой
LIRC не было. Для выхода из программы нажмите Ctrl-C.
Осталось самое главное – настроить систему ДУ под конкретный пульт. LIRC
позиционируется, как универсальная система, способная работать с любым пультом ДУ.
В некоторых источниках, правда добавляется «почти». Можно найти массу информации,
о том, как изготовить и настроить систему. Особенно меня впечатлили подробнейшие
инструкции и высококачественные фотографии, разъясняющие, как припаять три провода
к фотоприемнику...
А вот о том, как конкретно работает система, что и каким образом там измеряется,
информации практически нет. Даже на сайте разработчиков я не нашел информации о
том, каким требованиям должен удовлетворять сигнал, формируемый пультом ДУ.
Сколько максимум, минимум может быть импульсов в команде, какова их допустимая
длительность. С какой точностью и периодичностью измеряются параметры импульсов и
т.п.
Вместо нескольких строк конкретной информации ссылка на огромную базу данных
протестированных на совместимость пультов. Увы, но эта база практически
бесполезна, т.к. точная марка пульта в большинстве случаев неизвестна, да и никто
не запрещает производителям радиоаппаратуры «вносить в конструкцию незначительные
изменения, не влияющие на качество».
Настройка заключается в создании специального файла конфигурации
/etc/lirc/lircd.conf. Сначала переименуем существующий файл.
$ sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd.conf.org
Затем запускаем программу конфигурации. Автор рекомендует запускать программу с
дополнительным параметром –f, но, по-моему, это ничего не дает, скорее наоборот,
все портит. Так что набирайте в PuTTY:
$ sudo irrecord -d /dev/lirc0 /etc/lirc/lircd.conf
Если программа irrecord не запускается, а выдает сообщение об ошибке, перезагрузитесь.
При запуске программа выводит на экран подробные инструкции, что нужно делать.
Если появятся сообщения об ошибках, читайте авторское описание, ищите информацию в
Интернет. Если все ОК, строго следуйте инструкциям. Вас попросят понажимать
кнопки, затем ввести имя для каждой кнопки. Используйте только имена,
рекомендуемые автором. Их назначение, думаю, понятно.
KEY_VOLUMEUP
KEY_VOLUMEDOWN
KEY_CHANNELUP
KEY_CHANNELDOWN
KEY_MUTE
KEY_MENU
KEY_UP
KEY_DOWN
KEY_LEFT
KEY_RIGHT
KEY_OK
Кнопки KEY_MENU и KEY_OK равноценны. Можно найти много информации о настройке LIRC
с помощью программы irrecord, поэтому я не буду подробно описывать этот процесс.
Если что-то непонятно, Google поможет.
Конфигурируем установленное программное обеспечение для автозапуска и запускаем
его.
$ sudo update-rc.d -f pifacercd defaults
$ sudo service pifacercd start
Теперь можете проверить, управляется ли приемник с пульта ДУ. Если все работает,
вам повезло. Если какие-то кнопки не распознаются, попробуйте повторить настройку,
предварительно удалив файл /etc/lirc/lircd.conf и перезагрузившись.
$ sudo rm /etc/lirc/lircd.conf
$ sudo reboot
Если это не поможет, попробуйте настроить другой пульт ДУ.
Наконец, система ДУ настроена и команды уверенно распознаются. Если светодиод
активности пульта ДУ не вспыхивает при нажатии кнопок на пульте, откройте для
редактирования файл /etc/radiod.conf.
$ sudo nano /etc/radiod.conf
Убедитесь, что значение параметра remote_led=11:
# Output LED for remote control, default GPIO 11 (pin 23) or
# GPIO 13 (pin 33) for AdaFruit plate or PiFace CAD (40 pin RPi needed)
# remote_led=0 is no output LED
remote_led=11
При необходимости, исправьте. Изменения вступят в силу после перезагрузки или
перезапуска PiRadio.
Как пользоваться приемником и «настраиваться на станции» я расскажу в
четвертой части.
Но предварительно ознакомьтесь с
первой и
второй частями описания, если еще
не сделали этого.
2016г.
|