BLYNK
BLYNK.IO       📲 GETTING STARTED       📗 DOCS       👉 SKETCH BUILDER

How can I run my loop faster with Blynk.run?

I’m creating an IoT Oximeter. I run my code without Blynk, and my loop runs as fast as possible then, when I implement Blynk, my loop runs slow. I’m using MAX30102 sensor. This gives an inaccurate reading from the sensor. Is there anything that I can improve in the code? Here is my code:


/* Fill-in your Template ID (only if using Blynk.Cloud) */
//#define BLYNK_TEMPLATE_ID   "YourTemplateID"


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#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;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "*";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "*";
char pass[] = "*";

BlynkTimer timer;

void setup()
{
  // Debug console
  Serial.begin(9600);
  Serial.println("Initializing...");

  Blynk.begin(auth, ssid, pass);
  

  // 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

  timer.setInterval(1L, sensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

void sensor()
{
  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);
  Blynk.virtualWrite(V1,beatAvg);

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

  Serial.println();
 
}

I’d suggest that you read this topic…

Pete.