Red LED not working in GY-30102

I have a GY-30102 pulse sensor (link given below) connected to Arduino Uno.

https://probots.co.in/max30102-pulse-oximeter-heart-rate-sensor-module-gy-max30102.html

The connections are as below.

I used the below i2c scanner code and the sensor is detected at i2c address 0x57.

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for Serial Monitor
  Serial.println("\nI2C Scanner");
}

void loop() {
  int nDevices = 0;

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

  for (byte address = 1; address < 127; ++address) {
    // The i2c_scanner uses the return value of
    // the Wire.endTransmission to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    byte 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(1000); // Wait 5 seconds for next scan
}

I used the sparkfun code given below to run the sensor.

#include <Wire.h>
#include "MAX30105.h"

#include "heartRate.h"

MAX30105 particleSensor;

const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred

float beatsPerMinute;
int beatAvg;

void setup()
{
  Serial.begin(115200);
  Serial.println("Initializing...");

  // Initialize sensor
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
  {
    Serial.println("MAX30105 was not found. Please check wiring/power. ");
    while (1);
  }
  Serial.println("Place your index finger on the sensor with steady pressure.");

  particleSensor.setup(); //Configure sensor with default settings
  particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
  particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}

void loop()
{
  long irValue = particleSensor.getIR();

  if (checkForBeat(irValue) == true)
  {
    //We sensed a beat!
    long delta = millis() - lastBeat;
    lastBeat = millis();

    beatsPerMinute = 60 / (delta / 1000.0);

    if (beatsPerMinute < 255 && beatsPerMinute > 20)
    {
      rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
      rateSpot %= RATE_SIZE; //Wrap variable

      //Take average of readings
      beatAvg = 0;
      for (byte x = 0 ; x < RATE_SIZE ; x++)
        beatAvg += rates[x];
      beatAvg /= RATE_SIZE;
    }
  }

  Serial.print("IR=");
  Serial.print(irValue);
  Serial.print(", BPM=");
  Serial.print(beatsPerMinute);
  Serial.print(", Avg BPM=");
  Serial.print(beatAvg);

  if (irValue < 50000)
    Serial.print(" No finger?");

  Serial.println();
}

The code uploaded successfully and the sensor was initialized without any error. But the red LED in the sensor didn't glow and hence the "No finger?" message came up even after placing the finger on the sensor. Is it possible that I got a defective chip with a non working LED?

  particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
  particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED

0x0A is a pretty low brightness. Have you tried increasing that, for example to 0xFF? Or turning up the green led?

Tried both the suggestions, but still the same result.

Are there any other example sketches you could try? If you try 3 or 4 example sketches, perhaps not all from Sparkfun, and none of them work, perhaps you do have a faulty unit.

Yes. I have already tried other sketches before trying sparkfun, but they failed even to initialize the sensor. Only sparkfun initialized the sensor successfully without any error. In the product page of the sensor it is mentioned that a level shifter should be used for 5v board like Uno. Will it make any difference?

If a level shifter made no difference, why would the vendor mention it on the product page?

NOTE: MAX30102

This sensor works on 3.3V Devices directly. You can connect it to 3.3V devices like ESP8266, ESP32, etc directly. To use it with the Arduino UNO, Mega, Nano, etc use a level shifter in between. Else the I2C connection will not work.

We have tested this sensor with this library - Max3010x Pulse and Proximity Sensor by SparkFun Electronics and it works perfectly.

This library can be installed in the Arduino IDE-->Manage Libraries

Github link for - Max3010x pulse and proximity sensor by SparkFun Electronics

I checked the vendor's product page again.

This image from the product page shows the back side of the module's PCB:
probots-gy-max30102-heart-rate-click-sensor-breakout-sensor-module-for-arduino-51983
The components seen here could be a voltage regulator and a couple of transistors for level shifting. I can't think what other purpose they serve. The vendor does not supply a schematic to allow us to confirm this.

If I am right, the vendors product page is misleading and inaccurate.

Exactly. That's what I thought when I saw the module. That is the reason I didn't add a level shifter in the first place. I received the same chip as shown in the vendors page.

Should I try connecting 5v pin to VIN of module? I don't want to fry the module and hence didn't try.

I don't know. The vendor's product page says 3.3V, so if you fry it you can't return it for refund.

Maybe you could look for other vendors offering the same product and see if their product pages have more or different information. Or must be the exact same design of board as the one you have.

I have checked with other vendors. Many of them mentioned a supply voltage of 3.3 -5v for the same module. Also, I used a level shifter (TXS0108E) to check for any change. The i2c scanner couldn't detect the module with a level shifter in the setup. I also checked the voltage at the SDA and SCL pins in the module (without the level shifter) and it hovered around 3.6v. I think the description given by the current vendor is wrong. Let me check with the vendor once before connecting it to the 5V pin. Just a doubt, what difference will it make for an LED between 3.3 and 5v?

The LEDs are part of the sensor package which includes the sensor chip. It's a 3.3V device and would be damaged by 5V.