Позвонить Telegram Viber
График работы: пн–пт 9:00–18:00

Как считать ИК-команды с любого пульта на ESP32 для ESPHome и Home Assistant

RizneVdim

Время сборки: 20 мин

Сложность: низкая

Компоненты

  • ESP32-C3 Super Mini
  • VS1838B

 При создании собственного ИК-хаба для Home Assistant первым этапом является считывание команд штатного ИК-пульта. Без этого невозможно воспроизвести их с помощью ESP32. Хотя ESPHome умеет работать с ИК-приемниками, на практике некоторые пульты определяются не полностью или декодируются некорректно. Во время разработки собственного ИК-хаба я столкнулся именно со вторым вариантом.

 В этой статье покажу надежный способ чтения ИК-команд с помощью ESP32-C3 Super Mini и Arduino IDE. Полученные коды мы используем во второй части для создания универсального ИК-хаба на ESPHome.

Что получится

  • считать команды практически любого ИК-пульта;
  • определить используемый протокол;
  • сохранить команды в удобную таблицу;
  • подготовить данные для ESPHome;
  • использовать их в Home Assistant.

Компоненты

  • ESP32-C3 Super Mini
  • VS1838B
  • несколько проводов DuPont

Почему Arduino IDE, а не ESPHome

 В ходе тестирования выяснилось, что для некоторых пультов ESPHome определяет команды не полностью. Arduino IDE с библиотекой IRremote показала более стабильный результат, поэтому именно её используем для чтения кодов. В следующей статье снова вернемся к ESPHome, следите за анонсами.

Схема подключения

Скоро будет фото

VS1838BESP32-C3
VCC3.3V
GNDGND
OUTGPIO3

 В статье предполагается, что Arduino IDE уже установлена, а читатель знаком с установкой библиотек через Library Manager. Использовалась библиотека IRremote версии 4.7.1.

Для каких устройств подойдет этот способ

  • телевизоров;
  • кондиционеров;
  • люстр с ИК-пультом;
  • ТВ-приставок;
  • медиаплееров;
  • вентиляторов;
  • другой бытовой техники с инфракрасным управлением.

 После прошивки ESP32 скетчем (в конце статьи) вы можете нажимать кнопки на Вашем пульте и с помощью ИК приёмника VS1838B микроконтроллер будет выводить в монитор порта: протокол / адрес / команду что позволит создать таблицу команд для последующего их воспроизведения, нечто вида:

Читаем команды

Пример вывода.

Protocol: NEC

Address: 0x00

Command: 0x46

Создаем таблицу

КнопкаПротоколАдресКоманда
PowerNEC0x000x46

Возможные проблемы

Вместо протокола отображается только RAW

  • Некоторые современные или малораспространенные пульты используют нестандартные протоколы, которые библиотека не может автоматически распознать.
  • В этом случае в Serial Monitor появятся только необработанные (RAW) данные.
  • Это не означает, что такой пульт нельзя использовать. В большинстве случаев RAW-команды также можно передавать обратно, однако объем данных значительно больше, чем у стандартных протоколов NEC, Samsung, Sony или RC5.

Одна и та же кнопка каждый раз выдает разные значения

  • Некоторые устройства используют защиту от повторного воспроизведения команд (rolling code) или передают дополнительные служебные данные.
  • Однако большинство бытовых устройств (телевизоры, кондиционеры, люстры, ТВ-приставки) используют постоянные коды, поэтому при повторном нажатии одной кнопки адрес и команда должны совпадать.
  • Если значения отличаются незначительно, попробуйте нажимать кнопку коротко и не удерживать её.

Команды повторяются несколько раз

  • Это нормальное поведение.
  • Практически все ИК-пульты несколько раз отправляют одну и ту же команду, чтобы устройство гарантированно её приняло.
  • При составлении таблицы достаточно записать команду один раз.

 После того как все команды считаны, можно переходить к созданию собственного ИК-хаба на ESPHome. Во второй статье серии мы загрузим эти команды в ESP32-C3 Super Mini и подключим устройство к Home Assistant.

 Несмотря на то, что ESPHome поддерживает работу с ИК-приемниками, для считывания команд Arduino IDE с библиотекой IRremote в ходе тестирования показала более стабильный результат. Поэтому мы используем каждый инструмент по его сильной стороне: Arduino IDE для получения кодов, а ESPHome для управления техникой и интеграции с Home Assistant.

Code for Arduino ADE
#include <Arduino.h>
#include <IRremote.hpp>

#define IR_RECEIVE_PIN 4   // OUT от VS1838B

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println();
  Serial.println("=== IR RECEIVER ESP32-C3 ===");
  Serial.println("Press buttons on remote...");
  Serial.println();

  IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK);
}

void loop() {

  if (IrReceiver.decode()) {

    // Игнорируем повтор NEC
    if (!(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) {

      Serial.print("Protocol=");
      Serial.println(getProtocolString(IrReceiver.decodedIRData.protocol));

      Serial.print("Address=0x");
      Serial.println(IrReceiver.decodedIRData.address, HEX);

      Serial.print("Command=0x");
      Serial.println(IrReceiver.decodedIRData.command, HEX);

      Serial.println("--------------------");
    }

    IrReceiver.resume();
  }
}

С этим покупают:

  • ESP32 C3 Super Mini — компактная плата разработки с USB-C для Arduino и IoT проектов

    ESP32-C3 SuperMini — компактная плата разработки с USB-C для Arduino и IoT проектов
    160 грн
    ПОДРОБНЕЙ
  • Корпус для ESP32 WROOM 30 pin и дисплея GC9A01 1.28"

    Корпус для ESP32 WROOM 30 pin и дисплея GC9A01 1.28"
    130 грн
    ПОДРОБНЕЙ
  • RVD IR Hub C3 – корпус для ESP32-C3 Super Mini с ИК светодиодами и DHT11

    201 Корпус
    150 грн
    ПОДРОБНЕЙ

Комментарии к статье

Пока нет комментариев. Будьте первым!

Добавить комментарий