Привет, меня зовут Виталий, я автор и разработчик Android приложения IrCode Finder. Оно создавалось как инструмент подбора управляющих ИК-кодов для других моих приложений, но выросло в самостоятельный проект. В этой статье я расскажу об этом инструменте, немного больше, чем описано в справке на странице самого приложения. Если вы когда-нибудь пытались найти приложение-пульт, но ничего не вышло, то однозначно стоит попробовать IrCode Finder.
Приложение платное, но это не смертельно, подробнее под спойлером
Полная версия доступна в RuStore, но главная функция приложения - подбор кодов доступна бесплатно, и можно сохранить 5 найденных кодов без оплаты полной версии. Этого должно быть достаточно чтобы собрать базовый пульт управления с основными функциями устройства.
Введение, термины и определения
Начать следует с того что для работы приложения нужен ИК передатчик, встроенный или внешний. Если у вас телефон Xiaomi, POCO или OnePlus то с вероятностью 99% он имеет встроенный ИК передатчик. Если нет, то приложение также поддерживает внешние ИК передатчики подробнее об этом я написал в справке к приложению на своем сайте, ссылка, будет в конце статьи.
ВНИМАНИЕ! Возможны нежелательные результаты и даже "Кирпичи"!
Следующее, о чем следует упомянуть так это возможные нежелательные последствия. Многие устройства, управляемые ИК-пультами, в частности телевизоры, имеют недокументированные последовательности кодов, используемые для обслуживания оборудования обученными на заводе техническими специалистами, имеющими подробные руководства и специальное оборудование. Отправив служебный код на свой телевизор или другое устройство, вы можете перевести его в состояние, в котором он больше не будет работать должным образом или вообще перестанет работать. Примером этого может быть сброс различных смещений, изменение ширины или высоты изображения. Будьте осторожны. Если вы не уверены в том, каким может быть результат, возможно, вам не стоит этого делать.
Относительно безопасным можно считать подбор кодов для различных люстр, светодиодных лент, вентиляторов, акустики и других несложных устройств. При подборе кодов постарайтесь максимально исключить случайный прием сигнала сложными устройствами. Если вы подбираете коды для люстры, то телевизор на это время лучше совсем отключить от сети вынув вилку из розетки.
Вводная часть завершена, переходим к сути. В мире пультов управления существует множество протоколов, наиболее популярный на сегодняшний день это протокол NEC, программа разработана для работы именно с этим протоколом. Для уменьшения количества «колдунства» и понимания что же на самом деле происходит при подборе кодов нужно ввести пару понятий это код «адреса устройства» (иногда называемый sys-code) и код «команды» (data-code). На самом деле протокол устроен немного сложнее, но для взаимодействия с приложением этих двух понятий будет достаточно.
Скрин с полями адрес устройства и команды
![Поле адреса устройства и команды Поле адреса устройства и команды](https://habrastorage.org/getpro/habr/upload_files/c75/6d1/b4e/c756d1b4ed35f09116d7a0509880cac3.jpg)
Протокол NEC поддерживает всего 256 кодов команд, а для того чтобы разные устройства не реагировали на один и тот же пульт управления – перед отправкой команды отправляется код адреса устройства, которое должно обработать команду. Все коды команд, которые устройство способно обрабатывать почти всегда ограничены именно адресом устройства, но иногда встречаются устройства, которые могут обрабатывать команды из разных адресов. Попробуем перефразировать:
C помощью кода адреса устройства принимающая сторона понимает, что команда адресована именно ей, а не другому устройству
Таким образом при подборе кодов наиболее важной задачей является поиск адреса устройства, внутри которого есть команды, на которые устройство хоть как-то реагирует.
Как это работает
В приложении реализовано 3 механизма подбора кодов.
Ручной подбор
Умный режим подбора по шаблонам
Грубый режим перебора всех команд по списку адресов устройства
Я рекомендую начинать с умного режима. В этом режиме приложение будет перебирать «шаблоны» наиболее распространенных кодов для команд «Питание» и «Приглушение звука». Если оригинальный пульт использует протокол NEC и на нём есть одна из этих двух кнопок, то с вероятностью 80% шаблон на который устройство отреагирует будет найден уже на этом этапе. Как только устройство отреагирует нужно остановить подбор, вернуться на несколько шаблонов назад и найти тот на который устройство отреагировало при автоматическом тестировании. Далее нажимаем кнопку перехода в «ручной режим» и уже сейчас можно поздравить себя – вы нашли код адреса устройства, теперь остаётся найти нужные вам команды.
Скрин режим умного подбора на примере акустики Microlab Solo 7С
![](https://habrastorage.org/getpro/habr/upload_files/4fe/d76/0f2/4fed760f26e37080e1819098038ef323.jpg)
Первую команду можно сохранить уже сейчас, нажимаем сохранить, вводим производителя устройства и модель, название команды, сохраняем. Теперь можно перейти к команде 0 и по порядку протестировать все команды сохраняя нужные коды. По моему опыту, для большей надежности кнопку ТЕСТ лучше нажимать несколько раз.
Кнопка «Исключить» добавит код в «Игнор» и при перелистывании программа будет пропускать его и переходить к следующему. Кнопки влево и вправо при удержании будут перелистывать коды команд и автоматически тестировать эти коды.
Механизм грубого перебора отличается от «умного режима» только набором кодов. В этом режиме приложение будет перебирать все 256 кодов команд для каждого адреса устройства. Хотя протокол NEC поддерживает более 65 тысяч адресов устройства, я добавил в приложение только 150 кодов. Их нумерация условная, а сами адреса отсортированы по количеству известных пультов, которые используют данный адрес. Эти 150 адресов встречаются в 80% пультов, дальнейшее увеличение количества адресов доступных для подбора не приведёт к существенному увеличению шансов найти код, но сильно увеличит время подбора.
Если вам не удаётся обнаружить реакцию устройства даже после грубого подбора, то очень велика вероятность что ваш пульт использует другой протокол. Кроме протокола NEC существует ещё очень много других протоколов, таких как SONY, PHILIPS, SHARP, JVC другие. Кроме того, не пытайтесь подобрать коды для кондиционера если ваш оригинальный пульт имеет экран. Дело в том, что такие пульты при нажатии кнопки отправляют сразу всю информацию о режиме, который нужно установить, в том числе целевую температуру, режим работы вентилятора, режим работы шторки и так далее.
База готовых пультов и поиск совместимых
Ещё в приложении есть база готовых пультов. Если по модели устройства готового пульта не нашлось, то можно попробовать подобрать пульт в режиме «поиска совместимого пульта». В этом режиме приложение загрузит с сервера коды кнопок «Питание», «Меню» «Громкость + / -» и «Приглушение звука» для всех пультов, которые есть в базе выбранного бренда. Алгоритм простой, выбираем кнопку, которую будем тестировать и нажимаем «ТЕСТ», а лучше несколько раз, если устройство не реагирует – смахиваем экран и снова несколько раз нажимаем «ТЕСТ». Когда устройство отреагирует, нажимаем «РАБОТАЕТ» и приложение отфильтрует пульты с такой связкой кода и команды. Далее выбираем следующую команду и повторяем процедуру пока не потухнут все кнопки в верхней части экрана. Теперь нажимаем «ПОКАЗАТЬ» и по порядку начинаем тестировать отфильтрованные пульты, как только найдется пульт со всеми нужными кнопками – сохраняем его на устройство и далее его можно будет отредактировать на свой вкус изменив количество колонок, порядок и цвет кнопок, а также подписи команд.
Скрин режима поиска совместимого пульта
![](https://habrastorage.org/getpro/habr/upload_files/e6b/f9c/4e7/e6bf9c4e7151edac16aa0f1a3062dc9e.jpg)
Вместо заключения
Если вы собрали пульт, которого ещё нет в базе готовых пультов и хотите поделиться этим пультом то ссылка на Telegram-канал поддержки тоже есть в конце статьи. Файлом пульта можно поделиться через меню «три точки» в верхней части экрана. При публикации сообщения пожалуйста добавьте, как можно больше информации о пульте и самом устройстве, в идеале добавить точную модель устройства, хорошее фото или изображение оригинального пульта из интернета если точно знаете, как он выглядит.
Комментарии (6)
iliazeus
15.08.2024 08:33Алгоритм подбора выглядит интересно, спасибо. Надо попробовать реализовать для Флиппера.
Grey83
Возможно ли реализовать считывание кода с помощью камеры кода с имеющегося пульта (это точно должно облегчить подбор кодировки)?
Ведь самый простой способ проверки работоспособности пульта лет так 15 - это активировать камеру в телефоне, навести её на ИК-светодиод пульта и нажать на кнопку этого самого пульта. Если батарейки не разрядились и пульт в рабочем состоянии, то на экране телефона можно будет увидеть мигание светодиода.
И реализовать это можно примерно как делается в сканерах qr-кодов (рамочка визора, куда нужно поместить объект для считывания). Ну а проге нужно только записать и проанализировать последовательность и длительность мигания светодиода.
Вроде программируемые универсальные пульты так умеют (в смысле записывать сигналы с других пультов).
wasiliysoft Автор
Несущая частота протокола NEC равна 38kHz, а длительность посылки около 108 миллисекунд, так что нет, с помощью камеры не получится. Хорошее описание протокола можно почитать по ссылке
Они так умеют потому что там за считывание отвечает контроллер который в состоянии обрабатывать прерывания на такой частоте, и делает это хорошо. Но вообще считать ИК коды с рабочего пульта можно с помощью Arduino и ИК приемника, цена вопроса всего комплекта около 250р на Али, схемы тоже очень легко найти в сети.
Grey83
Жаль, если это нельзя в смарте реализовать.
Просто в аналогичных прогах (использовал Mi Пульт и ZaZaRemote) приходилось подбирать похожие (была частичная совместимость по кодам сразу с несколькими устройствами, но или были отсутствующие функции или наоборот отсутствовали имеющиеся) из имеющихся в онлайн-базе у программ.
wasiliysoft Автор
В статье как раз описано как найти ВСЕ команды на которые устройство может реагировать. Самое главное найти адрес устройства а дальше всё упирается в терпение)
Grey83
В тех прогах поиск устройства обычно перебором делалось, пока не находил 2 работающих кнопки (включения и ещё какой-то, не помню уже). Там адрес вообще нигде не фигурировал.