Прошивка Яндекс.Пульт YNDX-0006 на EspHome

от автора

У себя в закрома нашел давно валяющиеся без дела умный пульт от Яндекса 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/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *