Flipper Zero — проект карманного мультитула для хакеров в формфакторе тамагочи, который мы разрабатываем.
Предыдущие посты
Как выглядит тестирование электроники Flipper ZeroПервый пост
Пульты от телевизоров, кондиционеров, музыкальных проигрывателей передают команды через ИК-порт. Инфракрасный порт во Flipper Zero позволяет рулить всеми ИК-устройствами: перехватывать сигналы пультов и сохранять их на SD-карту, брутфорсить неизвестные коды от бытовой техники и загружать свои коды пультов и новые протоколы.
В статье я покажу:
Инфракрасное излучение — это невидимое для человека электромагнитное излучение с длиной волны от 0,7 до 1000 мкм. Бытовые пульты дистанционного управления используют ИК-сигнал для передачи данных и работают в диапазоне излучения 0,75..1,4 мкм. Микроконтроллер в пульте мигает инфракрасным светодиодом с определенной частотой — так цифровой сигнал становится ИК-сигналом.
Пульт передает данные пакетами ИК-импульсов
Для приема сигнала используют фотоприемник, который преобразует ИК-излучение в импульсы напряжения — с ними уже можно работать как с цифровым сигналом. Обычно в приемниках установлен темный фотофильтр, пропускающий излучение с нужной длиной волны, чтобы фильтровать помехи.
У ИК-порта Flipper Zero стоит специальное темное окошко — оно блокирует помехи от видимого света и пропускает ИК-излучение от пультов. Это помогает выделять полезный ИК-сигнал и убирать засветы видимого света. Именно этот фильтр мы привыкли видеть во всех ИК-портах. За ним уже расположены элементы приемника и передатчика.
Flipper Zero может быть как приемником, так и передатчиком ИК-сигнала.[Видео] Расположение ИК-порта во Flipper Zero
Сразу за окошком ИК-порта расположена печатная плата. На ней с двух сторон расположено 3 ИК-светодиода — это передатчики сигнала. Их специально 3, чтобы увеличить мощность передачи. На нижней стороне печатной платы расположен фотоприемник TSOP, с помощью которого принимается ИК-сигнал. На выход TSOP выдает цифровой сигнал, который обрабатывается микроконтроллером STM32.
Ниже можно посмотреть интерактивную схему и 3D модель iButton платы, на которой установлены ИК-светодиоды, приемник TSOP, динамик и контакты iButton:
[Кликабельно] Схема и 3D модель платы ИК-порта
Ниже находится интерактивная схема проекта Altium, работающая прямо в теле поста Хабра. Попробуйте переключиться между вкладками SCH, PCB, 3D, BOM. Пока такой oEmbed элемент нельзя создать самостоятельно, но скоро эта функция будет доступна публично через Altium Viewer altium.com/viewer/
Интерактивная схема и 3D модель платы ИК-порта
Внутри Флиппера стоит цифровой приемник ИК-сигнала TSOP, поэтому он может перехватывать любые сигналы ИК-пультов. Если у вас телефон типа Xiaomi, в котором тоже есть ИК-порт, имейте в виду, что он может ТОЛЬКО передавать сигналы, но не может принимать.
Инфракрасный приемник во Флиппере достаточно чувствительный. Можно ловить сигнал даже стоя сбоку, между пультом и телевизором, не обязательно направлять пульт вплотную к приемнику Флиппера. Это пригождается, когда кто-то переключает каналы, стоя рядом с телевизором, а вы с Флиппером находитесь далеко. Например, когда в кафе бармен переключает телевизор, а вам хочется перехватить управление захватив сигнал.
[Видео] Захват ИК-сигнала
Так как декодинг инфракрасного сигнала происходит программно, потенциально Флиппер поддерживает прием и передачу любых кодов ИК-пультов. В том числе, неизвестных ему протоколов, которые не удалось распознать — в этом случае используется запись и воспроизведение сырого сигнала, без расшифровки.
[Видео] Демонстрация функции обучения: Флиппер захватывает два сигнала переключения каналов и управляет телевизором
Интерфейс сохраненных пультов во Флиппере отображается вертикально — так удобнее держать устройство в руке, направляя ИК-порт в сторону приемника.
Чтобы прочитать ИК-сигнал, нужно направить ИК-порт Флиппера на ИК-окошко пульта. Если вы находитесь не в поле, то сигнал, скорее всего, отразится от какой-нибудь поверхности и попадет на ИК-порт Флиппера, даже если ИК-окошко пульта направлено немного в другую сторону.
Для чтения ИК-сигнала нужно перейти в меню Infrared -> Learn new remote
, откуда его можно сохранить как новый пульт. К одному пульту можно добавить несколько сигналов, выбрав нужный пульт в меню Infrared -> Saved remotes
. В одном пульте может быть неограниченное число сигналов (кнопок).
[Видео] Брутфорсим выключение телевизора в кафе
Flipper Zero можно использовать как универсальный пульт для управления любым телевизором, кондиционером или медиацентром. В этом режиме Флиппер перебирает сигналы всех известных ему кодов всех производителей по словарю, лежащему на SD-карте. Когда пользователь решает выключить телевизор, висящий в ресторане, ему не нужно искать пульт именно от этой модели телевизора. Достаточно нажать кнопку выключения в режиме универсального пульта, и Флиппер будет последовательно посылать команды выключения от всех телевизоров, которые он знает: Sony, Samsung, Panasonic… и так далее. Когда телевизор услышит свой сигнал, он отреагирует и выключится.
Такой перебор занимает время. Чем больше словарь, тем больше потребуется ждать, пока закончится перебор всех сигналов. Узнать, какой именно сигнал распознал телевизор, нельзя, так как у телевизора нет обратной связи.
Режим перебора сигналов по словарю
Чтобы воспользоваться режимом универсального пульта, нужно перейти в меню Infrared -> Universal library
и выбрать тип устройства, которым нужно управлять.
Для проверки или редактирования словаря, на SD-карте нужно открыть или создать соответствующий файл. Например, для телевизоров файл словаря содержит примерно следующие строки:
#Имя кнопки #Протокол #Адрес #Команда POWER NEC A:08 C:17 VOL+ NEC A:08 C:00 VOL- NEC A:08 C:01 CH+ NEC A:08 C:02 CH- NEC A:08 C:03 MUTE NEC A:08 C:0B ....
Мы планируем поставлять словари вместе с прошивкой и хранить их в отдельном репозитории, куда все пользователи смогут предлагать свои коды и ключи.
Есть устройства, специально созданные для тех, кого раздражают телевизоры, и они хотят их выключить. В таких устройствах зашита база данных сигналов для выключения телевизоров разных производителей. Принцип работы такой же как у Флиппера: устройство просто перебирает по словарю все сигналы подряд, в надежде, что в какой-то сигнал подойдет. При этом база сигналов обычно захардкожена в прошивку, и ее не просто расширить.
Сравнение устройств отключения телевизоров с Флиппером
Главное отличие Флиппера в том, что его словарь для перебора хранится на SD-карте и может быть легко обновлен и дополнен. Также пользователи могут создавать свои словари для новых классов бытовой техники и автоматики. При этом Флиппер умеет принимать сигналы, и его можно обучить любым пультам, которых вдруг не нашлось в базе.
Фотоприемник TSOP-75538, используемый во Flipper Zero для приема ИК-сигнала
ИК-приемник во Флиппере — это микросхема TSOP-75338. Этот компонент сам фильтрует сигнал и поддерживает его на одном логическом уровне, усиливая при необходимости. Поэтому TSOP-75338 способен принять даже очень слабый сигнал от маленьких разряженных пультов или отраженный от стен. А встроенный усилитель позволяет всегда получать на выходе микросхемы одинаковые уровни, вне зависимости от силы ИК-сигнала. Это значительно упрощает программную обработку сигнала на стороне процессора.
Плата Flipper Zero, на которой расположен ИК-приемник и передатчик. Схема демонстрирует подключение ИК-приемника TSOP-75538
В схеме питания фотоприемника TSOP-75338 во Flipper Zero стоит RC-фильтр. Он нужен, так как микроконтроллер производит помеху на линиях питания, из-за чего цифровой сигнал на выходе фотоприемника может не соответствовать принимаемому сигналу. Для согласования уровней приемника-TSOP и микроконтроллера STM32 используется диод. На выходе TSOP-а микроконтроллер STM32 уже обрабатывает цифровой сигнал.
Функциональный состав ИК-приемника TSOP-75338:
Для передачи обычно используют сигнал с частотной модуляцией. Поэтому на стороне приема устанавливают демодулятор.
Наш приёмник предназначен для демодуляции сигнала с несущей частотой 38 кГц. Большинство пультов работает на несущей частоте 36-38 кГц.
Цифровой ИК-сигнал накладывается на шумы и суммируется с ним
На стороне приемника ИК-сигнала, почти всегда есть фоновый шум, потому что вокруг множество предметов излучающих в ИК-диапазоне, например, обычные лампы освещения. Поэтому на приемник приходит суммарный сигнал от шума и полезного сигнала.
Частотная модуляция позволяет отличить ИК-сигнал с данными от шума. Когда полезный ИК-сигнал мигает с частотой 38 кГц, то пульсации ИК-частоты видны на фоне непульсирующего излучения. Таким образом фотоприемник может судить о наличии сигнала и отличать его от засвета.
Схема подключения ИК-передатчика к микроконтроллеру во Флиппере
Передачей ИК-сигнала напрямую управляет микроконтроллер Флиппера STM32. Через внешний транзистор он посылает импульсы на светодиоды. Чтобы повысить мощность ИК-передатчика, используется сразу 3 светодиода вместо одного.
Импульсы на стороне передатчика преобразовываются в инвертированный цифровой сигнал на стороне приемника
Как и в пультах, данные с Flipper Zero передаются пакетами импульсов. В приемнике, из принятых пакетов импульсов, демодулятор формирует огибающие (меандры) и выдает их на выход. Зачастую цифровой сигнал на выходе приемника является инвертированной огибающей.
Для увеличения импульсной мощности передатчика (дальности передачи) используются пакеты импульсов, а не целый меандр. При этом средняя мощность уменьшается или остается прежней, а значит и энергопотребление уменьшается или остается прежним.
В основном передатчики работают с несущими частотами 30..50 кГц. Этот диапазон несущих частот при разработке первых передатчиков имел наименьший уровень помех для доступной элементной базы. Не путать с частотой самого ИК-излучения, соответствующей длине волны 940 нм (318,93 ТГц).
Для быстрой проверки и отладки ИК-протоколов мы используем библиотеку IRMP от Arduino. На гитхабе можно найти инструкцию, как собрать устройство для анализа ИК-протоколов.
Схема анализатора ИК-протоколов на базе Arduino IRMP
Собрав все ИК-пульты в офисе, мы убедились, что почти все они имеют разные ИК-протоколы. Но безоговорочно доверять собранному анализатору тоже нельзя. Если ИК-протокол неизвестен, то анализатор на Arduino IRMP может распознавать его как протокол Siemens. Для приема ИК-сигнала мы используем непосредственно плату Флиппера. А многообразие известных ИК-протоколов в библиотеке IRMP позволяет быстрее разрабатывать софт.
[Видео] Анализатор ИК-протоколов на базе Arduino IRMP
Следующие 4 фактора в своих сочетаниях дают разные ИК-протоколы:
Биты кодируются разной
длительностью паузыпосле пакета импульсов. Ширина пакетов импульсов одинаковая для “0” и “1″, различается только время паузы между пакетами.
При интервальном кодировании биты различаются только временем паузы между импульсами
Биты кодируются разной
длительностью пакетов импульсов. Паузы между пакетами импульсов одинаковые для «0» и «1», различается ширина пакетов импульсов.
При кодировании битов длительностью различается ширина пакета импульсов для «0» и «1»
Биты кодируются
положением пакета импульсов и паузыв передаваемом интервале. Длительности пакета импульсов и паузы постоянны. Сигнал разделен на 2 фазы. Логический «0» — первая фаза без импульсов, вторая с импульсами. Логическая «1» — первая фаза с импульсами, вторая без импульсов.
При кодировании битов бифазным методом изменяется положение паузы и пакета импульсов
Состав передаваемых данных:
Существуют ИК-протоколы, пытающиеся стать универсальными для нескольких типов оборудования. Наиболее известными являются форматы: RC5 и NEC.
К сожалению, наиболее известные, не значит наиболее встречаемые. Лично я встретил в своем окружении лишь два ИК-пульта с протоколом NEC и ни одного с RC5.
Очень часто производители аппаратуры используют свои собственные ИК-протоколы, даже внутри одних и тех же типов оборудования (например телевизоров). Поэтому часто пульты от разных производителей, а иногда и от разных моделей одного производителя, не могут работать с другими устройствами того же типа.
Список известных нам ИК-протоколов
Protocol Name | Details |
---|---|
SIRCS | Sony |
NEC | NEC with 32 bits, 16 address + 8 + 8 command bits, Pioneer, JVC, Toshiba, NoName etc |
NEC16 | NEC with 16 bits (incl. sync) |
NEC42 | NEC with 42 bits |
SAMSUNG | Samsung |
SAMSUNG32 | Samsung32: no sync pulse at bit 16, length 32 instead of 37 |
SAMSUNG48 | air conditioner with SAMSUNG protocol (48 bits) |
LGAIR | LG air conditioner |
MATSUSHITA | Matsushita |
TECHNICS | Technics, similar to Matsushita, but 22 instead of 24 bits |
KASEIKYO | Kaseikyo (Panasonic etc) |
PANASONIC | Panasonic (Beamer), start bits similar to KASEIKYO |
MITSU_HEAVY | Mitsubishi-Heavy Aircondition, similar timing as Panasonic beamer |
RECS80 | Philips, Thomson, Nordmende, Telefunken, Saba |
RC5 | Philips etc |
DENON | Denon, Sharp |
RC6 | Philips etc |
APPLE | Apple, very similar to NEC |
RECS80EXT | Philips, Technisat, Thomson, Nordmende, Telefunken, Saba |
NUBERT | Nubert |
BANG_OLUFSEN | Bang & Olufsen |
GRUNDIG | Grundig |
NOKIA | Nokia |
SIEMENS | Siemens, e. g. Gigaset |
FDC | FDC keyboard |
RCCAR | RC Car |
JVC | JVC (NEC with 16 bits) |
RC6A | RC6A, e.g. Kathrein, XBOX |
NIKON | Nikon |
RUWIDO | Ruwido, e.g. T-Home Mediareceiver |
IR60 | IR60 (SDA2008) |
KATHREIN | Kathrein |
NETBOX | Netbox keyboard (bitserial) |
LEGO | LEGO Power Functions RC |
THOMSON | Thomson |
BOSE | BOSE |
A1TVBOX | A1 TV Box |
ORTEK | ORTEK — Hama |
TELEFUNKEN | Telefunken (1560) |
ROOMBA | iRobot Roomba vacuum cleaner |
RCMM32 | Fujitsu-Siemens (Activy remote control) |
RCMM24 | Fujitsu-Siemens (Activy keyboard) |
RCMM12 | Fujitsu-Siemens (Activy keyboard) |
SPEAKER | Another loudspeaker protocol, similar to Nubert |
MERLIN | Merlin (Pollin 620 185) |
PENTAX | Pentax camera |
FAN | FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit |
S100 | very similar to RC5, but 14 instead of 13 data bits |
ACP24 | Stiebel Eltron ACP24 air conditioner |
VINCENT | Vincent |
SAMSUNGAH | SAMSUNG AH |
IRMP16 | IRMP specific protocol for data transfer, e. g. between two microcontrollers via IR |
GREE | Gree climate |
RCII | RC II Infra Red Remote Control Protocol for FM8 |
METZ | METZ |
ONKYO | Like NEC but with 16 address + 16 command bits |
[Видео] Захват инфракрасного сигнала с помощью осциллографа
Чтобы увидеть, как выглядит передаваемый ИК-сигнал от пульта, надежнее всего использовать осциллограф. Он не демодулирует и не инвертирует принимаемый сигнал, а отображает его «как есть». Это полезно при отладке. Что должно приходить, я покажу на примере ИК-протокола NEC.
Осциллограмма популярного протокола NEC
При передаче кодированной посылки, в начале передатчик формирует преамбулу, которая представляет собой один или несколько пакетов импульсов. Это позволяет приемнику определить необходимый уровень усиления и фона. Но есть протоколы и без преамбулы, например, Sharp.
Далее данные передаются в виде нулей и единиц, в зависимости от метода кодирования бита. Порядок следования, признак начала, метод кодирования и количество данных определяются протоколом передачи.
ИК-протокол NEC содержит короткую отправляемую команду и код повтора, посылаемый, если кнопка осталась нажата. И команда, и код повтора имеют вначале одинаковую преамбулу.
Команда в NEC, помимо преамбулы, состоит из байта адреса и байта номера-команды. По номеру-команды устройство понимает, что именно нужно выполнять. Байты адреса и номера-команды дублируются инверсными значениями, для проверки целостности передачи. В конце команды дополнительно стоит стоп-бит.
В коде повтора после преамбулы содержится логическая “1” — стоп бит.
Логический “0” и “1” в протоколе NEC определяются интервалами: вначале передается пакет импульсов, после которого идет пауза, задающая значение бита.
Осциллограф записывает ИК-сигнал пульта с помощью Silver-bullet
Для захвата ИК-импульсов на осциллографе я использовал самодельный щуп Silver Bullet, придуманный автором программы AnalysIR. Это просто ИК-светодиод и резистор, запаянные в аудио-штекер RCA, который подключен через переходник BNC->RCA
к осциллографу. Собирается за пять минут. Все компоненты для сборки такого щупа можно купить в ЧИП и ДИП.
Схема щупа для захвата ИК-сигнала на осциллографе
Когда ИК-излучение пульта попадает на ИК-светодиод щупа, через него начинает проходить небольшой ток. Этот ток создает разницу напряжения на выводах светодиода, которую отчетливо видно на осциллографе. Для получения на осциллографе четкого сигнала важно, чтобы передатчик вплотную прислонялся к щупу.
Пульты от кондиционеров посылают один большой пакет с полным списком настроек
Пульты от кондиционеров представляют собой полноценные устройства с экранчиком, и, при управлении кондиционером, мы смотрим не на кондиционер, а на экран пульта. Там устанавливается температура, мощность вентилятора и т. д. При этом, сам пульт не знает, услышал ли его сигнал кондиционер, он просто посылает сигнал каждый раз при изменении настроек на пульте.
Но что произойдет, если мы уйдет в другую комнату с пультом от кондиционера, изменим настройки температуры на пульте, но кондиционер не услышит сигнал в момент нажатия на пульт? Допустим на кондиционере сохранилось значение 19°C, мы ушли в другую комнату и полностью поменяли все настройки на пульте, поставили 30°C. Потом подошли к кондиционеру снова и нажали кнопку на пульте, поднимающую температуру на 1°C вверх. Если бы пульт просто посылал нажатие каждой кнопки, как это делают другие пульты, на кондиционере бы установилась температура 20°C, а на экране пульта мы бы увидели 31°C. Получилась бы рассинхронизация данных на пульте и в памяти кондиционера.
Поэтому пульты от кондиционеров, в отличие от остальной техники, передают не команду нажатой кнопки, а сразу целиком все параметры кондиционера, которые видны на экранчике пульта. То есть всегда шлют ВСЕ данные отображаемые на экране пульта в одном большом пакете.
Такие протоколы намного более сложные, так как требуют описания всего пакета данных целиком, а не только одной команды, как в случае с телевизорами.
[Видео] Захват ИК-сигналов программой AnalysIR, используя приемник IR-toy
Для разных кондиционеров данные с пульта могут быть совершенно различными. Помимо отличий в хранении данных, существуют модели с разными уровнями мощностей, контролем влажности, зональностью и прочим. Из-за этого посылаемые данные иногда имеют большой размер и могут передаваться за несколько посылок.
Из-за обилия кондиционеров с их функциями, создание удобного пользовательского интерфейса и правильной посылки данных — громоздкая задача. Сейчас мы можем работать с некоторыми кондиционерами, но поддержка большого количества моделей еще не реализована.
Схема использования программы AnalysIR с оборудованием IR-Toy
Для работы с ИК-сигналом на компьютере я использую программу AnalysIR. Это программа для анализа ИК-протоколов, которая поддерживает разные устройства для захвата ИК-сигнала. Самый простой вариант — это изготовить самодельный приемник на базе Arduino и TSOP, и подключить его по USB. Я использую IR-toy V2 в качестве приемника. Список поддерживаемых приемников: AnalysIR.pdf.
AnalysIR показывает не импульсы ИК-диодов, как это делает осциллограф, а огибающую ИК-сигнала. Получая огибающую, программа высчитывает задержки и длительности пакетов импульсов — все это записывается в лог и помогает анализировать неизвестные ИК-протоколы. AnalysIR знает более 100 ИК-протоколов и умеет автоматически их распознавать. Кстати автор программы предложил добавить поддержку Флиппера в качестве ИК-приемника. Что думаете об этой идее?
Узнавайте о новостях проекта Flipper Zero первыми в наших соцсетях!
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Сейчас запущено производство первой партии Flipper Zero для бекеров заказавших устройство на Kickstarter. Вторая партия будет доступна для покупки осенью 2021. Вы можете зарезервировать устройство из второй партии заранее здесь https://shop.flipperzero.one/ Это важно для нас, чтобы более точно прогнозировать объемы производства.
Многие радиолюбители хотели бы использовать для управления самодельными девайсами имеющиеся у них в наличии пульты управления от бытовой техники. Согласитесь, это гораздо удобнее, чем ваять для своих девайсов специальные пульты. Однако здесь возникает маленькая проблемка. Для того, чтобы ваш девайс реагировал на какой-то пульт и при этом отличал одни нажатые на пульте кнопки от других — необходимо знать протокол передачи данных пульта и коды нажимаемых кнопок. Причём, если протокол зачастую написан на самом пульте, то найти коды кнопок обычно практически нереально.
Описанное ниже устройство позволяет увидеть, услышать и записать на компьютер посланный пультом сигнал, ну и, соответственно, определить протокол передачи данных, коды нажатых кнопок, да и просто убедиться в исправности ИК-пульта в конце концов.
Заинтригованы, что же это за девайс? На самом деле идея очень и очень простая. Сигналы ИК-пультов достаточно низкочастотные и записать их можно с помощью обычной звуковой карты в обычный звуковой файл. После этого можно открыть записанный файл в любом звуковом редакторе (например, GoldWave) и посмотреть длительности импульсов, пауз и другую интересующую нас информацию.
Схема:
Устройство подключается в разъём line-in звуковой карты компьютера. Соответственно, в микшере надо настроить вывод и запись звука от входа line-in. Свидетельством того, что ИК-сигналы нормально принимаются устройством и звуковой картой, служат характерные бипы из колонок при нажатии на кнопки пульта.
Поскольку девайс потребляет мизерный ток, то запитать его можно от любого источника, напряжением 6. .15 Вольт, например, от 5 батареек AA или от Кроны.
Для того, чтобы иметь возможность подстраивать амплитуду снимаемого звуковой картой сигнала, можно заменить резисторы R1, R2 на подстроечник 10-47 кОм (крайние выводы подключить на общий провод и выход фотоприёмника, а средний — на вход звуковой карты). Теперь у нас половина подстроечника — это как бы резистор R1, а другая половина — резистор R2. Вращая ручку подстроечника мы будем изменять номиналы R1, R2 и, соответственно, коэффициент деления образумого этими резисторами делителя напряжения, с которого мы и снимаем сигнал.
Фото готового девайса:
Печатная плата (DipTrace 2.1) Фотоприёмник ILMS5360 рассчитан на частоту несущей 36 кГц, тем не менее сигналы на частоте несущей 38 кГц он тоже принимает, просто к этим сигналам у него гораздо более плохая чувствительность, поэтому посылать их нужно с близкого расстояния, практически в упор к фотоприёмнику. |
Ниже приведён пример записанного ИК-сигнала, как он выглядит в звуковом редакторе:
Если вы хоть немного разбираетесь в протоколах ИК-пультов (если нет — почитайте описания некоторых протоколов), то по этому скану вам будет очевидно, что в данном случае имеет место манчестерское кодирование (потому что паузы и импульсы одной ширины), ну а дальше уже дело техники.
Вот и всё, удачи!
В этой статье описывается, как понимать ИК-коды Sony и как получить их из файлов LIRC. Статья предназначена для описания кодов для использования с моей инфракрасной удаленной библиотекой Arduino, но информация должна быть общеприменимой. Эта статья предназначена для аппаратных хакеров и предполагает, что вы знакомы с двоичными и шестнадцатеричными числами, так что будьте осторожны 🙂
Одним из ключевых моментов этой статьи является то, что существует три различных способа интерпретации одного и того же ИК-сигнала и преобразования его в шестнадцатеричный код. Понимание этих трех способов позволит вам получать коды из разных источников и правильно их понимать.
При нажатии кнопки на пульте дистанционного управления Sony передается инфракрасный сигнал. Эта передача состоит из сигнала частотой 40 кГц, который включается и выключается по определенной схеме. Разные кнопки соответствуют разным кодам, которые вызывают включение и выключение сигнала по разным схемам.
Следующий сигнал показывает ИК-код, передаваемый для STOP на мой пульт дистанционного управления Sony CD (RM-DC335). При высоком уровне сигнала передается ИК-сигнал частотой 40 кГц, а при низком уровне сигнала ничего не передается. Другими словами, сигнал на самом деле быстро включается и выключается, хотя на рисунке он кажется включенным. (ИК-приемник демодулировал сигнал, поэтому вы не видите переходы 40 кГц.)
ИК-сигнал Sony начинается с 2400 мкс включения и 600 мкс отключения; это первый широкий импульс.
Бит «1» передается с включением 1200 микросекунд и выключением 600 микросекунд, а бит «0» передается с включением 600 микросекунд и выключением 600 микросекунд. (Эта кодировка также называется кодировкой SIRC или SIRCS.)
Вы можете заметить, что «включенные» части формы сигнала кажутся шире, чем «выключенные», даже если обе должны составлять 600 микросекунд. Это результат работы ИК-приемника, который включается быстрее, чем выключается.
Приведенный выше сигнал представляет собой одну передачу 12-битного кода. Эта передача обычно повторяется до тех пор, пока кнопка удерживается нажатой, и не менее трех раз. Каждая передача начинается через 45 мс после начала предыдущей. Протокол Sony также поддерживает 15- и 20-битные коды, которые аналогичны приведенным выше, за исключением большего количества битов.
Дополнительную информацию о низкоуровневой передаче кодов Sony см. на сайте sbprojects.net.
Кодировка Sony кажется простой, но существует несколько различных способов интерпретации сигнала. Я буду называть эти официальным декодированием , -битное декодирование и бит-1 декодирование . В разных источниках используется любой из этих трех, что может вызвать путаницу. Я объясню эти три расшифровки на примере предыдущей формы волны.
«Официальный» протокол Sony рассматривает 12-битный код как 7 битов команды и 5 битов адреса или устройства, при этом младший бит передается первым (то есть «назад»). Биты устройства определяют тип устройства, получающего код, а биты команды определяют конкретную команду для этого устройства. В этом примере биты устройства (желтые) равны 10001 при чтении справа налево, что составляет 17 десятичных знаков. Командные биты (синие) равны 0111000 при чтении справа налево, что составляет 56 десятичных знаков. Значение устройства 17 соответствует проигрывателю компакт-дисков, а команда 56 соответствует команде STOP (подробности).
15-битные коды Sony аналогичны, с 7 командными битами и 8 битами устройства. 20-битные коды Sony имеют 7 командных битов, 5 битов устройства и 8 расширенных битов устройства.
Многие ИК-декодеры просто обрабатывают сигнал как последовательность битов, начиная со старшего бита. Я буду называть это -битное декодирование . Применяя эту интерпретацию к приведенному выше коду, код интерпретируется как 0001 1101 0001 двоичный, или 1d1 шестнадцатеричный, или 465 в десятичном виде. Обратите внимание, что последний бит на самом деле не состоит из 1200 микросекунд включения и 600 микросекунд выключения; он состоит из 1200 микросекунд включения, за которыми следует много времени выключения. Другими словами, передача отключена на 600 микросекунд, а затем продолжается до тех пор, пока не будет передан следующий код.
Альтернативная, но эквивалентная интерпретация состоит в том, чтобы рассматривать код как 2400-микросекундный заголовок, за которым следуют 12 битов, где каждый бит то выключен, то включен (а не включен, а затем выключен). Бит «1» — это 600 микросекунд выключено и 1200 микросекунд включено, а бит «0» — это 600 микросекунд выключено и 600 микросекунд включено. Это дает то же значение, что и раньше (232 десятичного числа), но позволяет избежать специальной обработки последнего бита.
Многие ИК-декодеры сбрасывают последний бит, который я назову 9.0023 бит-1 декодирование . Поскольку последний бит не заканчивается 600 микросекундами, некоторые алгоритмы ИК-декодирования обрабатывают сигнал как 11 битов данных, заканчивающихся 600 микросекундами как трейлер. В этой интерпретации приведенный выше код 000 1110 1000 двоичный, или 0e8 шестнадцатеричный, или 232 десятичный. (Обратите внимание, что удвоение этого значения и добавление 1 дает предыдущее декодирование 465.)
Код действительно 17/44 или 465 или 232? Официальная расшифровка «правильная» в том смысле, что это то, что задумал производитель. Кроме того, он раскрывает внутреннюю структуру кода, и коды становятся более понятными. Например, кнопки 1-9иметь последовательные коды с официальной расшифровкой, но не с остальными. Другие расшифровки можно использовать, если вы последовательны; главное понимать, что в разных источниках используются разные расшифровки. Моя библиотека Arduino использует вторую -битную интерпретацию декодирования . Различные декодирования могут быть преобразованы из одной формы в другую с помощью двоичной арифметики.
Вероятно, самый простой способ получить коды для вашего устройства — использовать имеющийся у вас пульт дистанционного управления и посмотреть, какие коды он передает. Вы можете использовать мою библиотеку Arduino IR для декодирования с демонстрационной программой IRrecvDump. Возьмите 3-контактный ИК-декодер, подключите его к Arduino, и тогда вы сможете считывать значения для каждого нажатия кнопки на последовательном порту.
Как вариант, можно посмотреть передаваемые коды с помощью осциллографа. Для приведенных выше диаграмм я использовал модуль ИК-приемника, подключенный к двум резисторам (для снижения напряжения), подключенным к линейному входу моего ПК. Я использовал программу Zeitnitz Soundcard Oscilloscope для отображения сигнала. Это позволяет вам точно видеть, что передается, но вам нужно будет смотреть на экран, записывать кучу 0 и 1 и преобразовывать двоичное значение, чтобы получить свои коды.
Лучшим источником ИК-кодов, который я нашел, является проект Linux Infrared Remote Control (lirc.org), который имеет огромную коллекцию файлов конфигурации для различных пультов. (LIRC также включает в себя большую коллекцию драйверов устройств для многих типов аппаратных средств ИК-ввода/вывода и программную библиотеку.)
Формат файла конфигурации LIRC задокументирован на WinLIRC, но я приведу несколько примеров.
Файл RM-S530 LIRC обрабатывает коды как 12-битные, используя то, что я называю 9-битным.0023 бит декодирования :
начать дистанционно имя Сони бит 12 флаги SPACE_ENC|CONST_LENGTH эп. 30 аэп 100 заголовок 2470 557 один 1243 556 ноль 644 556 разрыв 45076 min_repeat 2 toggle_bit 0 начать коды спать 0x00000000000000061 cd_stop 0x000000000000001D1 . ..
Этот файл указывает, что каждая запись имеет длину 12 бит. Заголовок состоит из включения на 2470 микросекунд и выключения на 557 микросекунд. Один бит состоит из включения в течение 1243 микросекунд и выключения в течение 556 микросекунд. Нулевой бит состоит из включенного в течение 644 микросекунд и выключенного в течение 556 микросекунд. Коды повторяются как минимум еще 2 раза с промежутком 45076 микросекунд от начала до начала, поскольку коды имеют постоянную длину (CONST_LENGTH).
Вам может быть интересно, почему эти значения времени не соответствуют официальным значениям 2400, 1200 и 600 микросекунд. Во-первых, данные LIRC обычно измеряются с реальных пультов, поэтому реальные тайминги не совсем соответствуют теории. Во-вторых, ИК-сенсоры имеют некоторую задержку в обнаружении «включено» и «выключено», и они обычно растягивают время «включения» примерно на 100 микросекунд, в равной степени сокращая время «выключения».
Затем файл LIRC содержит шестнадцатеричный код, связанный с каждой кнопкой. Например, код СТОП CD имеет шестнадцатеричное значение 1D1, то есть такое же значение, как описано ранее.
Файл LIRC для пульта RM-D302 обрабатывает коды как 11 бит и замыкающий импульс. Это то, что я называю декодированием бит-1 :
начать дистанционно название RM-D302 бит 11 флаги SPACE_ENC|CONST_LENGTH эп. 30 аэп 100 заголовок 2367 638 один 1166 637 ноль 565 637 дорожка 1166 разрыв 45101 min_repeat 2 toggle_bit 0 начать коды cd_stop 0x000000000000000E8
Ключевыми отличиями от предыдущего файла являются поле ptrail, указывающее замыкающий импульс длительностью 1166 микросекунд; и количество битов 11 вместо 12. Обратите внимание, что значение кода отличается от первого файла, даже если ИК-передача точно такая же. Шестнадцатеричный код 0E8 такой же, как описано ранее в разделе , декодирование бит-1.
Некоторые файлы LIRC разбивают коды на постоянные биты pre_data, сам код и постоянные биты post_data. Например, файл для моего пульта RM-D335:
начать удаленное имя SONY бит 7 флаги SPACE_ENC эп. 20 0 заголовок 2563 520 один 1274 520 ноль 671 520 1274 post_data_bits 4 post_data 0x8 разрыв 25040 min_repeat 2 начать коды ПРОДОЛЖИТЬ 0x0000000000000005C ... СТОП 0x000000000000000E ...
В этом файле указано, что каждая запись кода имеет длину 7 бит, но есть также 4 бита пост-данных. Это означает, что после передачи 7 битов для кода передаются 4 дополнительных бита с шестнадцатеричным значением «пост-данных» 0x8, т.е. 1000 двоичных.
Собрав это вместе, кнопка STOP имеет шестнадцатеричное значение 0E, что соответствует семи битам 000 1110. За этим следуют четыре бита почтовых данных 1000, поэтому общая передача составляет одиннадцать битов 000 1110 1000, что составляет 0E8 шестнадцатеричное, то же самое. как и раньше для бит-1 декодирования .
Еще одна вещь, на которую следует обратить внимание в этом файле LIRC, это то, что он не имеет флага CONST_LENGTH, а промежуток составляет 25 мс вместо 45 мс. Это указывает на то, что разрыв находится от конца одного кода до начала следующего, а не от начала одного кода до начала следующего. Указание разрыва между кодами — это не то, как на самом деле определяются коды Sony, это достаточно близко.
Обратите внимание, что все эти файлы LIRC указывают на одну и ту же ИК-передачу; они просто интерпретируют это по-разному. Первый файл определяет код STOP как 1D1, второй как E8 и третий как 0E.
Что это значит для тебя? Если вы хотите получить код Sony из файла LIRC и использовать его с библиотекой Arduino, вам потребуется 12-битный (или 15-, или 20-битный) код для передачи в библиотеку (-битное декодирование ). Найдите код в файле и извлеките указанное количество битов. Если есть какие-либо биты pre_data или post_data, добавьте их соответствующим образом. Если результат короче на один бит, а файл LIRC имеет значение ptrail, добавьте 1 бит в конце, чтобы преобразовать из бит-1 декодирование до бит декодирование . Преобразуйте результат в шестнадцатеричный формат, и у вас должен получиться правильный код для вашего устройства, который можно использовать с библиотекой Arduino.
Самый подробный сайт, который я нашел по кодам Sony, это hifi-remote.com/sony. Что интересно на этом сайте, так это то, что он анализирует структуру кодов. В то время как файлы LIRC просто перечисляют коды, сайт hifi-remote пытается объяснить, почему коды настроены именно так.
Обратите внимание, что этот сайт выражает коды в формате Sony, т. е. сначала старший значащий бит, и отделяет часть кода устройства от командной части кода. Также для 20-битного кода Sony 13-битный код устройства выражается как 5-битное значение и 8-битное значение, разделенные точкой. В результате вам может потребоваться выполнить некоторое двоичное преобразование и поменять местами биты, чтобы использовать эти коды.
Чтобы проработать пример, я могу найти данные для компакт-диска Sony. Существует несколько кодов устройств, но предположим, что на данный момент я знаю код своего устройства 17. В таблице указан код 56 для STOP. Преобразуйте 56 в 7-битное двоичное значение 0111000 и измените его, чтобы получить 0001110. Преобразуйте 17 в 5-битное двоичное значение 10001 и измените его, чтобы получить 10001. Соедините их вместе, чтобы получить et 000111010001, то есть 1D1 hex, как и раньше.
Чтобы проработать 20-битный пример, если у меня есть Sony VCR/DVD Combo с кодом устройства 26,83, сайт сообщает мне, что код для «мощности» равен 21. Преобразуйте 21 в 7-битное двоичное значение, 26 в 5-битное двоичное значение и 83 для 8-битного двоичного значения. Затем переверните и соедините биты: двоичный код 1010100 + 01011 + 11001010, который представляет собой a8bca в шестнадцатеричном формате. Для подтверждения в файле RMT-V501A LIRC мощность указана как A8B с post_data CA.
Чтобы использовать этот сайт, вам уже нужно знать код вашего устройства. Чтобы найти это, получите код для вашего устройства (например, с вашего существующего пульта дистанционного управления или из LIRC), разделите и поменяйте местами соответствующие биты и найдите код устройства на сайте. Кроме того, существует всего несколько различных кодов устройств для определенного типа устройств, поэтому вы можете просто попробовать их все и посмотреть, что работает.
На этом сайте также есть информация о «дискретных кодах». Чтобы понять дискретные коды, рассмотрите кнопку питания на пульте дистанционного управления, которая переключается между «вкл» и «выкл». Это может быть неудобно для автоматического управления, так как, не зная текущего состояния, вы не знаете, включит или выключит устройство отправка кода. Решением является «дискретный код», который предоставляет отдельные коды «включения» и «выключения». Дискретные коды также могут быть предоставлены для таких операций, как выбор входа или режима. Поскольку этих кодов нет на пульте, их трудно получить.
Дополнительные файлы конфигурации доступны на сайте immote.psiloc.com. Они в формате LIRC, но переведены в XML. На сайте remotecentral.com есть масса информации о пультах, но в основном в проприетарных форматах.
Надеюсь, это устранит некоторую путаницу с кодами дистанционного управления Sony, не добавляя дополнительной путаницы 🙂
Тип: Аксессуары
Номер детали: 5024-004
Размер: 3000 в ширину x 4000 в высоту x 0,500 в глубину
Вес: 0,250
Распределение:
Выпущено: Апрель 2018 г.
Где купить
Чертеж изделия с ИК-пультом HD2-RC
Contemporary Research предлагает различные аксессуары для продуктов, которые необходимы или улучшают функциональность AV-продуктов.
Беспроводной ИК-пульт HD2-RC для современных исследовательских тюнеров ATSC и декодеров QIP IPTV обеспечивает упрощенное и удобное ИК-управление.
Сопутствующее оборудование и программное обеспечениеУдобные для интеграции тюнеры HDTV, управляемые через RS-232, которые могут принимать как цифровые, так и аналоговые каналы в форматах ATSC, QAM и NTSC.
Одноадресные или многоадресные декодеры UDP и RTP, совместимые с IPTV, которые будут принимать однопрограммные или многопрограммные транспортные потоки MPEG2 или H.264.
Централизованно управляемые системы управления, разработанные для упрощения ваших AV-технологий.
Полное описание и технические характеристикиБеспроводной ИК-пульт HD2-RC работает с тюнерами CR ATSC и декодерами QIP IPTV, обеспечивая упрощенное и удобное ИК-управление. Разработанный для обеспечения универсальности и экономичности, HD2-RC доступен по цене в несколько раз дешевле обычных пультов дистанционного управления для систем управления. В комплект входит все — от 4 щелочных батареек AAA до полнофункциональной панели, обеспечивающей управление продуктом и настройку тюнеров ATSC.
При весе менее 5 унций с батареями тонкий и аккуратный корпус позволяет легко управлять одной рукой. Тем не менее, HD2-RC не является легким, когда речь идет о мощности и производительности. Мощный ИК-светодиод обеспечивает надежное управление в пределах 10 м, а высокочастотная ИК-передача сводит к минимуму помехи от флуоресцентных ламп и других источников.
Совет: пульт дистанционного управления может выводить высокие или низкие ИК-частоты , что может помочь обойти помехи от флуоресцентных ламп.