Bus or daisy chain communication over two wires without using the hardware I2C p

I’m trying to communicate data from four Arduino Unos to a fifth Arduino, however each one is connected to sensors on the hardware I2C pins. These sensors all have the same addresses, so simply putting all of the Arduinos and sensors on the same I2C bus isn’t an option. I need to be able to communicate to all of them via an interface that uses only two wires. The data rate required is low, only about 1 kbps.

My initial approach was to implement someone’s software I2C library (softI2CMaster or JeeLib) to bit-bang I2C using digital out pins, but I’ve been unable to find any examples of anyone using one of those libraries to set up an Arduino as a slave device using software I2C and it’s not obvious that such an application is supported by those libraries.

I’ve also considered a daisy-chain serial implementation using the UART pins, as described here http://geodesicsphere.blogspot.com/2012/12/daisy-chaining-serial-connections.html, which looks like the lead-best candidate at this point.

The third option I’ve considered is ditching Arduino to use an ATxmega that has two sets of I2C pins, but I’m reluctant to step outside of the Arduino framework unless I have to.

I’d be interested to see if there’s another approach I haven’t considered, or if there is a library out there that solves exactly this problem in some way. Also if anyone is aware of a software I2C library that supports setting up an Arduino as a slave device that could be a very simple way to accomplish this.


Maybe a Software I2C implementation like described here:


Or a bussed system using RS485, or software serial with TTL, or ...

How far apart are the boards and how fast is the data transmission?


Have you considered an I2C multiplexer?
For example: