Як зчитувати ІЧ‑команди з будь‑якого пульта на 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

    ESP32-C3 SuperMini — компактная плата разработки с USB-C для Arduino
    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 грн
    ДЕТАЛЬНІШЕ

Коментарі до статті

Поки що немає коментарів. Будьте першим!

Додати коментар