Перехват инфракрасных пультов с помощью Flipper Zero

mstxpoyg8bei96fjwivww28r21q.jpeg

Flipper Zero — проект карманного мультитула для хакеров в формфакторе тамагочи, который мы разрабатываем.

Предыдущие посты

Пульты от телевизоров, кондиционеров, музыкальных проигрывателей передают команды через ИК-порт. Инфракрасный порт во Flipper Zero позволяет рулить всеми ИК-устройствами: перехватывать сигналы пультов и сохранять их на SD-карту, брутфорсить неизвестные коды от бытовой техники и загружать свои коды пультов и новые протоколы.

В статье я покажу:

  • Как устроены инфракрасные приемники и передатчики
  • Какие бывают цифровые сигналы ИК-пультов
  • Перехват и анализ ИК-сигналов
  • Как с помощью Flipper Zero стать инфракрасным властелином

Как работает ИК-порт


Инфракрасное излучение — это невидимое для человека электромагнитное излучение с длиной волны от 0,7 до 1000 мкм. Бытовые пульты дистанционного управления используют ИК-сигнал для передачи данных и работают в диапазоне излучения 0,75…1,4 мкм. Микроконтроллер в пульте мигает инфракрасным светодиодом с определенной частотой — так цифровой сигнал становится ИК-сигналом.

d7tnubhys1wp6vbkzvnshc0oeag.gif
Пульт передает данные пакетами ИК-импульсов

Для приема сигнала используют фотоприемник, который преобразует ИК-излучение в импульсы напряжения — с ними уже можно работать как с цифровым сигналом. Обычно в приемниках установлен темный фотофильтр, пропускающий излучение с нужной длиной волны, чтобы фильтровать помехи.

Как устроен ИК-порт во Flipper Zero


У ИК-порта Flipper Zero стоит специальное темное окошко — оно блокирует помехи от видимого света и пропускает ИК-излучение от пультов. Это помогает выделять полезный ИК-сигнал и убирать засветы видимого света. Именно этот фильтр мы привыкли видеть во всех ИК-портах. За ним уже расположены элементы приемника и передатчика. Flipper Zero может быть как приемником, так и передатчиком ИК-сигнала. [Видео] Расположение ИК-порта во Flipper Zero

Сразу за окошком ИК-порта расположена печатная плата. На ней с двух сторон расположено 3 ИК-светодиода — это передатчики сигнала. Их специально 3, чтобы увеличить мощность передачи. На нижней стороне печатной платы расположен фотоприемник TSOP, с помощью которого принимается ИК-сигнал. На выход TSOP выдает цифровой сигнал, который обрабатывается микроконтроллером STM32.

Ниже можно посмотреть интерактивную схему и 3D модель iButton платы, на которой установлены ИК-светодиоды, приемник TSOP, динамик и контакты iButton:

qvmrpupivui8lcuuvvn-you1_ig.gif
[Кликабельно] Схема и 3D модель платы ИК-порта

wc_quqbimajnackzwyzenwv0jaw.png Ниже находится интерактивная схема проекта Altium, работающая прямо в теле поста Хабра. Попробуйте переключиться между вкладками SCH, PCB, 3D, BOM. Пока такой oEmbed элемент нельзя создать самостоятельно, но скоро эта функция будет доступна публично через Altium Viewer altium.com/viewer/

Интерактивная схема и 3D модель платы ИК-порта

Приемник ИК-сигнала во Flipper Zero


Внутри Флиппера стоит цифровой приемник ИК-сигнала TSOP, поэтому он может перехватывать любые сигналы ИК-пультов. Если у вас телефон типа Xiaomi, в котором тоже есть ИК-порт, имейте в виду, что он может ТОЛЬКО передавать сигналы, но не может принимать.

Инфракрасный приемник во Флиппере достаточно чувствительный. Можно ловить сигнал даже стоя сбоку, между пультом и телевизором, не обязательно направлять пульт вплотную к приемнику Флиппера. Это пригождается, когда кто-то переключает каналы, стоя рядом с телевизором, а вы с Флиппером находитесь далеко. Например, когда в кафе бармен переключает телевизор, а вам хочется перехватить управление захватив сигнал.

[Видео] Захват ИК-сигнала

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

[Видео] Демонстрация функции обучения: Флиппер захватывает два сигнала переключения каналов и управляет телевизором

Интерфейс сохраненных пультов во Флиппере отображается вертикально — так удобнее держать устройство в руке, направляя ИК-порт в сторону приемника.

Чтобы прочитать ИК-сигнал, нужно направить ИК-порт Флиппера на ИК-окошко пульта. Если вы находитесь не в поле, то сигнал, скорее всего, отразится от какой-нибудь поверхности и попадет на ИК-порт Флиппера, даже если ИК-окошко пульта направлено немного в другую сторону.

Для чтения ИК-сигнала нужно перейти в меню Infrared -> Learn new remote, откуда его можно сохранить как новый пульт. К одному пульту можно добавить несколько сигналов, выбрав нужный пульт в меню Infrared -> Saved remotes. В одном пульте может быть неограниченное число сигналов (кнопок).

Универсальный пульт из Flipper Zero


[Видео] Брутфорсим выключение телевизора в кафе

Flipper Zero можно использовать как универсальный пульт для управления любым телевизором, кондиционером или медиацентром. В этом режиме Флиппер перебирает сигналы всех известных ему кодов всех производителей по словарю, лежащему на SD-карте. Когда пользователь решает выключить телевизор, висящий в ресторане, ему не нужно искать пульт именно от этой модели телевизора. Достаточно нажать кнопку выключения в режиме универсального пульта, и Флиппер будет последовательно посылать команды выключения от всех телевизоров, которые он знает: Sony, Samsung, Panasonic… и так далее. Когда телевизор услышит свой сигнал, он отреагирует и выключится.

Такой перебор занимает время. Чем больше словарь, тем больше потребуется ждать, пока закончится перебор всех сигналов. Узнать, какой именно сигнал распознал телевизор, нельзя, так как у телевизора нет обратной связи.

1475bf693b2d0850284b008cfc36eaa0.gif
Режим перебора сигналов по словарю

Чтобы воспользоваться режимом универсального пульта, нужно перейти в меню 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
....

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

Универсальные пульты отключения телевизора


Есть устройства, специально созданные для тех, кого раздражают телевизоры, и они хотят их выключить. В таких устройствах зашита база данных сигналов для выключения телевизоров разных производителей. Принцип работы такой же как у Флиппера: устройство просто перебирает по словарю все сигналы подряд, в надежде, что в какой-то сигнал подойдет. При этом база сигналов обычно захардкожена в прошивку, и ее не просто расширить.

0t5-mjkoxccv2gd8jnurycpmk7m.png
Сравнение устройств отключения телевизоров с Флиппером

  • Кнопкус Артемия Лебедева — простое и красивое устройство в прорезиненном корпусе с одной кнопкой. После нажатия кнопки начинается перебор кодов. К сожалению список сигналов не очень большой, телевизор в офисе и дома не сработал. Дополнить базу данных сигналов в этом устройстве никак нельзя, внутри какой-то нонеймный микроконтроллер, который непонятно как прошивать.
  • TV B GONE — известный старый проект с открытой прошивкой и железом. Сразу 4 мощных ИК-диода делают его очень дальнобойным. Можно добавлять свои коды, но для этого потребуется программатор.

Главное отличие Флиппера в том, что его словарь для перебора хранится на SD-карте и может быть легко обновлен и дополнен. Также пользователи могут создавать свои словари для новых классов бытовой техники и автоматики. При этом Флиппер умеет принимать сигналы, и его можно обучить любым пультам, которых вдруг не нашлось в базе.

Инфракрасный фотоприемник TSOP


iymacuc0zyc9qctco2y0ogbyyz8.png
Фотоприемник TSOP-75538, используемый во Flipper Zero для приема ИК-сигнала

ИК-приемник во Флиппере — это микросхема TSOP-75338. Этот компонент сам фильтрует сигнал и поддерживает его на одном логическом уровне, усиливая при необходимости. Поэтому TSOP-75338 способен принять даже очень слабый сигнал от маленьких разряженных пультов или отраженный от стен. А встроенный усилитель позволяет всегда получать на выходе микросхемы одинаковые уровни, вне зависимости от силы ИК-сигнала. Это значительно упрощает программную обработку сигнала на стороне процессора.

2tkqifjx7-0ufixkub6f_eozoy4.jpeg
Плата Flipper Zero, на которой располжен ИК-приемник и передатчик. Схема демонстрирует подключение ИК-приемника TSOP-75538

В схеме питания фотоприемника TSOP-75338 во Flipper Zero стоит RC-фильтр. Он нужен, так как микроконтроллер производит помеху на линиях питания, из-за чего цифровой сигнал на выходе фотоприемника может не соответствовать принимаемому сигналу. Для согласования уровней приемника-TSOP и микроконтроллера STM32 используется диод. На выходе TSOP-а микроконтроллер STM32 уже обрабатывает цифровой сигнал.

e7s3afwqnpl-5o7i7x2zhiwsjnc.png
Функциональный состав ИК-приемника TSOP-75338:

  • ИК-фильтр
  • ИК-фотоприемник
  • Усилитель с фильтром на конкретную несущую частоту
  • Усилитель с автоматической регулировкой
  • Демодулятор-детектор, выделяющий огибающую

Для передачи обычно используют сигнал с частотной модуляцией. Поэтому на стороне приема устанавливают демодулятор.

Наш приёмник предназначен для демодуляции сигнала с несущей частотой 38 кГц. Большинство пультов работает на несущей частоте 36–38 кГц.

Почему именно частотная модуляция


nf2omcqjc1jwislniif40urbxsa.gif
Цифровой ИК-сигнал накладывается на шумы и суммируется с ним

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

  • Шум в ИК-диапазоне создают многие источники света, так как источником ИК-излучения является выделяемое тепло. Поэтому фоновый шум будет иметь случайный характер. На гифке выше, для наглядности, он изображен как синусоида.
  • Полезный сигнал — пакеты ИК-импульсов, отправляемые пультом. Идеальный пакет импульсов выглядит как ровный меандр. Но такой сигнал возможно увидеть только при полном отсутствии шумов. В реальности меандр всегда будет накладываться на шум и суммироваться с ним.

Частотная модуляция позволяет отличить ИК-сигнал с данными от шума. Когда полезный ИК-сигнал мигает с частотой 38 кГц, то пульсации ИК-частоты видны на фоне непульсирующего излучения. Таким образом фотоприемник может судить о наличии сигнала и отличать его от засвета.

Передатчик ИК-сигнала во Flipper Zero


ui57tfso-dylke1u59-lslscodc.gif
Схема подключения ИК-передатчика к микроконтроллеру во Флиппере

Передачей ИК-сигнала напрямую управляет микроконтроллер Флиппера STM32. Через внешний транзистор он посылает импульсы на светодиоды. Чтобы повысить мощность ИК-передатчика, используется сразу 3 светодиода вместо одного.

e86318f7c99a546819d7c77b972426ec.gif
Импульсы на стороне передатчика преобразовываются в интертированный цифровой сигнал на стороне приемника

Как и в пультах, данные с Flipper Zero передаются пакетами импульсов. В приемнике, из принятых пакетов импульсов, демодулятор формирует огибающие (меандры) и выдает их на выход. Зачастую цифровой сигнал на выходе приемника является инвертированной огибающей.

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

В основном передатчики работают с несущими частотами 30…50 кГц. Этот диапазон несущих частот при разработке первых передатчиков имел наименьший уровень помех для доступной элементной базы. Не путать с частотой самого ИК-излучения, соответствующей длине волны 940 нм (318,93 ТГц).

Анализируем ИК-протоколы с Arduino


Для быстрой проверки и отладки ИК-протоколов мы используем библиотеку IRMP от Arduino. На гитхабе можно найти инструкцию, как собрать устройство для анализа ИК-протоколов.

pyr75ghghply2xdgbc1swo8lnvo.png
Схема анализатора ИК-протоколов на базе Arduino IRMP

Собрав все ИК-пульты в офисе, мы убедились, что почти все они имеют разные ИК-протоколы. Но безоговорочно доверять собранному анализатору тоже нельзя. Если ИК-протокол неизвестен, то анализатор на Arduino IRMP может распознавать его как протокол Siemens. Для приема ИК-сигнала мы используем непосредственно плату Флиппера. А многообразие известных ИК-протоколов в библиотеке IRMP позволяет быстрее разрабатывать софт.

[Видео] Анализатор ИК-протоколов на базе Arduino IRMP

Чем различаются ИК-протоколы


Следующие 4 фактора в своих сочетаниях дают разные ИК-протоколы:
  • способ кодирования бита информации
  • состав передаваемых данных
  • порядок передаваемых данных
  • несущая частота модуляции — часто лежит в диапазоне 36…38 кГц

Способы кодирования бита информации


1. Метод интервалов


Биты кодируются разной длительностью паузы после пакета импульсов. Ширина пакетов импульсов одинаковая для »0» и »1», различается только время паузы между пакетами.

kirwpeccpnapln7tmvvdznuicok.jpeg
При интервальном кодировании биты различаются только временем паузы между импульсами

2. Кодирование бита данных длительностью


Биты кодируются разной длительностью пакетов импульсов. Паузы между пакетами импульсов одинаковые для »0» и »1», различается ширина пакетов импульсов.

ybxy_y-n-jv3j04yf9mi4dozohm.jpeg
При кодировании битов длительностью различается ширина пакета импульсов для »0» и »1»

3. Бифазный метод


Биты кодируются положением пакета импульсов и паузы в передаваемом интервале. Длительности пакета импульсов и паузы постоянны. Сигнал разделен на 2 фазы. Логический »0» — первая фаза без импульсов, вторая с импульсами. Логическая »1» — первая фаза с импульсами, вторая без импульсов.

r61b5i1eqtmohetuegzwst7isgs.jpeg
При кодировании битов бифазным методом изменяется положение паузы и пакета импульсов

4. Комбинирование предыдущих и редкие экзотические методы

Состав передаваемых данных:

  • команда управления
  • адрес устройства
  • проверочная информация
  • любая другая сервисная информация

Существуют ИК-протоколы, пытающиеся стать универсальными для нескольких типов оборудования. Наиболее известными являются форматы: RC5 и Nec.

К сожалению, наиболее известные, не значит наиболее встречаемые. Лично я встретил в своем окружении лишь два ИК-пульта с протоколом NEC и ни одного с RC5.

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

Список известных нам ИК-протоколов

Смотрим ИК-сигнал осциллографом


[Видео] Захват инфракрасного сигнала с помощью осциллографа

Для проверки и отладки сигнала неизвестного ИК-протокола, надежнее всего использовать осциллограф. Если вы не уверены, что ИК-приемник работает правильно — осциллограф поможет увидеть, что именно приходит на приемник. Что должно приходить, я покажу на примере ИК-протокола NEC.

umfqetm2o0aywwoico969m9ruv4.png
Осциллограмма популярного протокола NEC

При передаче кодированной посылки, в начале передатчик формирует преамбулу, которая представляет собой один или несколько пакетов импульсов. Это позволяет приемнику определить необходимый уровень усиления и фона. Но есть протоколы и без преамбулы, например, Sharp.

Далее данные передаются в виде нулей и единиц, в зависимости от метода кодирования бита. Порядок следования, признак начала, метод кодирования и количество данных определяются протоколом передачи.

ИК-протокол NEC содержит короткую отправляемую команду и код повтора, посылаемый, если кнопка осталась нажата. И команда, и код повтора имеют вначале одинаковую преамбулу.

Команда в NEC, помимо преамбулы, состоит из байта адреса и байта номера-команды. По номеру-команды устройство понимает, что именно нужно выполнять. Байты адреса и номера-команды дублируются инверсными значениями, для проверки целостности передачи. В конце команды дополнительно стоит стоп-бит.

В коде повтора после преамбулы содержится логическая »1» — стоп бит.

Логический »0» и »1» в протоколе NEC определяются интервалами: вначале передается пакет импульсов, после которого идет пауза, задающая значение бита.

Инфракрасный щуп для осциллографа


xpt2qpvwdqjlqi-14sa1qcdxcog.png
Осциллограф записывает ИК-сигнал пульта с помощью Silver-bullet

Для захвата ИК-импульсов на осциллографе я использовал самодельный щуп Silver Bullet, придуманный автором программы AnalysIR. Это просто ИК-светодиод и резистор, запаянные в аудио-штекер RCA, который подключен через переходник BNC->RCA к осциллографу. Собирается за пять минут. Все компоненты для сборки такого щупа можно купить в ЧИП и ДИП.

m_lbfa-fujnajm9k0ekeoounxqy.png
Схема щупа для захвата ИК-сигнала на осциллографе

Когда ИК-излучение пульта попадает на ИК-светодиод щупа, через него начинает проходить небольшой ток. Этот ток создает разницу напряжения на выводах светодиода, которую отчетливо видно на осциллографе. Для получения на осциллографе четкого сигнала важно, чтобы передатчик вплотную прислонялся к щупу.

Что не так с кондиционерами


3dd39ec16a6f6ba412fbc0006e0fabc7.jpg
Пульты от кондиционеров посылают один большой пакет с полным списком настроек

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

Но что произойдет, если мы уйдет в другую комнату с пультом от кондиционера, изменим настройки температуры на пульте, но кондиционер не услышит сигнал в момент нажатия на пульт? Допустим на кондиционере сохранилось значение 19°C, мы ушли в другую команту и полностью поменяли все настройки на пульте, поставили 30°C. Потом подошли к кондиционеру снова и нажали кнопку на пульте, поднимающую температуру на 1°C вверх. Если бы пульт просто посылал нажатие каждой кнопки, как это делают другие пульты, на кондиционере бы установилась температура 20°C, а на экране пульта мы бы увидели 31°C. Получилась бы рассинхронизация данных на пульте и в памяти кондиционера.

Поэтому пульты от кондиционеров, в отличие от остальной техники, передают не команду нажатой кнопки, а сразу целиком все параметры кондиционера, которые видны на экранчике пульта. То есть всегда шлют ВСЕ данные отображаемые на экране пульта в одном большом пакете.

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

[Видео] Показываю ИК-сигналы пульта для кондиционера и ИК-протокла NEC. Использую приемник IR-toy и софт AnalysIR

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

Из-за обилия кондиционеров с их функциями, создание удобного пользовательского интерфейса и правильной посылки данных — громоздкая задача. Сейчас мы можем работать с некоторыми кондиционерами, но поддержка большого количества моделей еще не реализована.

Как анализировать ИК-сигналы на компьютере


jyrobyvnoymgmyubq9wv_6qmhp4.png
Схема использования программы AnalysIR с оборудованием IR-Toy

Для работы с ИК-сигналом на компьютере я использую программу AnalysIR. Это программа для анализа ИК-протоколов, которая поддерживает разные устройства для захвата ИК-сигнала. Самый простой вариант — это изготовить самодельный приемник на базе Arduino и TSOP, и подключить его по USB. Я использую IR-toy V2 в качестве приемника. Список поддерживаемых приемников: AnalysIR.pdf.

AnalysIR показывает не импульсы ИК-диодов, как это делает осциллограф, а огибающую ИК-сигнала. Получая огибающую, программа высчитывает задержки и длительности пакетов импульсов — все это записывается в лог и помогает анализировать неизвестные ИК-протоколы. AnalysIR знает более 100 ИК-протоколов и умеет автоматически их распознавать. Кстати автор программы предложил добавить поддержку Флиппера в качестве ИК-приемника. Что думаете об этой идее?

Наши соцсети


-ugemgewme2u1uidkqgvcifmcrk.pngВсе обновления по проекту первым делом публикуются в Telegeram-канале @zhovner_hub

_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________


Предзаказ Flipper Zero


Сейчас запущено производство первой партии Flipper Zero для бекеров заказавших устройство на Kickstarter. Вторая партия будет доступна для покупки осенью 2021. Вы можете зарезервировать устройство из второй партии заранее здесь https://shop.flipperzero.one/ Это важно для нас, чтобы более точно прогнозировать объемы производства.
ewupejepxbdmndit3y3bb9ksink.jpeg

© Habrahabr.ru