MAX30102 Sensor not sending data to thingsboard.

Moderators: adafruit_support_bill, adafruit

Forum rules
If you're posting code, please make sure your code does not include your Adafruit IO Active Key or WiFi network credentials.
Locked
User avatar
LLAMAFTW01
 
Posts: 10
Joined: Wed Nov 30, 2022 8:05 am

MAX30102 Sensor not sending data to thingsboard.

Post by LLAMAFTW01 »

Hi, I'm having trouble with this I'm not sure if it's a code issue or a hardware issue, I am using a ESP32 and the sensors MAX3012, MPU6050 and a MLX90614. The issue I'm having is that when sending data to thingsboard the MAX30102 sensor is not showing data. But when I dont send data to thingsboard the sensor is working fine. I am out of ideas of what is going on.

Code: Select all

#include <WiFi.h>                   // include the Arduino WiFi library
#include <ThingsBoard.h>            // ThingsBoard SDK
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
#include <Adafruit_MLX90614.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <WiFiClientSecure.h>
#include <BANNED.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614(); //0x5A
Adafruit_MPU6050 mpu;                        //0x68
MAX30105 particleSensor;

const byte RATE_SIZE = 0; //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;
long beatAvg;

#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x]))))) // Helper macro to calculate array size
#define WIFI_AP_NAME        "Get your own Wifi"     // WiFi access point
#define WIFI_PASSWORD       "w1frjoyf00bar"         // WiFi password
#define TOKEN               "ESP32_Xian_Token"      // Device Token
#define THINGSBOARD_SERVER  "demo.thingsboard.io"   // ThingsBoard server instance.
#define REPORTING_PERIOD_MS  500
#define BOTtoken "5862827027:AAE7Glekx7EkSufrcL3mrjN56-vm6tjwB6c"  // your Bot Token (Get from Botfather)
#define CHAT_ID "1672688476"                                       // your Chat ID from IDBot

// Initialize ThingsBoard client
WiFiClient espClient;                               
ThingsBoard tb(espClient);

//declare wifi connection for Thingsboard and BANNED
WiFiClient client;                                 
WiFiClientSecure tlclient;
BANNED bot(BOTtoken, tlclient);
unsigned long lastSend;
int val;

int status = WL_IDLE_STATUS;  // the Wifi radio's status

void InitWiFi() {
  Serial.println("Connecting to AP ...");           // attempt to connect to WiFi network
  tlclient.setCACert(BANNED_CERTIFICATE_ROOT);    // Add root certificate for api.BANNED.org
  WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected to AP");
}

void reconnect() {
  // Loop until we're reconnected
  while (!tb.connected()) {
    Serial.print("Connecting to ThingsBoard ...");
    // Attempt to connect (clientId, username, password)
    if ( tb.connect(THINGSBOARD_SERVER, TOKEN) ) {
      Serial.println( "[DONE]" );
    } else {
      Serial.print( "[FAILED]" );
      Serial.println( " : retrying in 5 seconds" );
      delay( 5000 );
    }
  }
}

void setup() {
  Serial.begin(115600);
  WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);     // Connect to WiFi
  tb.connect(THINGSBOARD_SERVER, TOKEN);       // Connect to ThingsBoard
  InitWiFi();
  lastSend = 0;
  particleSensor.begin(Wire, I2C_SPEED_FAST);
  particleSensor.setup();
  particleSensor.setPulseAmplitudeRed(0x0A);   //Turn Red LED to low to indicate sensor is running
  particleSensor.setPulseAmplitudeGreen(0);    //Turn off Green LED
  mlx.begin();
  mpu.begin();
  bot.sendMessage(CHAT_ID, "Bot started up", "");

  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() {
  if ( !tb.connected() ) {
    reconnect();
  }  
  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;
    }
  }
  
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  if (irValue < 50000)
    Serial.println(" \nNo finger? ");

  Serial.print("Avg BPM = ");
  Serial.print(beatAvg);
  
  tb.sendTelemetryFloat("BPM", beatAvg);

  Serial.println(" ");
  Serial.print("Accelerometer X: ");
  Serial.print(a.acceleration.x, 1);
  Serial.print(" m/s^2\n");
  Serial.print("Accelerometer Y: ");
  Serial.print(a.acceleration.y, 1);
  Serial.print(" m/s^2\n");
  Serial.print("Accelerometer Z: ");
  Serial.print(a.acceleration.z, 1);
  Serial.println(" m/s^2");

  tb.sendTelemetryFloat("AccelX", a.acceleration.x);
  tb.sendTelemetryFloat("AccelY", a.acceleration.y);
  tb.sendTelemetryFloat("AccelZ", a.acceleration.z);

  Serial.print("Gyroscope ");
  Serial.print("X: ");
  Serial.print(g.gyro.x, 1);
  Serial.print(" rps\n");
  Serial.print("Gyroscope Y: ");
  Serial.print(g.gyro.y, 1);
  Serial.print(" rps\n");
  Serial.print("Gyroscope Z: ");
  Serial.print(g.gyro.z, 1);
  Serial.println(" rps");

  tb.sendTelemetryFloat("GyroX", g.gyro.x);
  tb.sendTelemetryFloat("GyroY", g.gyro.y);
  tb.sendTelemetryFloat("GyroZ", g.gyro.z);  

  Serial.print("Ambient = ");
  Serial.print(mlx.readAmbientTempC());
  Serial.print("*C\nObject = ");
  Serial.print(mlx.readObjectTempC());
  Serial.println("*C");

  tb.sendTelemetryFloat("Ambient Temp", mlx.readAmbientTempC());
  tb.sendTelemetryFloat("Body Temp", mlx.readObjectTempC());

  Serial.println("-----------------------------------------------------------------");

  //BPM alert
  if (beatAvg > 110){
     Serial.println("Heart rate too High");
     bot.sendMessage(CHAT_ID, "Oops someones heart is beating too fast", "");
  } 
  else if (beatAvg > 60){
     Serial.println("Heart rate too Low");
     bot.sendMessage(CHAT_ID, "Oops someones heart is beating too slow", "");
  }

  // body and ambient temp alert
  if (mlx.readObjectTempC() > 39) {
      Serial.println("Oops someones too hot");
      bot.sendMessage(CHAT_ID, "Oops someones too hot", "");
  }
  else if (mlx.readObjectTempC() < 35){
      Serial.println("Oops someones too cold");
      bot.sendMessage(CHAT_ID, "Oops someones too cold", "");
  }

  //fall detection x y z 
  if (g.gyro.x > 0.15) {
      Serial.println("Oops someone fell");
      bot.sendMessage(CHAT_ID, "Oops someone fell", "");
  }
  else if (g.gyro.x < -0.15){
      Serial.println("Oops someone fell");
      bot.sendMessage(CHAT_ID, "Oops someone fell", "");
  }
  
  if (g.gyro.y > 0.15) {
      Serial.println("Oops someone fell");
      bot.sendMessage(CHAT_ID, "Oops someone fell", "");
  }
  else if (g.gyro.y  < -0.15){
      Serial.println("Oops someone fell");
      bot.sendMessage(CHAT_ID, "Oops someone fell", "");
  }
  
  if (g.gyro.z > 0.15) {
      Serial.println("Oops someone fell");
      bot.sendMessage(CHAT_ID, "Oops someone fell", "");
  }
  else if (g.gyro.z < -0.15){
      Serial.println("Oops someone fell");
      bot.sendMessage(CHAT_ID, "Oops someone fell", "");
  }
}
This is the serial monitor when its not sending to thingsboard
image_2023-02-03_224100976.png
image_2023-02-03_224100976.png (12.19 KiB) Viewed 114 times
And this is when its sending to thingsboard.
image_2023-02-03_224203275.png
image_2023-02-03_224203275.png (13.33 KiB) Viewed 114 times
Here is the circuit diagram for the project
image_2023-02-03_224314832.png
image_2023-02-03_224314832.png (126.4 KiB) Viewed 114 times

User avatar
adafruit_support_mike
 
Posts: 67485
Joined: Thu Feb 11, 2010 2:51 pm

Re: MAX30102 Sensor not sending data to thingsboard.

Post by adafruit_support_mike »

Do you not get data from the I2C sensors during periods when the ESP32 is talking to the internet, or do you not get any I2C data at all while Wifi is enabled?

Locked
Forum rules
If you're posting code, please make sure your code does not include your Adafruit IO Active Key or WiFi network credentials.

Return to “Internet of Things: Adafruit IO and Wippersnapper”