Estoy tratando de aplicar ingeniería inversa al protocolo de control remoto para mi calentador de agua sin tanque EcoSmart .
Desafortunadamente, el dispositivo de control remoto ya no está disponible para la compra y el fabricante no tiene información sobre el protocolo utilizado. Quiero intentar conectar el calentador directamente a un Arduino para poder monitorearlo/controlarlo a través de Ethernet.
El calentador tiene un conector de 4 pines para el control remoto y está conectado a la MCU como se muestra aquí:
simular este circuito : esquema creado con CircuitLab
La unidad envía datos en los siguientes escenarios:
Mi osciloscopio tiene decodificación RS-232 incorporada, y parece decodificar algunos datos a 1200 bps, pero no estoy seguro de que realmente esté tratando con datos RS-232/UART aquí. Mi pregunta para usted es: ¿qué tipo de datos le parece esto?
Aquí hay parte de la salida de una operación de "ENCENDIDO" (es decir, presione el botón para encender el calentador): http://is.am/fx
Para mí, esto parece demasiadas transiciones altas/bajas para UART... Me inclino por un pulso de ancho variable para indicar 0/1. En el diagrama de tiempo anterior, puede ver mi interpretación tanto de RS-232 como de "Otro", lo que indica un protocolo desconocido, que tendría un '0' digital como un pulso alto de 720uS y un '1' digital como un pulso alto de 24mS. .
Agradecería cualquier información sobre el protocolo utilizado aquí. Si necesita aclaraciones, haré lo mejor que pueda.
Referencia RS-232/UART: https://electronics.stackexchange.com/a/227414/16378
Actualización: después de grabar y transcribir muchas formas de onda de diferentes eventos, descubrí parte del protocolo.
Hay un comando de 'Inicio' al principio de cada secuencia. Consiste en una lógica Baja durante al menos 4 ms, luego Alta durante 7 ms, luego Baja durante 4 ms.
Después del comando 'Inicio', los pulsos cortos (720uS) representan el cero lógico y los pulsos largos (2,4 ms) representan el uno lógico. Los espacios entre pulsos son todos de aproximadamente 840uS.
Todas las secuencias tienen una longitud de 5 bytes y se transmiten 6 veces.
Los primeros 2 bytes son siempre los mismos: 00:FF:0F:F0
El tercer byte parece ser el identificador de comando/evento:
El cuarto byte es la temperatura en Fahrenheit, MSB a LSB (80 a 140)
El quinto byte es la temperatura en Celsius, MSB a LSB (26 a 60)
Así que ahora tengo que determinar si puedo enviar estas mismas secuencias a la línea RX para cambiar las temperaturas y habilitar/deshabilitar el calentador de forma remota. Me pregunto si se utiliza una dirección diferente
ACTUALIZACIÓN #2: ¡Éxito! ¡Resulta que enviar las mismas secuencias al pin RX se puede usar para ajustar la temperatura y encender y apagar la unidad! Fue bastante fácil modificar el protocolo con un Arduino Uno, y el calentador responde a los ajustes de temperatura alterando directamente la temperatura de salida (no es necesario subir o bajar un grado a la vez). Planeo publicar la guía de interfaz completa junto con el código fuente tanto para la entrada como para la salida cuando esté completa.
¡Gracias a todos los que ofrecieron sugerencias!
ACTUALIZACIÓN #3: Repositorio de Github creado: https://github.com/ryangriggs/EcoSmartLib
ACTUALIZACIÓN n.º 4: consulte el repositorio de github de Phil para obtener más información: https://github.com/PhilRW/ecosmart-remote
El protocolo de datos que mostró en el documento vinculado se parece a la forma de onda de modulación común a algunos controles remotos IR. Es posible que la configuración por cable que usted describe pueda diseñarse de manera que el enlace del control remoto también funcione si se conecta un módulo receptor IR en el cabezal remoto. (Sin embargo, las comunicaciones serían de una manera).
En este documento se describen varios protocolos IR comunes .
Me aventuraría a adivinar que los dos tiempos más largos (7mseg/4mseg) son la sincronización de inicio para la transmisión. Después del tiempo de sincronización, los datos parecen estar codificados en celdas de bits que tienen un ancho de codificación de 1440 usec como modulación Manchester. Un nivel de datos es 720usec alto al comienzo de la celda y 720usec bajo en la segunda mitad de la celda. El nivel de datos opuesto está representado por la línea de datos baja para 720usec al comienzo de la celda y alta en la segunda mitad de la celda de bits.
Este definitivamente no es un formato asíncrono utilizado por un protocolo UART típico.
Dmitri Grigoriev
ryan griggs
brahans
usuario68591
ryan griggs
viejo contador de tiempo
ryan griggs
ryan griggs
ben
ryan griggs