Problem with I2C

Hello everyone

I have 2 Arduino Nano 33 BLE.
one model is BLE sense and one model is just BLE.

I uploaded the same code on both devices which was a simple example of the configuration of MAX30102 by using Arduino.

The BLE sense model runs code properly and receives data from MAX through I2C (SDL, SCL). but the BLE model could not receive any data and shows "Sensor not found".
I check all the connections and they are the same.

my code is:

#include <MAX3010x.h>

MAX30102::MultiLedConfiguration cfg = {
  MAX30102::SLOT_RED, 
  MAX30102::SLOT_IR, 
};
MAX30102 sensor;

void setup() {
  Serial.begin(115200);
  while(!Serial);
  if(sensor.begin()) { 
    sensor.setMultiLedConfiguration(cfg);
    sensor.setMode(MAX30102::MODE_MULTI_LED);
    Serial.println("Slot1,Slot2");
  }
  else {
    Serial.println("Sensor not found");  
    while(1);
  }  
}

void loop() {
  auto sample = sensor.readSample(1000);
  Serial.print(sample.slot[0]);
  Serial.print(",");
  Serial.print(sample.slot[1]);
  Serial.println();
}

Could anyone help me?

Should they be the same? Double check the I2C connection pins on both MCU boards, and test connections for continuity.

Always test I2C connections by running the I2C Address Scanner program and make sure that all of the expected I2C addresses appear.

1 Like

Can you post an annotated schematic showing your pull up resistors and all power and ground connections? Also show the power supplies.

I attached the schematic. Power supply of Arduino board is USB type.

Can you run a I2C Scanner sketch with Wire1 ?

thanks for your reply.

I ran this sketch (I2C Address Scanner):

// --------------------------------------
// i2c_scanner
//
// Modified from https://playground.arduino.cc/Main/I2cScanner/
// --------------------------------------

#include <Wire.h>

// Set I2C bus to use: Wire, Wire1, etc.
#define WIRE Wire

void setup() {
  WIRE.begin();

  Serial.begin(9600);
  while (!Serial)
     delay(10);
  Serial.println("\nI2C Scanner");
}


void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    WIRE.beginTransmission(address);
    error = WIRE.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

the result for BLE sense model is :

and the result for BLE model is "
image

I did double check the connection and they are correct.

thanks for your reply
I ran the upper sketch and changing to Wire1.

the result for BLE sense is:

and the result for BLE model is:

now how can I fix the problem?

Are you using the Sparkfun MAX3010x library ? https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library

Then the "Wire" is the default and you can select "Wire1" with: sensor.begin(Wire1);

I2C address 0x57 is showing at the first I2C bus on the BLE Sense, and you already have that working.
But why is the 0x57 not showing for the BLE, neither on the first or the second I2C bus ?
Can you check the voltages ? Some boards have a "dummy" 5V pin. Can you check the wiring once more ?

I'm wondering how is it possible because these boards are very similar .
the voltages of supply and GND are correct.
for the BLE model SDA voltage is 1.33 and SCL voltage is 1.91. for BLE sense model the voltages fluctuate.
is there any way to address 0x57?
how can I address I2C?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.