MAX30100, MPU 6050, ESP32 Project

I am using max30100 as heart rate sensor and mpu6050 as 3 axis accelerometer. Both sensors are working separately but as i merged the code for both and tried to save data in firebase, MPU6050 was working properly wheres MAX30100 was successfully initialised but giving output as 0 everytime.
Please help me in this issue.

#include <math.h>
#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include "addons/TokenHelper.h" //Provide the token generation process info.
#include "addons/RTDBHelper.h"  //Provide the RTDB payload printing info and other helper functions.
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>

#define SDA_2 33
#define SCL_2 32


#define POX_REPORTING_PERIOD_MS  1000
#define WIFI_SSID "iPhone 13 Pro"
#define WIFI_PASSWORD "password"
#define API_KEY "AIzaSyAlYbgA4MNsmk2qWLS1t3xLeVYA12gUH5YDS" // Insert Firebase project API Key
#define DATABASE_URL "https://sleep-tracker-cDff8f-default-rtdb.firebaseio.com/" // Insert RTDB URLefine the RTDB URL */
#define USER_EMAIL "email@gmail.com"
#define USER_PASSWORD "email@2019"

FirebaseData FirebaseData;  //Firebase data object
FirebaseAuth auth;  //Firebase authentication object
FirebaseConfig config;  //Firebase configuration object
FirebaseJson json;

TaskHandle_t PostToFirebase;
bool signupOK = true;


// Start Function Declaration
void SendReadingsToFirebase();
void InitializeWifi();
void SignUpToFirebase();
void InitializePOX();
// End Function Declaration


PulseOximeter pox;  
TaskHandle_t GetReadings;
uint8_t _spo2;
uint8_t _heartRate;

uint32_t poxLastReport = 0;
uint32_t prevMillis = 0;

Adafruit_MPU6050 mpu;
//TaskHandle_t GetAReadings;


void setup() {
  
  Serial.begin(115200); //Begin serial communication

  Wire.begin();
  Wire1.begin(SDA_2, SCL_2);

  InitializeWifi();

  SignUpToFirebase();

  InitializeSensors();

  xTaskCreatePinnedToCore(SensorReadings, "GetReadings", 2000, NULL, 1, &GetReadings, 0);
  //xTaskCreatePinnedToCore(ASensorReadings, "GetAReadings", 1724, NULL, 0, &GetAReadings, 0);
  
  xTaskCreatePinnedToCore(SendReadingsToFirebase, "PostToFirebase", 6268, NULL, 0, &PostToFirebase, 1);
}

//void ASensorReadings(void * parameter)
//{
  //for(;;)
  //{
  //sensors_event_t a, g, temp;
  //mpu.getEvent(&a, &g, &temp);
  //Serial.print("Acceleration X: ");
  //Serial.print(a.acceleration.x);
  //Serial.print(", Y: ");
  //Serial.print(a.acceleration.y);
  //Serial.print(", Z: ");
  //Serial.print(a.acceleration.z);
  //Serial.println(" m/s^2");
  
  //Serial.print("Rotation X: ");
  //Serial.print(g.gyro.x);
  //Serial.print(", Y: ");
  //Serial.print(g.gyro.y);
  //Serial.print(", Z: ");
  //Serial.print(g.gyro.z);
  //Serial.println(" rad/s");
  
  //Serial.print("Temperature: ");
  //Serial.print(temp.temperature);
  //Serial.println(" degC");
  //Serial.println("");
  //delay(10000);
  //}
//}



void SensorReadings(void * parameter)
{
  for(;;)
  {
    // Read from the sensor
    
    pox.update();
      
    if (millis() - poxLastReport > POX_REPORTING_PERIOD_MS) {
      _heartRate = round(pox.getHeartRate());
      _spo2 = round(pox.getSpO2());
    
      Serial.print("Heart rate:");  
      Serial.print(_heartRate);
      Serial.print("bpm / SpO2:");
      Serial.print(_spo2);
      Serial.println("%");
  //mpu.reset();
      delay(5000);

    sensors_event_t a, g, temp;
    mpu.getEvent(&a, &g, &temp);
    Serial.print("Acceleration X: ");
    Serial.print(a.acceleration.x);
    
      poxLastReport = millis();
    }
    // Memory Sizing
    //if (millis() - prevMillis > 6000)
    //{
      //unsigned long remainingStack = uxTaskGetStackHighWaterMark(NULL);
     //Serial.print("Free stack: ");
      //Serial.print(remainingStack);
      //prevMillis = millis();
    //}
    // End Memory Sizing
    }
}

void SendReadingsToFirebase(void * parameter)
{
//  Serial.printf("working");
  for(;;)
  {
    if (Firebase.ready() && signupOK){
    Serial.printf("", Firebase.RTDB.setInt(&FirebaseData, F("/test/BP"), _heartRate) ? "ok" : FirebaseData.errorReason().c_str());

    Serial.printf("", Firebase.RTDB.getInt(&FirebaseData, F("/test/BP")) ? String(FirebaseData.to<int>()).c_str() : FirebaseData.errorReason().c_str());

    Serial.printf("", Firebase.RTDB.setInt(&FirebaseData, F("/test/SpO2"), _spo2) ? "ok" : FirebaseData.errorReason().c_str());

    Serial.printf("", Firebase.RTDB.getInt(&FirebaseData, F("/test/SpO2")) ? String(FirebaseData.to<int>()).c_str() : FirebaseData.errorReason().c_str());

      
      
    }
  }
}

void InitializeWifi()
{
  // Wifi Initialize ...
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(300);
  }
  
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();
}

void SignUpToFirebase()
{
  /* Assign the api key (required) */
  config.api_key = API_KEY;

  /* Assign the RTDB URL (required) */
  config.database_url = DATABASE_URL;

  auth.user.email = USER_EMAIL;
  auth.user.password = USER_PASSWORD;

  /* Sign up */
  
  /* Assign the callback function for the long running token generation task */
  config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
  
  Firebase.begin(&config, &auth);
  Firebase.reconnectWiFi(true);
}

void InitializeSensors()
{
  Serial.print("Initializing pulse oximeter..");

  // Initialize sensor
  if (!pox.begin()) {
    Serial.println("FAILED");
    for(;;);
  } else {
    Serial.println("SUCCESS");
  }

  // Configure sensor to use 7.6mA for LED drive
  //pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

  //Serial.println("Adafruit MPU6050 test!");

  // Try to initialize!
  if (!mpu.begin(0x68,&Wire1)) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
    //Serial.println("+-2G");
    break;
  case MPU6050_RANGE_4_G:
    //Serial.println("+-4G");
    break;
  case MPU6050_RANGE_8_G:
    //Serial.println("+-8G");
    break;
  case MPU6050_RANGE_16_G:
    //Serial.println("+-16G");
    break;
  }
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
    //Serial.println("+- 250 deg/s");
    break;
  case MPU6050_RANGE_500_DEG:
    //Serial.println("+- 500 deg/s");
    break;
  case MPU6050_RANGE_1000_DEG:
    //Serial.println("+- 1000 deg/s");
    break;
  case MPU6050_RANGE_2000_DEG:
    //Serial.println("+- 2000 deg/s");
    break;
  }

  mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
    //Serial.println("260 Hz");
    break;
  case MPU6050_BAND_184_HZ:
    //Serial.println("184 Hz");
    break;
  case MPU6050_BAND_94_HZ:
    //Serial.println("94 Hz");
    break;
  case MPU6050_BAND_44_HZ:
    //Serial.println("44 Hz");
    break;
  case MPU6050_BAND_21_HZ:
    //Serial.println("21 Hz");
    break;
  case MPU6050_BAND_10_HZ:
    //Serial.println("10 Hz");
    break;
  case MPU6050_BAND_5_HZ:
    //Serial.println("5 Hz");
    break;
  }

}

void loop()
{
  delay(1);  
}

Your topic has been moved to a more suitable location on the forum. Introductory Tutorials is for tutorials that e.g. you write, not for questions. Feel free to write a tutorial once you have solved your problem :wink:

Your problem has been seen here in the past. Try Google on the 3 major parts involved.

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