Универсальный ПДУ для XBMC из TP Link MR3020

  • Tutorial
Про домашний беспроводной маршрутизатор TP Link MR3020 с Openwrt уже писали на Хабре. В данной статье я расскажу, как эту недорогую, но полезную коробочку научить управлять телевизором, XBMC плеером и любой другой домашней электроникой, понимающей ИК сигналы с пульта управления. Более того, и сам MR3020 научится принимать сигналы, подаваемые с любого пульта ДУ.

Чем и как конкретно управлять — решать вам, тем, кто возьмется повторить шаги, описанные ниже. У меня такие коробочки теперь управляют связкой TV-XBMC в гостиной и на кухне. При этом для управления используется всего один пульт. В ближайших планах — выбрать в соседнем подземном переходе пульт, который понравится всем домочадцам, и закупить таких штуки 3. Конечно, тем же хозяйством можно управлять с планшета Android (через Wi-Fi) или с компьютера (через Ethernet), но такой способ, похоже, кроме меня никого в нашей семье не вдохновляет.

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

Универсальный ПДУ для XBMC из TP Link MR3020

В центре находится переделанное устройство. Контакты разъема мини-USB использованы для подключения пары фотоприемник-светодиод. Данные компоненты размещаются в корпусе из-под дешевого микрофона Dialog (родные салазки от микрофона затем на липучке крепятся на телевизор, вблизи родного телевизионного ИК приемника). Для питания выведен новый разъем (обычный, 2-х штырьковый).

Вот, как вся эта обвязка смотрится на телевизоре:

Переделанное устройство на телевизоре

В красном кружочке виден подключенный приемник-излучатель.

А вот он же вблизи (в кружке – ИК фотоприемник):

Переделанное устройство на телевизоре

Задней своей частью прибор светит в ИК приемник телевизора (кружком обведен ИК светодиод):

Переделанное устройство на телевизоре вблизи с ИК фотоприемником

Роутер скотчем прикреплен сзади телевизора (обязательно выбрать место, которое у телевизора не нагревается). Немного не эстетично, но кто же туда заглядывает?

Переделанное устройство на телевизоре вблизи с роутером

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

Итак, начнем…


Первый шаг – ознакомиться со страницей про роутер на Openwrt. На страничке есть инструкция по разборке устройства. Вскрываем коробочку и ищем куда-бы чего припаять.

Собственно, куда припаять расскажет другая полезная ссылка — страничка на французском про использование GPIO 7 и 29 под шину i2c. Собственно, те же GPIO мы и будем использовать для подключения ИК приемника (GPIO 7) и светодиода (GPIO 29). Наша цель – подключиться ровно к тем же местам, что и в статье (R15, R17, 5 V, земля). Одна важная деталь: в отличие от статьи не надо выпаивать резисторы R15 и R17. Так и усилий надо гораздо меньше, и риск повредить контактные дорожки минимален.

Итак, шаг второй – паяем. Выбор проводков для пайки – очень важное дело. Я использовал одножильные волоски от сломанных наушников. Кончик такого проводка легко лудится (нагрев приводит к разрушению изоляции на кончике), и пайка залуженного проводка достаточно проста. Один совет: перед пайкой зафиксируйте проводок на плате скотчем, аккуратно вытяните проводок до нужной длины, и зубочисткой поставьте кончик проводка точно на контактную площадку. Таким образом проводок будет точно зафиксирован на своем месте, и пайка сводится к короткому прикосновению иглой паяльника к месту контакта.

В качестве приемника рекомендую TSOP31238, а в качестве излучателя – фотодиод TSAL5100 (брал в Питере, в “Чип и Дип” вместе с разъемами).

Схема подключения выглядит вот так:

Схема подключения

Резистор R2 (5 K) нужен для того чтобы не выпаивать встроенный резистор R15.

Во время отладки проще всего вывести нужные проводки (5 V, земля, GPIO 7, GPIO 29) на 4-х штырьковую маму-колодку, а саму маму приклеить супер клеем к подходящей для этого микросхеме T1 (усилительные каскады для Ethernet). Выглядит это вот так:

Схема подключения

А с подключенным фотоприемником – вот так:

Схема подключения

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

Остается последний шаг – software.


Не буду подробно расписывать lirc и углубляться в модификации под данный проект (желающие могут взять исходный код на githab). Вкратце так: в основе проекта lirc 0.9.0, но его serial driver был слегка переработан для управления GPIO.

Прошиваем аппарат финальной прошивкой Openwrt Attitude Adjustment. Прошивка достаточно проста и весь процесс прекрасно описан, например, тут. Необходимо будет сконфигурировать роутер таким образом, чтобы обеспечить подключение к сети. Для конфигурации проще всего воспользоваться встроенным web интерфейсом.

Далее описаны шаги для установки необходимых программ с Windows компьютера. Прежде всего потребуется установить на наш рабочий компьютер putty.

Скачиваем в директорию с установленным putty следующие файлы: lirc_0.9.0-1_ar71xx.ipk и lirctools_0.9.0-1_ar71xx.ipk

Теперь копируем данные файлы на MR3020, используя следующие команды (замените 192.168.1.1 на адрес вашего роутера):

pscp.exe -scp lirc_0.9.0-1_ar71xx.ipk root@192.168.1.1:.
pscp.exe -scp lirctools_0.9.0-1_ar71xx.ipk root@192.168.1.1:.

Заходим на аппарат при помощи putty (ssh). Набираем следующие команды:

opkg install lirc_0.9.0-1_ar71xx.ipk
opkg install lirctools_0.9.0-1_ar71xx.ipk

Теперь попробуем запустить lirc вручную:

insmod lirc_dev
mkdir -p /var/run/lirc
lircd
insmod lirc_serial gpio_in_pin=7 gpio_out_pin=29 debug=1
mode2 -d /dev/lirc0

Попробуйте посветить любым ИК пультом в окошко ИК фотоприемника. Если прибор реагирует, значит lirc готов к работе в качестве фотоприемника. Жмем Ctrl-C и приступаем к следующей части.

Создаем файл /etc/init.d/lirc следующего содержания:

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=50

start() {
insmod lirc_dev
mkdir -p /var/run/lirc
service_start /usr/sbin/lircd --release=_END --listen=0.0.0.0:8765 --device=/dev/lirc0
insmod lirc_serial gpio_in_pin=7 gpio_out_pin=0 debug=1
service_start /usr/sbin/irexec -d /root/.lircrc
}

stop() {
killall irexec
killall lircd
rmmod lirc_serial
rmmod lirc_dev
}

Разрешаем выполнение lirc:

chmod +x /etc/init.d/lirc

Перезагружаем роутер.

Теперь проверим работоспособность передатчика.


Прежде всего необходимо загрузить или сгенерировать самому файл lircd.conf. Данный файл содержит коды пульта ДУ для конкретного устройства (телевизора, DVD и т. п.). Есть шанс, что ваш пульт уже кем-то оцифровывался, и необходимый файл можно найти на сайте lirc. Допустим, нужная дистанционка фирмы LG называется AKB33871420. Загружаем ее файл в домашнюю директорию:

wget lirc.sourceforge.net/remotes/lg/AKB33871420

Если вашего пульта нет на сайте, самое время записать его. Готовимся жать на все кнопки вашего ПДУ и запускаем в putty (не забудьте поменять MYREMOTE на имя вашего пульта, например AKB33871420):

/etc/init.d/lirc start
Killall lircd
irrecord -d /dev/lirc0 -n MYREMOTE

Далее внимательно следуем инструкциям и записываем файл MYREMOTE с кодами нашего ПДУ.

Итак, в домашней директории появился файл для нашего пульта ДУ. Скопируем его в папку lirc.

cp MYREMOTE /etc/lircd.conf
/etc/init.d/lirc stop
/etc/init.d/lirc start
irw

Еще раз посветим нашим пультом ДУ на приемник. Внимательно следим, как отвечает irw. Если все в порядке, наши коды начали распознаваться. Наигрались? Жмем Ctrl-C для выхода и идем дальше. Попробуем посветить в телевизор нашим прибором. Направляем фотодиод в сторону телевизора и даем следующую команду:

irsend send_once MYREMOTE mute

Здесь MYREMOTE – имя пульта ДУ, а mute – код клавиши mute. Названия обоих параметров можно уточнить в файле lircd.conf.

Если все идет хорошо, телевизор отреагирует на команду mute. В таком случае поздравляем друг друга — все заработало. Осталось только сконфигурировать устройство для авто загрузки необходимых компонент на старте (пресловутый “последний штрих”).

В административном интерфейсе openwrt меняем статус lirc с “disabled” на “enabled”. Теперь lirc будет стартовать автоматически при загрузке роутера.

Административный интерфейс openwrt

Коробочка готова к работе! Теперь ваш TP-Link MR3020 умеет принимать и передавать ИК сигналы.

Осталось только изучить irexec и создать соответствующий /root/.lircrc файл – и вот Ваш телевизор уже умеет понимать неродной пульт.

Если Вы обратили внимание, наш lircd уже принимает удаленные конвекции на стандартном порту 8765. Это упростит настройку связки xbmc+lirc на linux медиа плеере. Если xbmc работает на Windows, копаем в сторону eventghost+xbmc

Заключение


В итоге получаем возможности по перепрограммированию поведения ПДУ под конкретные домашние нужды, а также возможность управления домашней электроникой через web (так как полученная “коробочка” может получать команды не только по ИК, но и по обычному WiFi/Enternet интерфейсу.

В общем, кому не лень, паяльник в руки и – вперед!
Veeam Software
105,00
Продукты для резервного копирования информации
Поделиться публикацией

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

    0
    Не бюджетно, вам не кажется.
      +1
      Весь бюджет (без учета стоимости ‘халявного’ пульта от отслужившего свое TVIX 6600N, который имелся в наличии) составил где-то 1300 руб. Может и дорого, но зато у меня, например, rasberry pi ‘до кучи’ берет от MR3020 как питание так и Wifi.
      0
      А почему бы не купить пульт от PS3 и подружить его с xbmc, никаких коробочек и датчиков
        +1
        Пульт от PS3 подключенный к xbmc не умеет управлять телевизором
        +1
        У меня как-то получается управлять с родного пульта телека (Sony, Samsung) причем первый из них достаточно древний, года 3-4.
          0
          Я для целей управлления использую все имеющиеся у меня Android-устройства (yatse) и компьютеры (synergy). И никаких дополнительных устройств покупать не пришлось. И ничего никуда клеить тоже. И искать пульт от чего-нибудь — тоже.
            0
            Как здорово, lirc оказывается и для Rasberry есть.
            Я в свое время голову сломал, потом решилось покупкой
            Globalcache GC-100-06
            Правда у него все реализовано через одно место, особенно прием сигналов, нет готовых библиотек распознавания принятых сигналов, он их отдает в виде оцифрованного семпла. Добавить сюда общение только по телнету и ценник конский.
            Ваша статья сильно порадовала, хотя желание управлять ТВ с веб браузера на данный момент уже минимальное, чтобы еще раз пройти через это))
              0
              Если управляеть разными устройствами — тогда ок. Но если пульт нужен только для XBMC — не понимаю, зачем городить всё на MR3020, когда можно подключить фотоприемник/светодиод напрямую к мат.плате (к rs232 например).

              Я недавно делал нечто подобное. Стояла задача — не только выключать, но и включать MiniITX-компьютер с пульта. Пробуждаться от USB-клавиатуры умеют далеко не все мат.платы. Моя не умела. Поэтому вариант с китайским MCE-пультом просуществовал недолго. Когда-то я купил удобный пульт, но он не хотел работать с LIRC (работал нестабильно). Решение было такое: я снял осцилограммы кодов разных кнопок, определил модуляцию, написал несложную программку для «самодельной arduino» на базе atmega8, которая считывала коды кнопок и передавала их в компьютер через RS-232. В случае получения кода кнопки POWER (его я захардкодил — некрасиво, но быстро и компактно), код не отсылался в порт. Вместо этого сажался на землю один из пинов микроконтроллера, который в нормальном состоянии имел «высокий» уровень, и был подключен к разъему материнской платы параллельно кнопке включения питания.
                0
                Я увидел на фотке что-то вроде WD Live.
                А что если сделать небольшой рефакторинг:
                1) Выкинуть WD Live
                2) Купить Android HD player в формате брелка, который вставляется в HDMI порт. На DX такие по $50. Можно даже найти вариант с питанием по HDMI.
                3) Подключить IR Трансивер к нему по USB.

                В итоге получим тоже самое, но кол-во обвеса вокруг телевизора уменьшится. :D

                п.с MR3020 потрясающая вещь. Благодаря ей я теперь могу позволить себе проводить совещания по видео прямо с пляжа.

                Кстати, вопрос как к специалисту, а на ней можно как-то USB-девайс заресетить софтово? Т.к. Yota-модем виснет через час-полтора онлайна и его нужно вытаскивать для ресета.
                  0
                  > можно как-то USB-девайс заресетить софтово?

                  Что-то такое не пробовали?

                  superuser.com/questions/141908/how-do-i-reset-an-usb-device-without-unplugging-it-in-linux
                    +2
                    на MR3020 легко:
                    выключаем питание USB Порта
                    echo '0'>/sys/class/gpio/gpio8/value

                    включаем
                    echo '1'>/sys/class/gpio/gpio8/value

                      0
                      Прекрасно. Именно то, что нужно. Вставил в вочдог. Теперь коннект к инету стабилен, как дмв :D
                      0
                      Вы пробовали такие свистки? Ни на что иное кроме как временная игрушка для гика они не способны. Да и советовать поменять брендовую хорошую вещь на китайский нонейм как-то не тактично.
                        0
                        После фразы с восхвалением брендовости исключительно из-за ее брендовости, все буквы разбежались и остались только знаки препинания и междуматия.
                          0
                          Знаете ли я когда выбирал себе плеер читал отзывы о указанном выше плеере, и у знакомого есть такой. А Свисток имею в личном пользовании, как раз с DX. Даже не смотря на то что я смог опознать его и найти сайт производителя с обновляемыми когда-то прошивками тыква не превратилась в карету. Даже по сравнению с не менее китайскими плеерами Iconbit, имеющими хоть и хреновую но русскоязычную поддержку, свистки сравнивать не корректно. Плеер заточен на воспроизведение медиаконтента, в нем стоит специализированный процессор, а в свистках стоят универсальные процессоры, хоть и подточенные под воспроизведение, но это не основная их функция. Или может Вы являетесь владельцем свистка который работает у Вас на ура, радует Вас своей безглючностью и Вы сравнивали его с медиаплеером по качеству, удобству использования и.т.д.?
                            0
                            Мои поиски идеального HTPC начались с 2004-м году. Поиски включали личное пользование такими вещами как: AppleTV, Asus O!Play, WD TV Live, MSI Mega180 и еще десятка 2 различных железок. Равно как и практическое использование Team MediaPlayer, XBMC, Boxee, MythTV на Linux, Windows, Mac OS X, Android. Не говоря уже о десятках других поделок, которые я сейчас не вспомню.

                            Как вы считаете, вышеприведенного опыта достаточно, чтоб считать свое мнение обоснованным?

                            Кстати, Asus O!Play и WD TV по факту оказались самыми дерьмовыми китайскими решениями из всего вышеперечисленного.
                              0
                              Возможно опыта использования различных плееров достаточно, но вот Вы не ответили на мой вопрос, есть ли у Вас подобный стик? Тот факт что на нем можно попробовать завести XBMC не говорит о его качестве и функциональности. Я вот пробовал завести, не взлетело. Я не оспариваю удобство XBMC, хотя сам им так и не пользовался толком, только пробовал на стике и планшете одну из первых бета версий. Но вот работоспособность подобного решения на предлагаемом железе под вопросом, почитайте 4pda по данным поделкам, как оно работает. После использования медиаплеера. в моем случае Iconbit XDS73D, я не захотел использовать свой стик. Вполне возможно что перепробовав кучу разных прошивок и правки каких либо файлов и еще n-го количества шаманст возможно получить приемлемое качество и удобство, но стоит ли овчинка выделки?
                                0
                                , но вот Вы не ответили на мой вопрос, есть ли у Вас подобный стик? Тот факт что на нем можно попробовать завести XBMC не говорит о его качестве и функциональности.


                                Есть (с колхозом в виде радиатора), но на данный момент не используется. Я использую медиацентр на базе X86+Windows 8 — занимаюсь тем, чтоб сделать управление Windows 8 с помощью жестов через XBOX Kinect.
                      0
                      данный телевизор может управлятся по com-порту
                      Не пробывали? или в этом роутере нет КОМа?
                        0
                        Сом-порт есть, но в нем хардварно прописанные настройки, в случае необходимости не поменять.
                        0
                        Я вот так и не понял смысла шаманств, получит пульт 2в1?
                          0
                          Чем я ползьзуюсь, для решения подобной проблемы:
                          Не реклама
                          HDMI-CEC USB адаптер для управления ПК с помощью пульта телевизора подключенного по HDMI. Естественно телевизор должен это поддерживать (Simplink у LG, Samsung'овский AnyConnect+, “BRAVIA” Sync/Link у Sony и т.п.)
                            0
                            Мда. Хоть lirc и ставится, нужные модули ядра не появляются никак. В чём же проблема?
                              0
                              Много что изменилось с тех времён, хоть и всего два месяца прошло.
                              1) service_start больше не используется. Нужно использовать start-stop-daemon
                              2) Драйвера для lirc больше не включены в поставку пакета, они должны быть включены в ядро. Но, чёрт побери, они не включены в стандартное ядро OpenWRT.
                              3) insmod в принципе не выдаёт предупреждений о том, что модуль, который пытаешься импортировать, не существует. Молчит, партизан фигов.
                              Вывод — для новых сборок OpenWRT статья неактуальна. Нужно собирать своё ядро, вшивать туда modprobe и переделывать скрипт под start-stop-daemon. Если доберусь до этого, напишу свою статью.

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