Envío de I2C de forma fiable a través de cables Cat5

Estoy considerando implementar un sistema de automatización del hogar alrededor de mi Raspberry Pi, pero descubrí que el precio y el espacio requerido para insertar un Pi en cada lugar donde se requiere demasiado control, pero los cables Cat5e necesarios para este diseño ya se instalaron durante la renovación. Tengo algunos PCF8574, PCF8591 y SSR por ahí, ¿es posible manejarlos con cables Cat5e?

Todos mis cables Cat5e ya están cableados con pinout TIA/EIA 568B. Forman parte de mi cableado estructural y no están blindados, por lo que se requiere un voltaje de línea más alto. Estoy pensando en enviar líneas de alimentación e I2C a través del cable, con este pinout:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND

La disposición de los pines de alimentación es la misma que la del cableado PoE 100BASE-TX, por lo que la potencia nominal también será la misma, y ​​el uso de señalización diferencial bidireccional se encuentra en 1000BASE-T, que requiere Cat5e.

Las líneas originales I2C SCL y SDA se derivan en dos pares diferenciales bidireccionales en niveles TTL (el drenaje abierto no se mantiene en el cable, sino que se restaura en el dispositivo de terminación de línea/cambio de nivel que estoy diseñando)

¿Alguna sugerencia sobre eso? Además, ¿qué chip debo usar para convertir las líneas I2C a la señalización diferencial? Sugiera chips con la opción de orificio pasante DIP para mí. No sé cómo manejar las cosas de SMT.

EDITAR

Encontré este chip, SN65LBC180, ¿es una buena opción? ¿Cómo conectarlo a una unidad bidireccional? ¿Cómo cambiar el nivel (es una parte de BiCMOS que requiere nivel TTL pero Pi conduce a niveles CMOS de 3.3v) y hacerlo compatible con drenaje abierto?

EDITAR 2

Los comentaristas sugirieron RS-485 que me pareció aceptable, pero aun así se requiere que los dos pares diferenciales sean bidireccionales y solo dos pares diferenciales bidireccionales. Estoy reutilizando los cables Ethernet existentes.

EDITAR 3

Como alguien lo mencionó, no puedo usar CAN. No hay forma de que pueda colocar CAN en RPi sin sacrificar nada (SPI está ocupado por una pantalla táctil, por lo que no hay convertidor de SPI a CAN)

Soy consciente de la limitación de I2C PHY, por lo que esencialmente estoy tratando de adaptarlo a 1000BASE-T PHY: señalización diferencial bidireccional para señales SCL y SDA, pero además ejecuta el protocolo I2C.

EDITAR 4

Me llegó un nuevo chip: NXP P82B96 que divide I2C en 4 líneas unidireccionales, que a su vez se pueden usar para alimentar SN65LBC180 a través de optoaislamiento (solo en el lado Pi) para formar una señalización lista para larga distancia de 8 pines. Ahora solo necesito descubrir cómo obtener energía a través del cable, o cómo determinar si el bus está enviando y hacer que los pares sean bidireccionales.

EDITAR 5

De las sugerencias de respuestas, creo que necesito cambiar un poco el pinout de alimentación:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V

El voltaje de señalización diferencial I2C es TTL. El +5V sobre el par 3 proviene del Pi, sin búfer pero fusionado. Es posible que el par 4 de +12 V no esté presente solo se usa para controlar algunos dispositivos de alta potencia. Si es necesario, el dispositivo puede usar su propia fuente de alimentación y dejar ambos rieles colgando desconectados o suministrar su propio voltaje más alto pero usar el riel de 5V.

RASCA ESO

Pinout sigue siendo mi diseño original, que es compatible con 802.1af.

¿Por qué no RS-485? Es un estándar industrial y confiable.
Pi no tiene RS485 y quiero que el circuito de interfaz sea lo más simple posible. También necesito PCF8574 que, según mis experimentos, puede impulsar mi SSR de manera confiable con un voltaje de suministro de 5V.
Si bien RS-485 en sí mismo es bidireccional, no lo hace en el lado de un solo extremo.
@IgnacioVazquez-Abrams Estoy reutilizando el cableado Ethernet existente... Puedo usar chips de interfaz RS485, pero RS485 solo puede enviarse a través de los pines 1/2 y 3/6, y los pines 4/5 y 7/8 siguen siendo un riel de alimentación de 12 V y clavijas de tierra.
Pero eso no lo hace adecuado para sus propósitos.
Una de las razones por las que SCL y SDA son de colector abierto es que ambos son bidireccionales: el maestro o el esclavo pueden reducirlos. ¿Cómo estás manejando esto en el diseño de tu interfaz? Si bien I2C es un protocolo síncrono, y puede ejecutarse en cables largos ralentizándolo y usando los filtros apropiados, existen opciones mucho mejores para las comunicaciones por cable, como CANbus, RS-485 o incluso RS-422 asíncrono.
¿Cuánto mide su cable CAT-5? Tengo algo similar con una conexión I2C de 20 m (~60 pies) desde el sótano para monitorear la temperatura. Funciona bien con un cable de teléfono barato sin blindaje. Sin cambio de nivel, solo dos microcontroladores de 5 V conectados a través de i2c.
@Kamil En algún lugar alrededor de 10 a 30 metros, un entorno de diafonía alienígena algo hostil. Sin embargo, los cables pueden ejecutar 1000BASE-T de manera confiable. (y es por eso que estoy tratando de usar una señalización que sea más similar a 1000BASE-T y 100BASE-T PoE)
Debería probar I2C de baja frecuencia y conectar eso y simplemente intentarlo. Si tiene alcance, puede ver lo que sucede en las líneas SDA/SCL en ambos lados.
Si tiene la intención de usar un cable Ethernet, ¿ha considerado solo usar Ethernet para la comunicación? Si parte del requisito es alimentación y comunicación en un solo cable, podría usar PoE.
@DaveTweed Es por eso que estoy usando señalización diferencial bidireccional. Estoy tirando del bus hacia arriba en el extremo remoto (terminando la sección de drenaje abierto) y uso la interfaz de drenaje abierto en el lado del controlador.
@ mjh2007 Estaba planeando solo Ethernet en todas partes, pero resultó ser demasiado caro para mí. Así es como tuve la idea de ejecutar una señalización similar pero usar un protocolo diferente: use señalización diferencial bidireccional de estilo 1000BASE-T en dos pares y alimentación de estilo PoE 100BASE-T en los otros dos.
@Kamil No tengo un osciloscopio y no quiero que la diafonía alienígena del cableado estructural vuelva locos a mis dispositivos I2C. Es por eso que necesito señalización diferencial.
En lugar de rpis, puede reducir los costos utilizando un microcontrolador con ethernet incorporado o un módulo spi ethernet y usar los cables son ethernet normal con poe.
@Grant No están del todo disponibles aquí y son bastante caros. También tengo un límite de tamaño. Necesito encajar todo en mi caja de interruptores de cableado estructural existente.
¿Algo malo con el uso de CAN?
@PeterK RPi no los tiene, y necesito mantener el tamaño mínimo.
Si estás tan empeñado en hacer lo que dijiste que ibas a hacer originalmente, ¿por qué viniste aquí y preguntaste al respecto?
@MattYoung Necesito sugerencias sobre el diseño del módulo de interfaz, incluido el lado Pi y el lado del dispositivo. El lado del dispositivo no tendrá bus: un módulo de interfaz para un dispositivo, y el lado Pi está en un bus.
¿Necesita siquiera un protocolo de comunicación? ¿Qué va a estar en el "lado del dispositivo"? ¿Podría usar los cables de ethernet para simplemente controlar los relés y tener todas las cosas de i2c al final del rpi?
@Grant No estoy exactamente seguro de cuánta energía pueden contener los cables.
Los cables ethernet @maxthonchan Cat5 pueden manejar con seguridad 360 ma a 50 V ( en.wikipedia.org/wiki/Power_over_Ethernet#Power_capacity_limits ). Puede obtener fácilmente relés de estado sólido que consumen <10 ma a 3-32 V en el lado de entrada, por lo que se encuentran dentro de las especificaciones seguras.

Respuestas (8)

Tratar de hacerlo con IIC es una mala idea. IIC está realmente destinado a la comunicación entre chips en una sola placa. Dado que la corriente máxima requerida para bajar una línea es limitada, las líneas tienen una impedancia relativamente alta (unos pocos kΩ). Esto significa que pueden captar el ruido fácilmente, lo cual es un problema grave cuando se instalan cables sin blindaje en las paredes, posiblemente justo al lado de los cables de alimentación de CA.

Yo usaría CAN para esto. CAN usa un solo par trenzado unido con solo 60 Ω en cualquier punto, y la señal es diferencial. Eso significa que los receptores pueden cancelar la mayor parte del inevitable ruido de modo común que se captará debido al acoplamiento capacitivo. CAN corriendo a 500 kbits/s puede cubrir algo del tamaño de una casa ordinaria.

Muchos microcontroladores están disponibles hoy en día con CAN incorporado. Por lo general, necesita un chip transceptor físico separado (como el MCP2551 común), pero las pocas capas más bajas del protocolo se implementan en silicio en el periférico CAN. El firmware interactúa con el bus CAN a nivel de envío y recepción de paquetes completos. La detección de colisiones y el reintento, la generación de la suma de verificación, los detalles de la señalización del paquete de bus, la validación de la suma de verificación recibida y el ajuste de la deriva del reloj se manejan por usted.

No se deje engañar por RS-485. Esa es una reliquia de una época pasada. También utiliza una señal diferencial única como CAN, por lo que también tiene una buena inmunidad al ruido. Sin embargo, la gente suele enamorarse de RS-485 porque parece "más simple". Esto es solo porque no miran todo el sistema. Primero, no es realmente menos complejo eléctricamente. Aún necesitará algún tipo de transceptor para conducir y recibir la señal diferencial. Ya sea que tenga un transceptor RS-485 conectado al UART del microcontrolador o un MCP2551 conectado al periférico CAN es bastante irrelevante en términos de costo y complejidad del hardware. La gran diferencia es que RS-485 lo deja en el nivel de byte sin procesar (a través de UART). Esto significa que para implementar cualquier sistema significativo y robusto, debe inventar su propio protocolo para manejar la detección de colisiones, decida cómo manejar los reintentos, la paquetización, la generación y verificación de la suma de verificación, el control de flujo, etc. Puede usar una única arquitectura maestra, pero obtener los detalles correctos es mucho más complicado de lo que la gente piensa que no los ha analizado todos cuidadosamente. Con CAN, solo envía y recibe paquetes, y el hardware se encarga de los detalles.

No tengo CAN integrado en RPi, no tengo interfaz CAN, no puedo pagarlos y no puedo instalarlos en una carcasa existente. Entonces, NO SE PUEDE. Estoy convirtiendo IIC de un lado a otro de la señalización diferencial para evitar ese escollo de la diafonía y la resistencia. La conversión y el dispositivo IIC comparten una sola placa.
@Max: un microcontrolador con CAN será más barato, más pequeño y consumirá menos energía que un RPi. Si estos nodos son en su mayoría sensores y similares, un RPi es excesivo de todos modos.
uC no tiene la potencia computacional adecuada para ejecutar el otro lado del sistema. Aunque tengo una pantalla táctil en el sistema que es solo para anulación de emergencia, todos los comandos se envían a través de la red doméstica a Pi a través de HTTP (con una interfaz de usuario bastante elegante basada en AJAX), y Pi maneja toda la autenticación y otras cosas.
@MaxthonChan Puede obtener circuitos integrados de controlador económicos que conviertan CAN a SPI y/o I2C para interactuar con su RasPI. Ejemplo de Microchip .
Si esa es su sugerencia, dígame cómo puedo conducir mi SSR. Actualmente tengo una placa de recepción con el chip de interfaz diferencial, un 7805 y un PCF8574, y maneja hasta 8 SSR. (y normalmente tengo dos o tres)
@PeterK Sugiera algunos ejemplos de I2C si está tratando de guiarme para que reutilice los cables para transportar la señalización CAN. No tengo ranuras de bus SPI de repuesto disponibles.
Terminé usando CAN PHY, pero no el protocolo en sí. Sin embargo, el protocolo sigue siendo I2C.
@OlinLathrop ¿Creería que CAN es adecuado para un ascensor de unos 16 pisos? El CAN se usaría principalmente para registrar llamadas desde el automóvil o cada aterrizaje. No busca desviar el hilo, solo busca una respuesta "inteligente".
@EmbSysDev Ese no es mi caso de uso: tengo una definición clara de dispositivos maestros y esclavos: el Pi es el bus maestro que recibe instrucciones a través de Internet, las autentica y las reenvía al bus. El interruptor modificado (o atenuador de luz) es esclavo, que realiza un trabajo real (cambiar un SSR, etc.) al recibir una instrucción dirigida a él. No creo que CAN sea apropiado aquí, pero I2C sí lo es. I2C tiene sus propios problemas (cables largos con interferencias alienígenas fuertes) y eso es lo que estoy tratando de superar.
@Maxt: si eso es lo que quiere hacer (un controlador principal con varios dispositivos pequeños), entonces realmente no veo el problema con CAN. Usted conecta el RPi al bus CAN una vez, luego cada esclavo es bastante simple y pequeño. Puede hacer que el RPi se comunique con un micro CAN o controlar el bus directamente con algo como un MCP2515 (controlador CAN con interfaz SPI). Si el RPi no tiene SPI, aún puede explotarlo con 4 líneas de E/S. Creo que vas a tener problemas escamosos con el bus IIC como propones.
@OlinLathrop ya ha leído la documentación y las publicaciones del foro sobre el bit banging CAN incluso con un chip PHY, imposible si el sistema es multitarea debido a los nervios de tiempo, que se requiere en mi Pi ya que también se está autenticando (trabajo de criptografía, uso intensivo de CPU) y instrucciones de reenvío. SPI y UART están ocupados, por lo que solo I2C está disponible con soporte de hardware para evitar nerviosismo.
@OlinLathrop También tengo una restricción de tamaño: 5 cm por 5 cm por 3 cm como máximo o no encajará en los accesorios existentes. Puedo hacer una placa con cuatro o cinco chips que se ajusten a esta restricción y funcione con el protocolo I2C (probablemente CAN PHY)
@OlinLathrop Debería leer mi propia respuesta, que es más o menos mi diseño final, use CAN PHY para enviar el protocolo I2C. NXP tiene un chip que divide el bus I2C en dos pares de líneas UART, que a su vez se pueden transportar a través de CAN PHY como dos pares diferenciales. Este diseño existe incluso en NXP AN.
@OlinLathrop La interfaz consta de solo tres chips (siete si se requieren optoacopladores, solo cierto en el lado Pi que no tiene restricciones de tamaño), por lo que esto hace que sea un dispositivo esclavo de 4 chips extremadamente pequeño.

I2C no es el camino a seguir. Los transceptores CAN cuestan un dólar cada uno, y puede usarlos como transceptores uart y escribir su propio protocolo para que no necesite un micro compatible con latas si no desea usar la pila completa de latas.

Siempre me siento un poco incómodo cuando veo que los conductores cat5 funcionan en paralelo para obtener más corriente. Me molesta porque si un conductor se rompe, el otro transportará la corriente completa del sistema. Las clasificaciones actuales de cat5 son muy conservadoras, por lo que las probabilidades de un incendio son bastante bajas, pero no me gusta la posibilidad.

La forma segura de hacerlo es tener un polifusible en ambos rieles de alimentación y unir las tierras en el suministro, y conectar cada dispositivo a un solo conjunto de alimentación/tierra. De esa manera, si un cable falla, los dispositivos que usan esa línea pierden energía en lugar de que una línea se vea obligada a transportar la energía de dos.

A mucha gente le gusta poner energía y tierra en ambos pares trenzados por razones de EMI en lugar de tener un par de energía y un par de tierra. Si tiene dos pares de alimentación/tierra, la línea de alimentación estará más cerca de tierra y los campos se cancelarán, lo que reducirá las ondas de radio transmitidas o recibidas de las líneas de alimentación. Innecesario, pero agradable si hay mucho ruido eléctrico zumbando.

En mi opinión, 12 V es demasiado bajo para la distribución de energía cuando 24 V todavía es razonablemente seguro y mucho más eficiente.

Mi solución se basa de alguna manera en eso. Uso el chip divisor NXP para dividir el bus I2C en un par de Tx/Rx (tanto SDA como SCL) y multiplexarlos como UART usando chips de interfaz CAN. Esto me da dos pares trenzados que transportan líneas I2C SDA y SCL, conectados a Cat5e TIA/EIA568B pines 1/2 y 3/6.
Eso también debería funcionar, el único problema es que necesita su chip NXP, dos transceptores de latas y su chip de E / S i2c real. Son cinco chips por placa, y la última vez que verifiqué que el chip NXP era más caro que en atmega328, pero eso podría haber cambiado. Funcionará y la programación será simple porque es i2c, pero usar UART sobre CAN es más económico por un poco más de trabajo.
La placa de interfaz Pi-side tiene 7 chips: búfer/divisor NXP I2C, dos CAN PHY y cuatro optoaisladores. El lado del dispositivo es un módulo de 4 chips: búfer/divisor NXP I2C, dos CAN PHY y el PCF8574/8591.
Encontré un optoacoplador de 4 canales que reducirá el circuito del lado Pi a un módulo de 4 chips.
Replanteé los pines de alimentación, me atengo a mi diseño original, usando un par de alimentación y un par de tierra. Eso es compatible con 802.3af aunque redefiní los pines de señal a SCL y SDA.

Si la automatización es simplemente encender y apagar las cosas en la casa, lo simplificaría así:

  • Mantener todos los "cerebros" en un solo lugar. Use expansores de E/S I2C si es necesario, pero manténgalos todos con la frambuesa pi. También necesitará el hardware apropiado para asegurarse de que no está tratando de obtener demasiada corriente de los pines GPIO de la pi.
  • Use los cables de ethernet para simplemente controlar los relés. Puede construir su propia placa u obtener relés de estado sólido de 120/240 V montables en panel que se montarán en una caja eléctrica. Los hilos de los cables Ethernet Cat5 pueden manejar hasta 50 V a 320 mA cada uno, lo que es más que suficiente para controlar un relé. De hecho, podría controlar 7 relés desde un solo cable (más un cable para conexión a tierra). O deje un cable para una salida de 12 V sin interruptor, para que también pueda instalar un interruptor manual. Si son carreras realmente largas, es posible que deba tener en cuenta la caída de voltaje, pero puede obtener relés que cambiarán a 3-32V. 12V debería ser más que suficiente, incluso con caída de voltaje.
  • También querrá consultar los códigos de construcción locales para obtener consejos sobre cómo mezclar cables de alto y bajo voltaje en la misma caja.
  • Los interruptores simples también se pueden hacer a través de los cables de ethernet, nuevamente hasta 7 por cable, y simplemente se conectan a las entradas de la pi. La caída de voltaje puede ser una preocupación para cables realmente largos.
  • También es posible que desee utilizar optoaisladores para proteger el pi de daños.
  • Para los pocos dispositivos que necesitan más que un relé (como un panel de control), use los cables de Ethernet como Ethernet real. No debería ser un gran gasto si no hay muchos de estos dispositivos. Podrían ser otro pi o un microcontrolador con ethernet.
No estoy exactamente seguro de cuáles serán las necesidades de mis usuarios finales. Está de mal humor y cambia de opinión muy rápido. Tendré que ser capaz de responder lo suficientemente rápido. Es por eso que se usa algún tipo de protocolo básico (I2C aquí) a través del cable.

esquemático

simular este circuito : esquema creado con CircuitLab

¡EUREKA! ¡Lo averigué! (no probado, lo probaré este fin de semana)

Los chips de interfaz son el búfer/divisor NXP P82B96 I2C y 2 chips de interfaz de bus CAN TI SN65HVD251P. Esencialmente, estoy ejecutando I2C en CAN PHY.

P82B96 entiende el protocolo I2C y maneja el arbitraje de bus por mí, y me da pines Tx y Rx separados que se pueden unir. Los introduzco en el transceptor CAN SN65HVD251P y me da el par diferencial bidireccional para enviar por cables.

Los pines de alimentación vienen directamente, sin búfer, del riel de 5V de mi Pi. (No usaré voltaje y potencia de señalización de 12 V por un tiempo)

Lo siento, pero no. Lo que le permitirá hacer es conectar dos unidades I2C a cierta distancia entre sí. No te permitirá conectar más de 2.
@WhatRoughBeast Lo busqué en la documentación de NXP y dice que esta es una solución viable (y de alguna manera llegó a su AN), pero para mí, un punto a punto está bien ya que mi diseño en sí mismo está pidiendo uno. par de unidades de conversión por segmento Cat5e.
CAN es cableado o bidireccional como i2c. No veo ninguna razón por la que esto no debería funcionar con tantos dispositivos como quieras en el bus. He visto la aplicación notr que menciona. Parece describir un autobús, no un punto a punto.
@WhatRoughBeast: CAN es multipunto, no he mirado muy de cerca lo que está haciendo el OP, pero debería ser teóricamente posible.

Independientemente de los méritos de IIC a nivel de chip, su implementación propuesta será muy difícil. El problema es el arbitraje de autobuses. Aunque se pueden conectar en paralelo varias unidades usando, por ejemplo, RS485, la gran pregunta será:

¿Cómo sabe cualquier unidad si puede tomar el control del bus para enviar datos?

En IIC, con líneas de señal de drenaje abierto, la transferencia bidireccional es fácil, pero con los buses tri-state necesita alguna forma de asegurarse de que solo una unidad intente conducir el bus a la vez. Esto será complicado. Puede hacerlo, especialmente si establece un solo maestro y requiere que todos los esclavos tengan restricciones de tiempo rígidas para enviar datos, y que solo envíen datos si el maestro lo solicita, pero esto requerirá un esfuerzo considerable de su parte en el diseño del tarjetas de interfaz para el maestro y los esclavos.

En cuanto a los controladores/receptores físicos, RS485 le irá bien y hay muchos chips de interfaz disponibles. Solo Google.

No sé si está interesado en una solución prefabricada en lugar de construir su propio circuito, pero pensé en señalar que Pololu vende estas placas extensoras diferenciales de larga distancia I²C fabricadas por SJTbits, que parecen hacer casi exactamente Que estas buscando. (Divulgación completa: trabajo para Pololu).

Incluso si no desea usarlo directamente, tal vez mirar el circuito que usa podría darle algunas ideas. Puede ver el esquema en la hoja de datos; utiliza un búfer NXP PCA9600D, un controlador de línea diferencial TI AM26LS31CDR y un receptor de línea diferencial TI AM26LS32ACDR.

Esto no funciona para mí. Necesito enviar tanto la señal del bus como la alimentación a través de los cables.

Sé que esto es un poco antiguo y parece que se ha encontrado una solución en algún lugar entre las respuestas, pero tenía esta sugerencia para ofrecer. Hay dispositivos como el PCA9614/5/6 de NXP que estoy considerando en este momento como una solución para un bus I2C de larga distancia más sólido (búfer de bus I2C diferencial PCA9614 de 2 canales multipunto de modo rápido Plus) . Esencialmente, es cierto que se está convirtiendo en algo más que el verdadero I2C, pero en los extremos del bus es invisible para los dispositivos. Esta familia en particular traduce las señales en 2 pares diferenciales bidireccionales, y también hay dispositivos similares, como ya se mencionó en los comentarios, que se traducen en 4 pares diferenciales unidireccionales. Traducir a solo 2 pares le permite usar un cable CAT y aún tener 2 pares para alimentación/tierra.

¡Pulgares hacia arriba! Actualmente estoy tratando de resolver más o menos el mismo problema. También estoy tratando de usar I2C sobre cat5 para la automatización del hogar con mi pinout personalizado. La razón es el costo, quiero que sea muy rentable y que los componentes I2C sean al menos 5 veces más baratos que incluso attiny13 uC (se requiere AFAIU uC para CAN y RS485).

1) ¡Actualmente estoy en un proceso de prueba para la primera parte de un sistema y ahora tengo éxito con un cable de 15 m de largo con 5 V y conexión directa SCL y SDA! Uso PCF8574 y 2 relés para activar las luces de mi habitación. Pinout es

1
2 INT
3 +5V
4 SCL
5 SDA
6 GND
7
8

2) Entiendo que no va a permitir un par de relés más o 10 metros extra... Una caída de tensión es significativa (de 5,5 a 4,7). Entonces, para el problema de la caída de voltaje, voy a poner 12 V en una línea y agregar reguladores de voltaje de 5 V en las placas para mantener un voltaje fino en todas partes, independientemente de la caída de toda la línea. Pondré fuentes de alimentación adicionales durante las líneas futuras de todos modos.

3) La señal en sí se puede mejorar usando P82B96 o P82B715 barato sin dividirse en líneas diferenciales. Un NXP en sí usa Cat5 en algunas presentaciones, pero no puedo encontrar su pinout. Una parte importante aquí es que claramente usan líneas de señal en diferentes pares... por ejemplo, un par es GND+SDA y el otro es VCC+SCL.

4) Otro punto interesante: estos amortiguadores pueden simplemente elevar una amplitud hasta 12 V para aumentar la resistencia al ruido. Entonces, probablemente intentaré poner 12V en las líneas de señal también y eso debería permitir poner pullups directamente desde un cable de 12V... Pero eso me obligará a poner algo como P82B96 en cada dispositivo.

Como habrás notado, también uso una línea de interrupción separada... El maestro está actualmente en una placa arduino conectada a la PC. El software maestro principal estará en una PC 24x7 de todos modos, por lo que arduino solo traduce la señal y maneja la interrupción. Puedo enviar una configuración específica para el manejo de interrupciones a bordo, por ejemplo, para manejar el cambio de interruptor conveniente a través de la interrupción... Eso me permite olvidarme de cualquier retraso al cambiar la luz manualmente. El manejo de interrupciones es una ventaja adicional de i2c.

Así que mi idea es que I2C es lo suficientemente simple como para ser aplicable en <=100 m de cableado de apartamentos urbanos. En lugar de ir a la señal diferencial, espero poder reducir la frecuencia adicional.

Me gusta su idea de poner tanto 5V como 12V ya que esto reduce la necesidad de reguladores y reduce el costo... toda la idea del bus de cables múltiples para reducir el costo de los puntos finales, también consideraré esto para el nuevo pinout :)

Este es más un comentario extenso sobre la pregunta que una respuesta, ya que su situación no es la misma que la del OP: hardware maestro diferente, esquema de señalización diferente. Pero está lo suficientemente relacionado como para dejarlo así.