I have a project that requires to do I²C/I2C/TWI over a long distance (30 to 40 meters).
I've seen some people suggesting lowering the clock-rate to somewhere around 500 Hz, to mitigate the effects of the capacitance of such a long line I assume? The components I'm using require at least the standard 100 kHz clock-rate. I did some further research and found among answers to another question a suggestion to use a P82B96 level shifter. In the datasheet they give examples of using them on lines of even 100 meters:
I've come across another way of shifting levels through a breakout board from adafruit, which is just a mosfet (bss138) with two pull-up resistors (one for each side/voltage). They got the idea from an application note from NXP (AN10441), and two of the channels on there could be used like this:
Now I wonder: which solution is best? Or is there something I have overlooked? And also, is 5V enough to ensure a good connection? Would there be an advantage to using an even higher voltage like 12V?