Problem with communication between Arduino UNO and Teensy 3.1 via I2C

Hello and thank you for taking the time to read this. It’s probably a very simple mistake that I’m missing and I would be very grateful to anyone who could help me figure it out.

The project I’m working on involves multiple microcontrollers sending data they’re reading from various inputs between each other. I have it working without issues when said microcontrollers are both 5v devices ( 2 UNOs) but as soon as I replace one uC with a 3.3v device, a Teensy 3.1, I start running into problems. A transmission from the Teensy to the Arduino doesn’t cause either to freeze but the Arduino doesn’t appear to receive anything and after any following transmission from the Arduino to the Teensy both are frozen until reset.

I am using a logic level shifter to convert the 5v signal down to 3.3v for the teensy and vis versa. The logic level shifter I’m using is a “4-channel I2C-safe Bi-directional Logic Level Converter” from Adafruit (

I have 2 4.7kohm resistors on the 3.3v side of the converter, one across 3.3v and SDA and one across 3.3v and SCL.

All the information I’ve looked at seems to say that the logic level converter and the pull-up resistors are all that’s needed for communication between these devices to work.

I’ve put together the simplest code I could to recreate this problem. Here it is below:

#include <Wire.h>

#define Teensy 0x8
#define Ard 0x9

void setup() {


void loop() {
    Serial.println("Sending 10...");

void receiveEvent(int howMany){
  while (Wire.available() > 0){
    int b =;

The code is the same on both devices with the only differences being that the addresses are reversed, the second device delays 3.5 seconds rather than 2 and sends “20” rather than “10”

With both powered by USB and the Arduino IDE serial monitor open for both devices I see the Teesny printing it’s “Sending” message a couple of times then the Arduino printing it’s “Sending” message once, then nothing until both are reset. Neither of the uCs print what they’ve received at any time.

I’ve tried omitting the Serial.print from the receive event with no change and tried a couple different pull-up resistor values with no change as well.

I’ve attached a picture of the simple wiring I’m using with the code above to recreate the problem. The logic level converter in the image is not the one I’m using (although I do have that one lying around) although the wiring is almost identical (the pins are just in different places and the Sparkfun one in the image only has 2 bi-directional channels) and not displayed in the image is the fact that both are powered via USB to the laptop I’m using.

I’m stumped and additional searching isn’t getting me any further. Hopefully I’ve provided all the information necessary for someone to easily point out the dumb mistake I’m making. Any helpful response makes you a saint in my book.

Thank you for your time.