Multi-drop I²C using only Endpoints, no MidPoint

I needed to have a temperature/humidity sensor about 30’ away from an Arduino, and then a tilt and temperature sensor about 30’ even farther away. The SparkFun EndPoints were perfect for those distances but the MidPoint was not available at the time. I had hoped that two EndPoints could be connected “back-to-back” (through their QwiicBus connectors) but this does not work, likely because the clock signal is not passed through.

[Page 12 of the NXP PCA9615 datasheet shows that the twisted-pair differential bus can be used multi-drop, but the termination resistors should only be at the ends (the datasheet also shows that for UTP cable the termination resistors should be 120 Ω and 600 Ω rather than the 100 Ω and 390 Ω the EndPoint has, but at the low speed used this doesn’t matter much). So I removed SMT resistors R1 through R6, from the middle EndPoint, these are high-lighted in cyan on the attached photograph and shown on the SparkFun schematic diagram also attached.

I got a female 8P8C (“RJ45”) connector and soldered 1"-long wires between each of the corresponding pins of the female 8P8C connector on the middle EndPoint to the added female 8P8C connector.

I have attached a drawing showing my set-up. In my case there was only 4-wire “Quad” cable available for the connection from the middle EndPoint to the last location. As the differential bus uses one pair for the I²C clock and another pair for the I²C data, this was enough as I was able to get power for the last EndPoint in a separate cable.

I do not need to read my sensors quickly but I do need the reads to be accurate so I wanted to slow the I²C bus as much as possible. I could not get the Wire.setclock() to work so I editted the C:.…\PC\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src\utility\twi.h file (which is at C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\utility\twi.h in older IDEs) to have #define TWI_FREQ 30304 which is the slowest accepted for my Arduino UNO, and this reduces the clock speed from 100,000 Hz to 30,410 Hz. The I²C communication is very reliable.](https://www.nxp.com/docs/en/data-sheet/PCA9615.pdf#page=12)

Power and I²C extension, 20230607.pdf (415 KB)

SparkFun_QwiicBus_Endpoint-Schematic.pdf (132 KB)

Neat! Excellent work