Para misturar hardware de diferentes tensões é necessário utilizar circuitos de level shift.

Na página do Arduino existe um esquema para ligar lógica de 3V3 em 5V.

http://www.hagtech.com/pdf/iic.pdf

Level shift de baixo custo e fácil de encontrar .

Os resistores devem ser maiores que 4,7k para manter a conformidade com a especificação I2C.

Para outras aplicações os resistores mais externos (pull-ups do I2C) não são necessários.

Os transistores podem ser trocados por qualquer um desses:

2N2222

2N3904

PN100

2N4401

BC337

BC546

As tensões das lógicas também podem ser modificadas, não precisa ficar preso em 3V3 e 5V.