WiFi радио из старой магнитолы

    image
    Эта статья посвящена практическим аспектам изготовления недорогого WiFi радио на основе OpenWrt роутера под управлением микроконтроллера Stellaris.


    Цели и обоснование выбора компонентов

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

    Выбор остальных компонент схемы несущесвеннен.

    Корпус

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

    Интерфейс

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

    Конструкция

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


    Программное обеспечение

    Stellaris это вам не ардуина, одних только UART портов, свободно работающих на 115200 у него 6 штук, что позволяет при отладке использовать два из них в качестве переходника USB — UART для ПК. Первая задача выполняемая ПО МК это проброс информации между UART1 подключенного к роутеру и UART0, который может быть подключен к ПК. Вторая — анализ проходящей информации и посылка событий в конечный автомат включая информацию об изменении состояния кнопок. Третья — реализация конечного автомата с анализом входящих сообщений и изменении информации на устройствах отображения

    После старта, МК ожидает сигнала окончания загрузки роутера, обновляет плей лист из интернет (я использую DropBox для хранения плейлиста), восстанавливает уровень звука и станцию, и посылает команду на начало проигрывания.

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

    Изготовление


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

    Потрошение.
    После соответствующей доработки корпуса он фаршируется новым оборудованием:

    Фаршировка.

    Платой роутера (1)
    Мне достался знаменитый Asus WL-500gP V2, достался за пиво в связи с проблемами по WAN порту, которые не влияли на работу в качестве WiFi хоста. Теоретически роутер должен подойти любой с возможностью установки OpenWrt и USB портом.
    USB звуковой картой (5)
    Я заказал такую, как показана на картинке и она работает, кроме того, была успешно опробована Asus Xonar U3, но она не дала ожидаемого улучшения качества звучания. Я подозреваю в связи с низкими битрейтом и качеством аудио тракта. Еще одна опробованная китайская USB звуковая карта, в прозрачном корпусе без кнопок, работать отказалась, при том что на ПК все было в порядке, причина неизвестна.
    Аудио усилителем (4)
    Я заказал его на EBay по принципу «шо подешевле». Не могу рекомендовать из за сильных высокочастотных шумов, хотя включенные последовательно с динамиками резисторы помогли их уменьшить до приемлемого уровня с сохранением достаточного уровня громкости.
    Устройствами индикации
    При построении радио по такой схеме достаточно использовать пару светодиодов для индикации состояния либо ориентироваться по светодиодам роутера, но чтобы ресурсы МК не простаивали я заказал вот такой OLED экранчик (3). Экран замечательный — компактный и контрастный, но слишком мелкий, особенно если предполагается эксплуатация радио людьми со слабым зрением. Поэтому в конструкцию был добавлен семисегментный индикатор с контроллером (6) показывающий наиболее важную на мой взгляд информацию — номер выбранной станции.
    Материнской платой
    МК (2), память (7) и разъемы на периферийные устройства я скоммутировал на макетке. Основанием для выбора внешней памяти стало сообщение о баге с флеш памятью в ранних версиях стелларис значительно снижающем количество циклов перезаписи. Без микросхемы памяти можно обойтись или же использовать внутренний флеш МК, но это потребует доработки ПО.
    Питанием (8)
    Роутер требует 5в 2а, усилитель 12в <1а я заказал два отдельных блока питания. подозреваю что есть более аккуратное решение и с удовольствием с ним познакомлюсь в комментариях.
    Устройствами управления (кнопками)
    Конструкция моей магнитолы позволила использовать после соответствующей модификации родную плату с кнопками. Надеюсь вам повезет также.

    Готово

    Бухгалтерия

    1 ASUS WL-500g Premium V2 $10 (дохлый WAN порт)
    2 EK-LM4F120XL Stellaris LM4F120 LaunchPad Evaluation Board $7.99 (сейчас)
    3 New 3.3V 0.96" 128X64 OLED LCD LED Display Module Shield white Color SSD1306 $8.74
    4 10W Mini HIFI 12V Digital power amplifier Stereo High power amplifier Board $4.99
    5 USB2.0 To 3.5mm Audio Microphone Speaker Port Adapter 7.1 Channel 3D Sound Track $2.08
    6 0.56" LED 7 Segment 4 Digit Common cathode MAX7219 arduino Blue White Green $3.68
    MAX7219 $0.45
    7 AT25040A ~$1
    8 Switch Power Supply Driver for LED Strip Light AC 110/220V 5V 2A 10W $8.16
    12V 1A 12W DC Switch Power Supply Driver $4.99


    Stellaris

    Стелларис порадовал, широкими возможностями и хорошей документацией, но осталось впечатление что продукт сыроват. Как со стороны железа, что возможно связано с тем что я использовал плату из предзаказа, так и со стороны ПО. При этом комьюнити не слишком большое, по сравнению с той же ардуиной, что приводит к тому, что сделав шаг в сторону от предложенных TI примеров вы оказываетесь на минном поле из загадок и багов вооруженные только документацией и исходниками.
    Так например, оказывается, что использование UART выше 2 требует внесения изменений в код библиотеки. На моей плате оказались закорочены PB7 и PD1 пины, хотя возможно это следствие моих не слишком корректных экспериментов. Не удалось заставить нормально работать пользовательские кнопки и другие не критичные но досадные мелочи.

    Что осталось нереализованым:

    • Прикрутить управление через ИК пульт, благо пинов и вычислительных мощностей МК хватает.
    • Завести через реле на МК управление питанием роутера что позволит реализовать «спящий» режим и при необходимости резетить роутер.
    • Наладить NTP и отображать точное время.
    • Реализовать таймер автоматического выключения радио после 4-5 часов проигрывания
    • Добавить в конструкцию жесткий диск с коллекцией музыки и возможность использования его при отсутствии интернета.
    • Добавить возможность использования нескольких плейлистов и кнопку переключения между ними.
    • Заменить кнопки громкости и выбора станции поворотными переключателями из старых мышек.


    Выводы

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

    Поделиться публикацией

    Комментарии 40

      0
      Отсчитывает время до взрыва и символизирует посылку снаряда? :)
        0
        Чем ближе к нулю, тем пристальнее все следят за таймером. Автор так эксперимент проводит =)
          0
          Загрузка занимает почти минуту. Это серьезный недостаток. Я, как мог, постарался скрасить пользователям ожидание.
            0
            Можно было бы просто крутить чёрточками значков, типо крутящихся прямойгольников.
            Скрытый текст
            Верхний символ 1 знака, верхний символ 2 знака, верхний символ 3 знака, верхний символ 4 знака,
            верхний правый символ 4 знака, нижний правый символ 4 знака
            нижний символ 4 знака, нижний символ 3 знака, нижний символ 2 знака, нижний символ 1 знака,
            нижний левый символ 1 знака, верхний левый символ 1 знака

            И так по кругу.
          +1
          Тоже хотел подобным заняться, но потом решил, что недорогой планшет на кухне будет практичнее — кроме радио можно видео посмотреть и рецепт побыстрому в памяти освежить. И компактно очень. Не уверен только, перекричит ли встроенный динамик звуки кухни…
            0
            звук как по качеству?
              +1
              Остался такой же хреновый. Не ухудшился, по сравнению с FM.
              0
              не совсем понял для чего нужна spi-память (7). В ней хранится рабочая программа для МК или уровни громкости и последние станции?
                0
                Основанием для выбора внешней памяти стало сообщение о баге с флеш памятью в ранних версиях стелларис значительно снижающем количество циклов перезаписи. Без микросхемы памяти можно обойтись или же использовать внутренний флеш МК, но это потребует доработки ПО.
                  0
                  я бы сначала убил бортовую флешь, а потом приделал бы внешнюю
                    0
                    А я бы попробовал совсем выкинуть оттуда МК как предложил Anonym или взял бы для UART что-нибудь полегче. Использовать ARM только чтобы рулить дисплеем это слегка перебор.
                      0
                      Почему только дисплеем?
                      Что вы предложите на «полегче»?
                  0
                  Громкость, последняя станция и названия всех станций из плейлиста.
                    0
                    так это можно в файле хранить на openwrt. при загрузке пусть стелларис его забирает.
                  +2
                  Почему решили использовать Stellaris?
                  Ведь экран, звуковуху, IR приемник — всё можно подключить и к wl500gPv2 напрямую. И это будет работать.
                    0
                    Я что то пропустил? Из wl500gPv2 можно распаять SPI?
                      0
                      Я, если честно, не силен в этом, но к нему подключают дисплеи, звуковуха и IR приемник подключаются по USB.
                        0
                        Можно найти USB дисплеи и кнопки, но я подозреваю, что это будет гораздо дороже и всю логику надо будет строить со стороны линукса. Мне это не интересно.
                    +1
                    А не поделитесь плейлистом? )
                    –1
                    Знаете, судя с ценой во сколько это все обойдется, проще купить уже готовый.
                    +1
                    >> Еще одна опробованная китайская USB звуковая карта, в прозрачном корпусе без кнопок, работать отказалась, при том что на ПК все было в порядке, причина неизвестна.

                    Причина, скорее всего, банальна. Существует множество USB-устройств китайского производства, в которых вся начинка только эмулирует присутствие устройства, без реализации соответствующего функционала. Несколько лет назад мне достался USB-накопитель емкостью 16 Гб (тогда немыслимая емкость). По факту на борту стояло 256 Мб памяти и контроллер, который эмулировал заявленную емкость 16 Гб. При попытке записать данные более 256Мб устройство переставало работать. Устройство носило гордое имя «SONY», но качество исполнения было очень низким (потеки краски на внутренней стороне крышки устройства, плохая обработка пластика и т. д.), а название фирмы производителя было просто напечатано краской.

                    А затем один мой знакомый принес мне USB Bluetooth адаптер с просьбой посмотреть, почему не работает. Устройство определялось ОС, драйвер устанавливался, но не работало… Я попросил показать устройство, и долго смеялся, когда его увидел… От той флешки почти ничем оно не отличалось, точно такой же корпус, только вместо надписи «SONY» такой же краской было напечатано «Bluetooth 3.0». Вскрыл корпус, там стоял контроллер, который всего лишь отвечал за определение устройства, не выполняя никакого полезного функционала.
                      0
                      Всё немножко сложнее. На windows ПК звуковушка определялась и работала, а вот линукс ее не видел.
                        0
                        У меня работает такая:
                        Bus 001 Device 003: ID 0c76:1607 JMTek, LLC. audio controller
                      0
                      Да вы, батенька, перфекционист! Я собирал на китайском usb аудио адаптере(переплатив за него на Савеловском рынке в 10 раз дороже — 350р), роутере и 2х USB колонках за 200р почти то же, без дисплея.

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

                      Из колонок убрал аудиошнур (до этого выходило 2 шнура: аудио и питание по USB). Встроил USB audio прямо в корпус колонок, подпаяв нужные провода и теперь только 1 шнур — USB.

                      Фронтальный вид:


                      На роутере TL-MR3020 музыка время от времени заикалась. На TL-WDR3500 к звук претензий нет, качество вполне в своей ценовой категории!

                      Пробовал для MPD какой-то клиент для gnome, не стабильно работал и была проблема с руссификацией. Надо будет поискать веб интерфейс какой-нибудь и захостить на том же роутере.
                        0
                        Какие скрипты использовали на роутере? Пытался сделать подобное — не получилось. Подскажите, где можно найти пошаговое руководство к действию?
                          0
                          Пошагового я не помню, смотрел отсюда и про mpd с фронтэндом

                            0
                            Самая подробная инструкция тут.
                              0
                              Я пробовал все упихать в TP-Link MR3020 — уперся в малое количество памяти. А именно он важен из-за миниатюрности.
                                0
                                я в него упихал 4-х портовый hub, usb-звуковуху, 8GB usb-же флешку, еще один usb порт вывел наружу (стало 2), и еще вывел бортовой com-порт наружу. вобще есть где развернуться теперь. (правда у меня аналог — WR703N)
                              0
                              Спасибо. Буду изучать.
                          0
                          Эх, где ж вы такой кислотный корпус-то откопали? У меня тоже в планах такая же штука, только корпус хочу найти типа такого:



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



                          Получится такая тёплая ламповая игрушка. Но не так дёшево выйдет, конечно.
                            0
                            У отца в гараже стоит подобная. Подкинули идею
                            0
                            igor_suhorukov, AndreyDmitriev
                            Мессадж примерно в этом и состоял, идее прикрутить к роутеру звуковушку не первый год, но начинать ее реализацию надо с поиска подходящего корпуса.
                            И да, на 128Kbps поток усилитель должен быть только ламповый. )
                              0
                              В случае с колонками можно их повесить где удобно, роутер спрятать или тоже прибить к стене гвоздем, поскольку управление только по wifi, то никакие дисплеи и управление на девайсе не нужно.
                              Спасибо, ваш пост напомнил о плеере на кухне и я поискал веб фронтэнд для MPD. Теперь ampache надо попробовать установить на openwrt.

                              Проделаная вами работа вызывает уважение за усердие!

                              Зря вы так критично, теплом от нити подогрева катода можно греться теплыми зимними вечерами!!! И кот оценит)
                              0
                              Мы мессадж поняли правильно :). Что касается ламповости — то задача сделать High End устройство не стоит (я не аудиофил вовсе), но линейный вход и USB там будут. Я, скорее всего пойду по пути наименьшего сопротивления — у меня уже есть готовое интернет-радио, вот такое:

                              Вот его начинку я и запихну в древний корпус. Оно и по концепции двух ручек подходит. Ну и качество в любом случае будет выше, так как пищалки этого устройства всё равно никуда не годятся. В идеале нужна радиола, у которой сверху крышка, закрывающая проигрыватель пластинок. Там можно сверху USB и входы вывести, кроме того там же можно и CD разместить (у меня есть старенький iRiver — как раз подойдёт), ну чтобы колхоз на передней панели не городить.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое