У себя в закрома нашел давно валяющиеся без дела умный пульт от Яндекса YNDX-0006, решил его задействовать в умном доме. Это устройство работает через WIFI и облако, я стараюсь не использовать устройства зависящие от облаков. Решил перепрошить его.

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

Разбор

У YNDX-0006 несколько ревизий.

Пульт состоит из двух половинок на защелках, пластиковой лопаткой проходимся по периметру и располовиниваем.

Внутри нас встречает аккуратная плата с минимум элементов - основной чип это esp8266, флеш память 25q80csig, россыпь IR передатчиков, один IR приёмник и LED рядом с USB.

Детали ближе

Рядом с флеш памятью есть пятачки RX TX - можно было к ним подпаяться, но решил не мучаться с поиском и замыканием ножек (для перехода в режим прошивки), тем более, у меня в наличии есть народный программатор ch341a, им и решил шить "через прищепку".

Прошивка

Обесточиваем пульт, прищепкой цепляемся к флеш памяти (точка на микросхеме это первая нога - на прищепке это красный проводник)

Прищепка в деле

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

Считываем прошивку, потом нажимаем "Сравнить" и сохраняем в виде файла (если захотим вернуться на прошивку от яндекс).

Теперь необходимо сгенерить прошивку "пустышку" EspHome для нашего чипа ESP8266. Запускаем одноименной аддон в HomeAssistant и добавляем новое устройство.

Добавление нового устройства, генерация прошивки

Важно. Создать файл secrets.yaml c ssid и паролем к вашему 2.4 wifi - он будет зашит в прошивку.

Дожидаемся компиляция прошивки в формате bin, выбираем Manual download и скачиваем прошивку на диск. Заливаем новую прошивку программатором на пульт. Отключаем прищепку и подключаем питание через USB. Через сек 10 новое EspHome устройство должно отобразится в списке со статусом Online.

Все, устройство полностью в нашем распоряжении. Это полноценный ES8266 с одним мегабайтом флеш памяти и подпаянными IR приемником и передатчиком и светодиодом. Необходимо определить на каких пинах они сидят.

После прошивки через прищепку, остальные заливки происходят через ОТА по Wifi

Определение пинов

Выписал себе список всех GPIO esp8266, исключив оттуда UART и специфические ножки, написал мини прошивку, для считывания сигналов, отправки и миганием светодиодом. И волшебным методом перебора стал искать пины.

Тестовая прошивка для поиска GPIO
esphome:
  name: yandex-ir
  friendly_name: yandex IR

esp8266:
  board: esp01_1m

# ИК-приёмник
remote_receiver:
  pin: GPIO5  # <-сначала менял это знаение
  dump: raw   # Вывод всех ИК-сигналов в лог


# ИК-передатчик
remote_transmitter:
  pin: GPIO14 # <-потом это знаение
  carrier_duty_percent: 50%  # Рабочий цикл

# Пример для отправки сигнала 
button:
  - platform: template
    name: "Send IR Code"
    on_press:
      - remote_transmitter.transmit_raw:
          code: [1000, -1000, 1000, -1000, 1000, -1000, 1000, -1000, 1000, -1000, 1000, -1000, 1000, -1000, 1000, -1000]  # Длинный RAW-код
          repeat:
            times: 5  # Повторить 25 раз для заметности
            wait_time: 100ms  # Пауза между повторами

output:
  - platform: gpio
    pin: GPIO4  # <-потом это
    id: led_output

interval:
   - interval: 500ms
     then:
       - lambda: |-
           static bool led_state = false;
           led_state = !led_state;
           if (led_state)
             id(led_output).turn_on();
           else
             id(led_output).turn_off();

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "КОД_СГЕНЕРЕННЫЙ_ПРИ_ГЕНЕРАЦИИ_ПРОШИВКИ"

ota:
  - platform: esphome
    password: "КОД_СГЕНЕРЕННЫЙ_ПРИ_ГЕНЕРАЦИИ_ПРОШИВКИ"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Yandex-Ir Fallback Hotspot"
    password: "КОД_СГЕНЕРЕННЫЙ_ПРИ_ГЕНЕРАЦИИ_ПРОШИВКИ"

captive_portal:

    

Приемник искал выводом дампа данных и направляя пульт от кондиционера и нажимая кнопки; прошивал новую версию меняя GPIO у remote_receiver - пока не поймал данные в логе, им оказался GPIO5, для передатчика написал длинную последовательность сигналов и установил повтор и использовал камеру телефона чтобы увидеть свечение диодов, нашел передатчик это GPIO14

И самое простое было найти белый светодиод рядом с USB разъемом это GPIO4

Универсальная прошивка

Можно припаять, например, универсальный датчик влажности, температуры, давления BME280 к пинам I2C чипа, проделать отверстие и, кроме универсального пульта, получить погодную станцию для квартиры.

После этого написал универсальную прошивку для пульта (которая явно требует доработки). Я решил не использовать встроенную поддержку remote_receiver и remote_transmitter, а написал свою внешнюю компоненту для использования более универсальной библиотеки IRremoteESP8266 (в ней больше протоколов).

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

При переключении Learning Mode включается Led светодиод на пульте и начинает работать IR приёмник и декодированные сигналы писать в текстовый сенсор IR Decoded.

Код универсальной прошивки тут.

Нужно скопировать папку ir_controller в /homeassistant/esphome/components, а содержимое yandex-ir.yaml внутрь своей прошивки (yaml) с сохранением своих password

Я задействовал YNDX-0006 в этом проекте.

Комментарии (2)


  1. sintech
    16.06.2025 10:34

    А при подключении прищепки и подаче питания программатором, устройство не оживает и не пытается общаться с флеш памятью?


    1. almirus Автор
      16.06.2025 10:34

      В данном конкретном случае не оживает, но бывает, например, пытался оживить экран Lytko 103, пока не отпаял, не давал снять\залить прошивку.