i2c bus with duplicate IDs... best way forward?

My project (a "creative" USB controller) is starting to get complicated. I will need 2 duinos with HID capability (one is using Keyboard.h, the other Joystick.h), so either 2 Leos or a Leo plus a Micro... and two of my inputs are the oldie but goodie wiichuck. The wiichuck speaks i2c which is handy, but afaik every wiichuck has the same i2c address, hardwired.

It sounds like (from what I have read) there is no way to implement a hierarchical i2c bus -- you can have 1 master, N slaves, you can even have N masters, but you can't hide duplicate addresses -- it's a flat architecture.

Failing that, I guess I could use a shift reg or mux to scan the two chucks serially from one duino, but I'm a little worried about the timing (need to find out how many ms are lost in the scanning operation, chance of losing a button press etc). And as a relative n00b I confess I'm a little intimidated by muxing.

I've also considered using i2c between the duinos and the chucks, one chuck per duino so no address conflict -- and then "some other protocol" not i2c (here a miracle occurs?) between the duinos, to exchange the very small amount of shared data required.

for example, could 2 duinos share a shift reg and use it as a "post box" for one to pick up values written by the other? or is that (sigh) just as complicated as using the shift reg between duino and chucks? it seemed to me it might be faster than repeating the whole chuck scan operation on one duino.

I'm sure I can bumble my way to an answer empirically, but at the moment would rather spend my bench time making progress towards the end result :slight_smile: a little guidance would be appreciated, so I don't waste a lot of time exploring dead ends, reinventing square wheels etc... so far what I have read points me towards muxes and shift registers, but I'm wondering if there are any other options, "best practise," etc.

Maybe this.


how did I miss that? I knew someone had to have solved this problem... and hey, they have.

somehow in my various google expeditions I never found that board. thanks for saving me from my own inadequate research :slight_smile: