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.