Лучшее из возможного!

Размер шрифта:  Aa Aa Aa Aa Aa



Интернет радиоприемник на Raspberry Pi

Часть 3. Настройка.

Pi Radio с кнопками

Как изготовить интернет радиоприемник и установить необходимое программное обеспечение читайте в первой и второй части статьи. Сейчас займемся настройкой и русификацией 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.

WinSCP - F9

Это еще не все. В Linux гораздо больше проблем с правами доступа, чем в Windows. Установите на все скопированные или переименованные файлы права доступа rwx-rx-rx (755). Это можно сделать тоже в WinSCP нажатием кнопки «F9 Свойства».

Запускаем радио:

$ sudo service radiod start

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

Теперь можно подключить USB звуковую карту. Я проверил две вот такие карты, обе работают с Raspberry Pi. Но в первой (той, что слева), очевидно, установлен USB разъем очень плохого качества. Малейшие прикосновения к нему вызывают отчетливо слышимый "шурш" и шорох. Поэтому, лучше вскрыть корпус и припаять кабель с USB разъемом непосредственно к плате.

USB Sound cards

Вторая карта не имеет такого недостатка, качество звучания вполне на уровне. Но при каждом 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.

Alsamixer

Если все работает нормально, приступаем к установке дистанционного управления - 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г.


PDF Журнал «Радиолюбитель»
PDF Подробное описание Pi Radio by Bob Rathbone. Ver. 4.7 01/01/2016
ZIP Файлы для русификации Pi Radio by RA4NAL.