Esp8266 con Max30100 y MLX90614

Hola, me encuentro realizando un proyecto donde tengo que conectar un sensor MLX90614 y un Max30100 mediante I2C a un ESP8266. Este es el codigo que utilizo sin tener exito. El problema es que no me da mediciones correctas en el monitor serial. ¿Por favor, alguien tiene alguna idea de solución?

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_MLX90614.h>

#define I2C_SDA 21
#define I2C_SCL 22
#define REPORTING_PERIOD_MS 1000

uint8_t bm280_address = 0x76;
uint8_t max30100_address = 0x57;
uint8_t irmlx90614_address = 0x5A;
uint32_t tsLastReport = 0;

Adafruit_MLX90614 mlx = Adafruit_MLX90614();
PulseOximeter pox;

void setup() {
Serial.begin(9600);
Wire.begin();
mlx.begin();
pox.begin();
//delay(2000);
Serial.println();
}

void loop() {
//printTemp();
printFreq();
//delay(1000);
}

void printTemp(){
Serial.print("Ambient = "); 
Serial.print(mlx.readAmbientTempC());
Serial.print("*C\tObject = "); 
Serial.print(mlx.readObjectTempC()); 
Serial.println("*C");
}

void printFreq(){
pox.update();

if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
    Serial.print("Heart rate:");
    Serial.print(pox.getHeartRate());
    Serial.print("bpm / SpO2:");
    Serial.print(pox.getSpO2());
    Serial.println("%");
    printTemp();
    tsLastReport = millis();
}
}

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Qué módulo no te da valores correctas?
Lo has aislado, o sea, usaste algún código de ejemplo de la librería?

Gracias por responder.
Si, ya probé los sensores individualmente y si funcionan correctamente. Pero a la hora de unirlos es cuando el MAX30100 (oxímetro) no me da valores correctos mientras que el MLX90614 (temperatura) sí.

Prueba seteando el clock de wire a 400K.
Prueba invirtiendo el orden de la inicialización (begin) de los sensores.

Saludos

Que raro que tengas que poner esto

	Wire.begin();

A ver como va esto?

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_MLX90614.h>

#define I2C_SDA 21
#define I2C_SCL 22
#define REPORTING_PERIOD_MS 1000

uint8_t bm280_address 		= 0x76;
uint8_t max30100_address 	= 0x57;
uint8_t irmlx90614_address 	= 0x5A;
uint32_t tsLastReport, tempLastReport;

Adafruit_MLX90614 mlx = Adafruit_MLX90614();
PulseOximeter pox;

void setup() {
	Serial.begin(9600);
	Wire.begin();
	mlx.begin();
	pox.begin();
	Serial.println();
}

void loop() {
	printTemp();
	printFreq();
}

void printTemp(){
	if (millis() - tempLastReport > REPORTING_PERIOD_MS) {
		Serial.print("Ambient = "); 
		Serial.print(mlx.readAmbientTempC());
		Serial.print("*C\tObject = "); 
		Serial.print(mlx.readObjectTempC()); 
		Serial.println("*C");
		tempLastReport = millis();
	}
}

void printFreq(){
	pox.update();

	if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
		Serial.print("Heart rate:");
		Serial.print(pox.getHeartRate());
		Serial.print("bpm / SpO2:");
		Serial.print(pox.getSpO2());
		Serial.println("%");
		printTemp();
		tsLastReport = millis();
	}
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.