Heart rate monitor keeps you informed and indeed helps you monitor your heart rate all the time with which you can protect yourself from being prone to heart attacks or any abnormal heart functionality.

Dependencies:   ESP8266 GroveEarbudSensor mbed

Fork of Heart-rate-monitor by Sarada Gajjala

main.cpp

Committer:
spriyanka
Date:
2017-05-04
Revision:
6:37829af7bfbd
Parent:
5:f1b55ff3cda0

File content as of revision 6:37829af7bfbd:

#include "mbed.h"
#include "ESP8266.h"
#include <string>
#include <stdio.h>
#include "GroveEarbudSensor.h"
#define APIKEY SJYFHXQEDBQ75N91    //Put "Write key" of your channel in thingspeak.com 
#define IP "184.106.153.149"       // IP Address of "api.thingspeak.com\"
#define WIFI_SSID "vivo 1601"
#define WIFI_PASS "bschitta"


char snd[255],rcv[1000],snd_Data[255];
float hrt;

ESP8266 esp(PTC17, PTC16, 115200); // baud rate for wifi
Serial pc(USBTX, USBRX);

// callback for receiving heartrate values 
void heartrateCallback(float heartrate,void *data) 
{
         printf("Callback: heartrate = %.1f\r\n",heartrate);
}  

// Blinky
DigitalOut led(LED1);

// Our sensor as an InterruptIn
InterruptIn sensor(D2);

GroveEarbudSensor earbud(&sensor); 

void esp_initialize(void);
void esp_send(void);

int main(void)
{   
pc.baud(115200);
    esp_initialize();
    
    // announce
    printf("Grove Earbud Sensor Example v1.0.0\r\n");
    
    // allocate the earbud sensor
    printf("Allocating earbud sensor instance...\r\n");
    
     // register our callback function     
     printf("registering callback...\r\n");     
     earbud.registerCallback(heartrateCallback); 
    
    // begin main loop
    printf("Beginning main loop...\r\n");
    while (true) 
    {
        // blink... 
        led = !led; 
        wait(1);
           
    // we can also call directly 
    printf("Direct: heartrate = %.1f\r\n", earbud.getHeartRate());
    
    esp_send();
    }
}

void esp_initialize(void)
{
    //AT+CWJAP="vivo 1601","bschitta" ;
    
    pc.printf("Initializing ESP\r\n");
    pc.printf("Reset ESP\r\n");
    esp.Reset();                   //RESET ESP
    esp.RcvReply(rcv, 400);        //receive a response from ESP
    wait(2);

    strcpy(snd,"AT");
    esp.SendCMD(snd);
    pc.printf(snd);
    esp.RcvReply(rcv, 400);
    pc.printf(rcv);
    wait(2);

    strcpy(snd,"AT+CWMODE=1");
    esp.SendCMD(snd);
    pc.printf(snd);
    wait(2);

    strcpy(snd,"AT+CWJAP=\"");
    strcat(snd,WIFI_SSID);
    strcat(snd,"\",\"");
    strcat(snd,WIFI_PASS);
    strcat(snd,"\"");

    esp.SendCMD(snd);
    pc.printf(snd);
    wait(5);
    esp.RcvReply(rcv, 400);
    pc.printf("\n %s \n", rcv);

    strcpy(snd,"AT+CIPMUX=1");
    esp.SendCMD(snd);
    pc.printf(snd);
    esp.RcvReply(rcv, 400);
    pc.printf("\n %s \n", rcv);
}

void esp_send(void)
{
    //ESP updates the Status of Thingspeak channel//

    strcpy(snd,"AT+CIPSTART=");
    strcat(snd,"\"TCP\",\"");
    strcat(snd,IP);
    strcat(snd,"\",80");

    esp.SendCMD(snd);
    pc.printf("Send\r\n%s",snd);
    esp.RcvReply(rcv, 1000);
    pc.printf("Receive\r\n%s",rcv);
    wait(2);

    hrt = earbud.getHeartRate();
    pc.printf("Sending this information to thingspeak.com \r\n");
    sprintf(snd,"GET https://api.thingspeak.com/update?api_key=SJYFHXQEDBQ75N91&field1=%f\r\n", hrt);
    //wait(5);
    //https://api.thingspeak.com/update?api_key=SJYFHXQEDBQ75N91&field1=%f\r\n", hrt

    int i=0;
    for(i=0; snd[i]!='\0'; i++);
    i++;
    char cmd[255];

    sprintf(cmd,"AT+CIPSEND=%d",i);           //Send Number of open connection and Characters to send
    esp.SendCMD(cmd);
    pc.printf("Send\r\n%s",cmd);
    while(i<=20 || rcv == ">")
    {
        esp.RcvReply(rcv, 1000);
        wait(100);
        i++;
    }
    pc.printf("Receive\r\n%s",rcv);

    esp.SendCMD(snd);       //Post value to thingspeak channel
    pc.printf("Send\r\n%s",snd);

    while(i<=20 || rcv == "OK") 
    {
        esp.RcvReply(rcv, 1000);
        wait(100);
        i++;
    }
    pc.printf("Receive\r\n%s",rcv);
    
}