Про домашний беспроводной маршрутизатор TP Link MR3020 с Openwrt уже писали на Хабре. В данной статье я расскажу, как эту недорогую, но полезную коробочку научить управлять телевизором, XBMC плеером и любой другой домашней электроникой, понимающей ИК сигналы с пульта управления. Более того, и сам MR3020 научится принимать сигналы, подаваемые с любого пульта ДУ.
Чем и как конкретно управлять — решать вам, тем, кто возьмется повторить шаги, описанные ниже. У меня такие коробочки теперь управляют связкой TV-XBMC в гостиной и на кухне. При этом для управления используется всего один пульт. В ближайших планах — выбрать в соседнем подземном переходе пульт, который понравится всем домочадцам, и закупить таких штуки 3. Конечно, тем же хозяйством можно управлять с планшета Android (через Wi-Fi) или с компьютера (через Ethernet), но такой способ, похоже, кроме меня никого в нашей семье не вдохновляет.
Перепаянная коробочка и аксессуары к ней выглядят у меня вот таким образом:
В центре находится переделанное устройство. Контакты разъема мини-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 http://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 будет стартовать автоматически при загрузке роутера.
Коробочка готова к работе! Теперь ваш TP-Link MR3020 умеет принимать и передавать ИК сигналы.
Осталось только изучить irexec и создать соответствующий /root/.lircrc файл – и вот Ваш телевизор уже умеет понимать неродной пульт.
Если Вы обратили внимание, наш lircd уже принимает удаленные конвекции на стандартном порту 8765. Это упростит настройку связки xbmc+lirc на linux медиа плеере. Если xbmc работает на Windows, копаем в сторону eventghost+xbmc
Заключение
В итоге получаем возможности по перепрограммированию поведения ПДУ под конкретные домашние нужды, а также возможность управления домашней электроникой через web (так как полученная “коробочка” может получать команды не только по ИК, но и по обычному WiFi/Enternet интерфейсу.
В общем, кому не лень, паяльник в руки и – вперед!
Автор: PolinaKoroleva