Я пытаюсь реконструировать протокол дистанционного управления для моего безрезервуарного водонагревателя EcoSmart .
К сожалению, устройство дистанционного управления больше не продается, а производитель не располагает информацией об используемом протоколе. Я хочу попробовать подключить нагреватель напрямую к Arduino, чтобы я мог контролировать/управлять им через Ethernet.
Обогреватель имеет 4-контактный разъем для дистанционного управления и подключается к MCU, как показано здесь:
смоделируйте эту схему - схема, созданная с помощью CircuitLab
Устройство отправляет данные в следующих случаях:
Мой осциллограф имеет встроенное декодирование RS-232, и, похоже, он декодирует некоторые данные со скоростью 1200 бит/с, но я не уверен, что на самом деле имею здесь дело с данными RS-232/UART. Мой вопрос к вам: на какой тип данных это похоже для вас?
Вот часть вывода операции «ВКЛ» (т.е. нажмите кнопку, чтобы включить обогреватель): http://is.am/fx
Для меня это выглядит как слишком много переходов между высоким и низким уровнем для UART... Я склоняюсь к импульсу переменной длительности, чтобы указать 0/1. На приведенной выше временной диаграмме вы видите мою интерпретацию как RS-232, так и «Другого», что указывает на неизвестный протокол, который будет иметь цифровой «0» как высокий импульс 720 мкс и цифровую «1» как высокий импульс 24 мс. .
Я был бы признателен за любое понимание протокола, используемого здесь. Если вам нужны разъяснения, я сделаю все возможное.
Ссылка RS-232/UART: https://electronics.stackexchange.com/a/227414/16378
Обновление: после записи и расшифровки множества сигналов различных событий я разобрался с частью протокола.
В начале каждой последовательности есть команда «Старт». Он состоит из логического низкого уровня в течение не менее 4 мс, затем высокого уровня в течение 7 мс, затем низкого уровня в течение 4 мс.
После команды «Пуск» короткие импульсы (720 мкс) представляют логический ноль, а длинные импульсы (2,4 мс) представляют логическую единицу. Промежутки между импульсами составляют примерно 840 мкс.
Все последовательности имеют длину 5 байт и передаются 6 раз.
Первые 2 байта всегда одинаковы: 00:FF:0F:F0
Третий байт является идентификатором команды/события:
Четвертый байт — это температура в градусах Фаренгейта, от MSB до LSB (от 80 до 140).
Пятый байт — это температура в градусах Цельсия, от MSB до LSB (от 26 до 60).
Итак, теперь мне нужно определить, могу ли я отправить те же самые последовательности в линию RX для изменения температуры и удаленного включения/выключения нагревателя. Интересно, используется ли другой адрес
ОБНОВЛЕНИЕ №2: Успех! Оказывается, посылая одни и те же последовательности на вывод RX, можно использовать для регулировки температуры и включения и выключения устройства! Было довольно легко изменить протокол с помощью Arduino Uno, и нагреватель реагирует на настройки температуры, напрямую изменяя выходную температуру (нет необходимости увеличивать/уменьшать по одному градусу за раз). Я планирую опубликовать полное руководство по интерфейсу вместе с исходным кодом для ввода и вывода по завершении.
Спасибо всем, кто предлагал предложения!
ОБНОВЛЕНИЕ № 3: создан репозиторий Github: https://github.com/ryangriggs/EcoSmartLib
ОБНОВЛЕНИЕ № 4: Дополнительную информацию см. в репозитории Фила на github: https://github.com/PhilRW/ecosmart-remote .
Протокол данных, который вы показали в связанном документе, выглядит как форма волны модуляции, характерная для некоторых ИК-пультов дистанционного управления. Возможно, что проводная установка, которую вы описываете, может быть разработана таким образом, чтобы связь дистанционного управления также работала, если модуль ИК-приемника был подключен к удаленному разъему. (Общение было бы одним из способов, хотя).
В этом документе описываются несколько распространенных IR-протоколов .
Рискну предположить, что два больших значения времени (7 мс/4 мс) являются начальной синхронизацией передачи. После времени синхронизации данные выглядят закодированными в битовых ячейках шириной 1440 мкс, закодированных как манчестерская модуляция. Один уровень данных имеет 720 мкс высокого уровня в начале ячейки и 720 мкс низкого уровня во второй половине ячейки. Противоположный уровень данных представлен линией данных с низким уровнем для 720 мкс в начале ячейки и высоким уровнем во второй половине битовой ячейки.
Это определенно не асинхронный формат, используемый типичным протоколом UART.
Дмитрий Григорьев
Райан Григгс
брахи
пользователь68591
Райан Григгс
Старожил
Райан Григгс
Райан Григгс
Бен
Райан Григгс