Hardware Used: MAX30102, Voltage Sensor, Wemos D1 mini;
When I connect it to the blynk, the temp sensor, and voltage sensor works fine, But when the Hrate/ Pule rate gained value, the connection to the device were interrupted then the device becomes offline. Pleas help me. Thank you for your considerations and support.
Here is my code:
#include <Blynk.h>
#include <Wire.h>
#include "MAX30105.h"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "heartRate.h"
MAX30105 particleSensor;
#define BLYNK_TEMPLATE_ID "TMPLWcXSCwem"
#define BLYNK_DEVICE_NAME "DIoTSHCMTS"
#define BLYNK_AUTH_TOKEN "cF1__1FIx7TQvlqY0Oq8EyCRzFB5BN4F"
#define BLYNK_PRINT Serial
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;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "TP-Link_63B6";
char pass[] = "29649624";
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // resistance of R1 (100K) -see text!
float R2 = 10000.0; // resistance of R2 (10K) - see text!
int value = 0;
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass , "blynk.cloud", 80);
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
particleSensor.enableDIETEMPRDY(); //Enable the temp ready interrupt. This is required.
}
void loop()
{
long irValue = particleSensor.getIR();
long temperature = particleSensor.readTemperature();
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;
}
}
value = analogRead(analogInput);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (R2/(R1+R2));
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
Serial.print(" Temperature C = ");
Serial.print(temperature, 4);
Serial.print(" Voltage = ");
Serial.print(vin);
if (irValue < 50000)
Serial.print(" No finger?");
Serial.println();
Blynk.virtualWrite(V0,temperature);
Blynk.virtualWrite(V3,beatsPerMinute);
Blynk.virtualWrite(V2,vin);
}