Skip to main content

IOT Based Heart Rate And SpO2 Tracker With NodeMCU MAX30100 And Blynk Application With Code Diagram



Circuit Diagram:
SCL PIN - D1 , SDA PIN - D2 , INT PIN - D0




Code:

#include <Wire.h>

#include "MAX30100_PulseOximeter.h"

#define BLYNK_PRINT Serial

#include <Blynk.h>

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include "Adafruit_GFX.h"

#include "OakOLED.h"


#define REPORTING_PERIOD_MS 1000

OakOLED oled;


char auth[] = "*********************";             // Authentication Token Sent by Blynk

char ssid[] = "********************";        //WiFi SSID

char pass[] = "*********************";        //WiFi Password


// Connections : SCL PIN - D1 , SDA PIN - D2 , INT PIN - D0

PulseOximeter pox;


float BPM, SpO2;

uint32_t tsLastReport = 0;


const unsigned char bitmap [] PROGMEM =

{

  0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x18, 0x00, 0x0f, 0xe0, 0x7f, 0x00, 0x3f, 0xf9, 0xff, 0xc0,

  0x7f, 0xf9, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xf0,

  0xff, 0xf7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0x7f, 0xdb, 0xff, 0xe0,

  0x7f, 0x9b, 0xff, 0xe0, 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0xf9, 0x9f, 0xc0, 0x3f, 0xfd, 0xbf, 0xc0,

  0x1f, 0xfd, 0xbf, 0x80, 0x0f, 0xfd, 0x7f, 0x00, 0x07, 0xfe, 0x7e, 0x00, 0x03, 0xfe, 0xfc, 0x00,

  0x01, 0xff, 0xf8, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00,

  0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};


void onBeatDetected()

{

  Serial.println("Beat Detected!");

  oled.drawBitmap( 60, 20, bitmap, 28, 28, 1);

  oled.display();

}


void setup()

{

  Serial.begin(115200);

  oled.begin();

  oled.clearDisplay();

  oled.setTextSize(1);

  oled.setTextColor(1);

  oled.setCursor(0, 0);


  oled.println("Initializing pulse oximeter..");

  oled.display();


  pinMode(16, OUTPUT);

  Blynk.begin(auth, ssid, pass);


  Serial.print("Initializing Pulse Oximeter..");


  if (!pox.begin())

  {

    Serial.println("FAILED");

    oled.clearDisplay();

    oled.setTextSize(1);

    oled.setTextColor(1);

    oled.setCursor(0, 0);

    oled.println("FAILED");

    oled.display();

    for (;;);

  }

  else

  {

    oled.clearDisplay();

    oled.setTextSize(1);

    oled.setTextColor(1);

    oled.setCursor(0, 0);

    oled.println("SUCCESS");

    oled.display();

    Serial.println("SUCCESS");

    pox.setOnBeatDetectedCallback(onBeatDetected);

  }


  // The default current for the IR LED is 50mA and it could be changed by uncommenting the following line.

  //pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);


}


void loop()

{

  pox.update();

  Blynk.run();


  BPM = pox.getHeartRate();

  SpO2 = pox.getSpO2();

      if (millis() - tsLastReport > REPORTING_PERIOD_MS)

  {

    Serial.print("Heart rate:");

    Serial.print(BPM);

    Serial.print(" SpO2:");

    Serial.print(SpO2);

    Serial.println(" %");


    Blynk.virtualWrite(V1, BPM);

    Blynk.virtualWrite(V2, SpO2);

    

    oled.clearDisplay();

    oled.setTextSize(1);

    oled.setTextColor(1);

    oled.setCursor(0, 16);

    oled.println(pox.getHeartRate());


    oled.setTextSize(1);

    oled.setTextColor(1);

    oled.setCursor(0, 0);

    oled.println("Heart BPM");


    oled.setTextSize(1);

    oled.setTextColor(1);

    oled.setCursor(0, 30);

    oled.println("Spo2");


    oled.setTextSize(1);

    oled.setTextColor(1);

    oled.setCursor(0, 45);

    oled.println(pox.getSpO2());

    oled.display();


    tsLastReport = millis();

  }

}


Comments

  1. Hi, I followed the steps that you show, however i cannot obtain the connection of esp8266 with blynk, just the lcd can show the reading, can you give me some guidance, thank you so much

    ReplyDelete
    Replies
    1. ->Check Whether The ESP8266 Is Connected To Your Wi-Fi, In Wi-Fi
      Configuration Page.
      ->Check Whether The SSID And Password Is Coded Correct.
      ->Check Whether The Authentication Code Sent From Blynk Is Pasted Correct
      In Your Code.
      ->Check In Serial Monitor Whether The Blynk Is Connected With IP Address.
      ->Don't Limit The Number Of Connected Device In Our Wi-Fi.

      And Finally Hope You Can Connect Blynk With ESP8266!

      Delete
  2. Help us by work the project app with new updated app

    ReplyDelete

Post a Comment

Popular posts from this blog

How To Make Wi-Fi Car With NodeMCU| NodeMCU Projects| Topped With Fun

Circuit Diagram:  Code: #define ENA   14           // Enable/speed motors Right        GPIO14(D5) #define ENB   12            // Enable/speed motors Left         GPIO12(D6) #define IN_1  15            // L298N in1 motors Right           GPIO15(D8) #define IN_2  13            // L298N in2 motors Right           GPIO13(D7) #define IN_3  2             // L298N in3 motors Left            GPIO2(D4) #define IN_4  0             // L298N in4 motors Left            GPIO0(D3) #include <ESP8266WiFi.h> #include <WiFiClient.h>  #include <ESP8266WebServer.h> String command;  ...

How To Make A Self Balancing Car With MPU-6050| Arduino Uno Projects| Topped With Fun |MPU-6050

Library Download Link: https://drive.google.com/drive/folders/1d5Dg7tuMVFh8FhXe-vtYRD3qvV5eomoy?usp=sharing Circuit Diagram: Code: #include <PID_v1.h> #include <LMotorController.h> #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 30 MPU6050 mpu; // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer // orientation/motion vars Quaternion q; // [w, x, y, z] quaternion container VectorFloat gravity; // [x, y, z] gravity vector float ypr[3]; // [yaw, pitch, roll] yaw/p...