У себя в закрома нашел давно валяющиеся без дела умный пульт от Яндекса 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 в этом проекте.
ссылка на оригинал статьи https://habr.com/ru/articles/918018/
Добавить комментарий