Как конвертировать коды Arduino-IRremote в формат Tasmota-IRSend

Как преобразовать IR-коды из формата библиотеки Arduino IRRemote в формат Tasmota IRSend? У меня есть ИК-приемник, построенный на базе Arduino Nano. Я записал коды со своего пульта дистанционного управления NEC, используя пример программы, поставляемый в комплекте с библиотекой. Коды сообщаются в виде

      Protocol=NEC Address=0xF300 Command=0x91 Raw-Data=0x6E91F300,  32 bits LSB first.

Я использовал программу IRSender из тех же примеров библиотеки и подал приведенные выше коды на свой ИК-светодиод. Это работает отлично. Теперь все мои устройства IoT используют Tasmota, поэтому я хочу интегрировать в них ИК-отправитель. Но когда я попытался отправить необработанные данные с помощью команды Tasmota IRSend, это не сработало. Я пробовал совместить адрес и команду разными способами. Например:

      IRSend {"Protocol":"NEC","Bits":32,"Data": 0x6E91F300 }
IRSend {"Protocol":"NEC","Bits":32,"Data": 0x91F300 }
IRSend {"Protocol":"NEC","Bits":32,"Data": 0xF30091 }

и т. д., и даже в виде строки в кавычках:

      IRSend {"Protocol":"NEC","Bits":32,"Data": "0xF30091" }

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

1 ответ

Наконец я выяснил соответствие между IR-кодами Arduino и IR-кодами Tasmota.

В следующем описании я называю группу из 4 битовnibbleи 8 бит какoctet. Таким образом, полубайт представляет одну шестнадцатеричную цифру, а октет — две шестнадцатеричные цифры.

Кreversing the bitsпод полубайтом мы подразумеваем чтение 4 битов назад, например:

0001 становится 1000,

1101 становится 1011 и т. д.

К1's complementмы имеем в виду инвертирование каждого бита на свое место. Например:

1001 становится 0110,

0001 становится 1110 и т. д.

Протокол NEC отправляет каждую 8-битную команду дважды: один раз в исходном виде, а второй раз с инвертированным битом, т. е. с дополнением до одного бита.

Процедура преобразования протокола:

В библиотеке Arduino IR Remote ИК-команда состоит из 16-битного адреса и 8-битной команды. (Часть «необработанных данных» можно игнорировать). Например, у меня есть пульт дистанционного управления Onida Smart TV, который имеет следующую ИК-команду для включения/выключения:

      Protocol=NEC Address=0xDF20 Command=0xB Raw-Data=0xF40BDF20 32 bits LSB first.

Сначала давайте обработаем адрес устройства и преобразуем его в формат Tasmota:

Адрес:0xDF20

  1. Если он меньше 16 бит, добавьте ведущие нули, чтобы получилось 4 полубайта.
  2. Поменяйте местами два октета:DF 20->
  3. Внутри каждого октета поменяйте местами полубайты:20 DF->02 FDВ двоичном виде это
  4. Внутри каждого полубайта поменяйте местами биты:0000 0010 1111 1101->0000 0100 1111 1011Таким образом, в Hex часть адреса становится:04 FB. Оставьте это на потом.

Теперь давайте обработаем 8-битную часть команды:

  1. Если оно меньше 8 бит, добавьте ведущий ноль:0xBстановится0x0B
  2. Поменяйте местами два кусочка:0B-> В двоичном формате,B0является
  3. Поменяйте местами биты в каждом полубайте:

1011 0000->1101 0000

Добавьте еще 8 бит, которые являются дополнением до 1 битов в этом октете: Таким образом0010 1111добавлен. Вся командная часть теперь

      1101 0000 0010 1111

В шестнадцатеричной записи этоD02F.

Наконец, объедините адрес и части команды:04FBD02F

Его необходимо отправить с консоли Tasmota следующим образом:

      IRSend {"Protocol":"NEC","Bits":32,"Data": 0x4FBD02F }
Другие вопросы по тегам