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

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


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

Часть 1. Hardware.

Pi Radio с энкодерами

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

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

Неудивительно, что сейчас многие пользователи предпочитают слушать радиостанции, вещающие во Всемирной сети. В настоящее время количество интернет-радиостанций уже превысило 10 тысяч. Через Интернет можно слушать программы станций, расположенных практически в любой стране мира и вещающих на самых разных языках. Но включать компьютер для того, чтобы слушать радио, мягко говоря, неудобно. Как-то привычнее и удобнее – покрутил ручку – настроился на станцию...

И так, буду делать интернет-радиоприемник. Такая мысль пришла мне в голову, когда я решал, для какого-бы проекта использовать микрокомпьютер Raspberry Pi model B, который остался не у дел после приобретения гораздо более мощного Raspberry Pi 2.

Существует много проектов интернет радио на Raspberry Pi. Лучшее, что мне удалось найти – это Pi Radio. Автор – Bob Rathbone - работает над этим проектом на протяжении более 2 лет. Особо следует отметить открытость и доступность всей информации, а также очень подробное описание аппаратной части и методики настройки программного обеспечения.

Именно эту разработку я и решил повторить. Разумеется, я не просто слепо скопировал конструкцию, а подошел к процессу творчески, добавил кое-что свое.

И так, что же собой представляет Pi Radio. Это интернет-приемник, который позволяет слушать on-line радиостанции, кроме того, он может проигрывать музыкальные файлы с флэшки или сетевого диска в домашней сети. В программу заложено много всевозможных сервисных функций – таймер, будильник, RSS новости, подкасты...

Подключение к сети Интернет может быть как проводным, так и по WiFi. Основа приемника – популярный микрокомпьютер Raspberry Pi, причем можно использовать любую модель: B, B+, 2 или Zero.

Bob Rathbone разработал несколько вариантов схемы и программного обеспечения. Управление возможно как с помощью энкодера, так и кнопок, отображение информации на 2-х или 4-х строчном символьном LCD дисплее. Управлять приемником можно с пульта ДУ.

Дисплей можно подключить как непосредственно к портам ввода-вывода Raspberry Pi, так и с использованием платы на основе PCF8574 по шине I2C. Автор предусмотрел возможность использования еще двух типов дисплеев – AdaFruit LCD с интерфейсом I2C и PiFace CAD с интерфейсом SPI.

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

Замечу, что сначала я попытался подключить дисплей по шине I2C с использованием платы на PCF8574. Потратил массу времени на наладку, но в конце концов пришлось отказаться от этого варианта. Программное обеспечение довольно сложное и объемное, очевидно, у автора просто нет сил и возможности провести тщательное тестирование всех вариантов своего радио.

Программа постоянно зависала, особенно при посылке команды с пульта ДУ. В чем тут дело разобраться сложно. А вот варианты с непосредственным подключением дисплея к Raspberry Pi работают устойчиво. Поэтому, я не рекомендую использовать шину I2C или SPI в этом приемнике.

На мой взгляд, автор уделил слишком много внимания всевозможным вспомогательным функциям в ущерб основным. Ведь возможности LCD индикатора очень ограничены и читать на нем, например, новости не очень комфортно. Использовать приемник в качестве будильника весьма рискованно, если по какой-то причине не будет интернета – не будет и радио. Да и электричество могут ночью отключить...

Pi Radio изнутри

Однако, в общем и целом все получилось, приемником можно пользоваться.

По сути, радиоприемник представляет собой плату Raspberry Pi, к портам ввода-вывода которой подключен дисплей и 2 энкодера. С помощью одного из них осуществляется выбор станции, с помощью второго регулируется громкость. Дисплей использован самый распространенный, на основе контроллера HD44780 на 2 строки по 16 символов. Вместо энкодеров можно использовать для навигации 5 кнопок.

Для любителей качественного звука предусмотрена возможность использования вместо AUDIO выхода Raspberry Pi внешней USB звуковой карты.

Разумеется, для приемника нужен блок питания. Тут много вариантов выбора – подойдет любой стабилизированный блок питания на 5 вольт с током не менее 1,5 А. Имейте в виду, что зарядник от телефона не подойдет, нужен именно стабилизированный блок питания, напряжение под нагрузкой не должно падать ниже 4,8 В, а без нагрузки подниматься выше 5,2 В.

Ну и музыку надо как-то слушать, т.е. необходим стерео усилитель или активные колонки. Тут тоже масса вариантов на любой вкус (слух) и кошелек.

Я решил для этого проекта использовать по максимуму свой радиолюбительский «ящик с хламом». В нем нашелся прекрасный сетевой трансформатор на нужный ток и напряжение, микросхема импульсного стабилизатора LM2576-ADJ и микросхема неплохого и довольно мощного стерео усилителя НЧ LM1876.

Автор предлагает включать и выключать приемник просто сетевым выключателем. Хотя это и не причинит вреда Raspberry Pi, но при неудачном стечении обстоятельств может повредить файловую систему на SD карточке. Поэтому я решил дополнить устройство схемой корректного закрытия системы и выключения питания. Тем более, что такой режим автор предусмотрел – нужно нажать и удерживать кнопку «Меню» в течение 3 сек, после чего подождать еще примерно 30 сек и выключить питание. Согласитесь – это весьма неудобно.

В результате получилась вот такая схема. Это мой первый вариант с управлением энкодерами. Голубым цветом выделены мои дополнения.

Pi Radio схема с энкодерами

Управление настройкой и громкостью осуществляется с помощью энкодеров с кнопками SA1, SB1 и SA2, SB2 соответственно. Кнопка SB1 – вход в «Меню», SB2 – режим «Mute». Энкодеры должны выдавать последовательность сдвинутых на 90 градусов импульсов. Я использовал тип ES110501S-HA2 5 pin. Под такой маркировкой они значились в прайс-листе магазина.

Транзисторы VT3...VT7 и резисторы R11...R23 – это преобразователи логических уровней 3,3 – 5 В для индикатора. Эти элементы устанавливать необязательно. Как показала практика, 5-и вольтовый индикатор нормально работает с логическими уровнями 3,3 В. Однако, если возникнут проблемы, преобразователь уровней можно смонтировать на небольшой плате непосредственно на индикаторе. Ещ