У себя в закрома нашел давно валяющиеся без дела умный пульт от Яндекса 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 в этом проекте.
sintech
А при подключении прищепки и подаче питания программатором, устройство не оживает и не пытается общаться с флеш памятью?
almirus Автор
В данном конкретном случае не оживает, но бывает, например, пытался оживить экран Lytko 103, пока не отпаял, не давал снять\залить прошивку.