Arduino Nano 33 IoT с библиотекой Arduino MqttClient и датчиком MAX30100 не отправляет данные отправляет только значение 0

raspberrypi mqtt arduino-nano-33-iot

Я использую Arduino Nano 33 IoT с библиотекой ArduinoMqttClient и датчиком MAX30100 для сбора данных через I2C. Как только я вызову клиент MQTT. подключение () датчик перестает считывать данные по I2C. И начните считывать значение 0 и отправлять данные о значении 0 на сервер [raspberry pi]. пожалуйста, мне нужна помощь от всех, кто понимает функции max30100. Я с радостью принимаю вашу помощь.

////////// Вот мой код /////////

#include <WiFiNINA.h>

#include <PubSubClient.h>

#include <MAX30100_PulseOximeter.h>

void InitializePOX();

#define REPORTING_PERIOD_MS  1000

//uint8_t max30100_address = 0x57;

uint32_t poxLastReport = 0;

uint32_t prevMillis = 0;

uint32_t tsLastReport = 0;

PulseOximeter pox;

const char* ssid = "HP";

const char* password = "12345678";

const char* mqtt_server = "192.168.**.**";

WiFiClient espClient;

PubSubClient client(espClient);

unsigned long lastMsg = 0;

#define MSG_BUFFER_SIZE  (50)

char msg[MSG_BUFFER_SIZE];

int value = 0;

long now = millis();

long lastMeasure = 0;
 
void setup_wifi() {

  delay(10);

  Serial.println();

  Serial.print("Connecting to ");

  Serial.println(ssid);

  WiFi.begin(ssid, password);

      while (WiFi.status() != WL_CONNECTED) {

        delay(500);

        Serial.print(".");

                         }
  randomSeed(micros());

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

}

void callback(char* topic, byte* payload, unsigned int length) {

  Serial.print("Message arrived [");

  Serial.print(topic);

  Serial.print("] ");

  for (int i = 0; i < length; i++) {

    Serial.print((char)payload[i]);

       }

  Serial.println();

}

void reconnect(){

  }

void setup() {

  Serial.begin(115200);

  pox.begin();

  setup_wifi();

  client.setServer(mqtt_server, 1883);

  client.setCallback(callback);

//  pox.setOnBeatDetectedCallback(onBeatDetected);

Serial.print("Initializing pulse oximeter..");


    // Initialize sensor

    if (!pox.begin()) {

        Serial.println("FAILED");

        for(;;);

    } else {

        Serial.println("SUCCESS");

    }

  // Configure sensor to use 7.6mA for LED drive

  pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

    // Register a callback routine
//    pox.setOnBeatDetectedCallback(onBeatDetected);
}

void InitializePOX()

{
  Serial.print("Initializing pulse oximeter..");

  // Initialize sensor

  if (!pox.begin()) {

    Serial.println("FAILED");

    for(;;);

  } else {

    Serial.println("SUCCESS");

  }

  // Configure sensor to use 7.6mA for LED drive

  //pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

}

void loop() {
  
  if (!client.connected()) {

    reconnect();

  }
  if(!client.loop())

    client.connect("ESP8266Client");

    
now = millis();

  if (now - lastMeasure > 5000) {

   lastMeasure = now;
    
   
    pox.update();

    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {

        float HB = pox.getHeartRate();

        Serial.print("Heart rate:");

        Serial.print(HB);

        Serial.println("bpm");

        delay(1000);

        tsLastReport = millis();

   String Data="HeartBeat: "+String((float)HB)+" bpm ";

   client.publish("outTopic",String(Data).c_str());
    
}
   while (!client.connected()) {

    Serial.print("Attempting MQTT connection...");

    //Create a random client ID

    String clientId = "ESP8266Client-";

    clientId += String(random(0xffff), HEX);

   if (client.connect(clientId.c_str())) {

      Serial.println("connected");

      client.subscribe("inTopic");
    
    } 

    else {

      Serial.print("failed, rc=");

      Serial.print(client.state());

      Serial.println(" try again in 5 seconds");

      // Wait 5 seconds before retrying

     }

   }

 }

}

, 👍0

Обсуждение

сократите вашу программу до минимального кода, который все еще демонстрирует проблему, @jsotola