使用esp8266从max30100传感器发送数据到thingspeak

问题描述

我有两个传感器连接到我的 Arduino UNOMAX30100(this is the problem) and LM35 Sensor。 这两个传感器在没有 ESP8266 的情况下工作,它们的值显示在 arduino 的串行端口上。 The problem is when I include the ESP8266 to send the values to ThingSpeak。 LM35 传感器的值已发送,它们在 ThingSpeak 上显示良好。 The problem is with MAX30100. MAX30100 show just the value 0,that means that MAX30100 is not measuring nothing at all. 有没有人知道如何使 MAX30100 传感器在向 Thingspeak 发送数据时工作?我在下面发布了我的代码

#define USE_ARDUINO_INTERRUPTS true    
#define DEBUG true
#define SSID "Redmi"     // "SSID-WiFiname"
#define PASS "wtfwtfwtf" // "password"
#define IP "184.106.153.149"      // thingspeak.com ip
#define RX 10
#define TX 11
#include <Wire.h>
#include "Stdlib.h"
#include <SoftwareSerial.h>
#include "Timer.h"
#include <pulseSensorPlayground.h> // Includes the pulseSensorPlayground 
Library.   
Timer t;
#include "MAX30100_pulseOximeter.h"
#define REPORTING_PERIOD_MS     1000
pulseOximeter pox;
uint32_t tsLastReport = 0;
String msg = "GET /update?key=T4RF5YWLJKOU9MVO"; 
SoftwareSerial esp8266(RX,TX);

//Variables
const int pulseWire = A0;       // pulseSensor PURPLE WIRE connected to ANALOG PIN 0
const int LED13 = 13;          // The on-board Arduino LED,close to PIN 13.
int Threshold = 550;           //for heart rate sensor
float myTemp;
int myBPM;
float  mybpm;
float  mySPO2;
String BPM;
String temp;
String SPO2;
int error;
int panic;

int raw_myTemp;
float Voltage;
float tempC;
void onBeatDetected()
{
    Serial.println("Beat!");
}
void setup()
{

   Serial.begin(9600); 
   esp8266.begin(115200);


   if (!pox.begin()) {
    Serial.println("Failed");
    for(;;);
    } 
else {
    Serial.println("SUCCESS");
}


// Double-check the "pulseSensor" object was created and "began" seeing a signal. 
//This prints one time at Arduino power-up,or on Arduino reset.  

pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

// Register a callback for the beat detection
pox.setonBeatDetectedCallback(onBeatDetected);
Serial.println("AT");
esp8266.println("AT");

delay(3000);

if(esp8266.find("OK"))
{
connectWiFi();
}

}

void loop()
{
 panic_button();
 start: //label
 error=0;
 t.update();
//Resend if transmission is not completed
if (error==1)
{
  goto start; //go to label "start"
} 
delay(1000);
panic_button();

delay(1000);
panic_button();
onBeatDetected();
delay(1000);
panic_button();
heart();
delay(1000);
panic_button();
oxygen();
delay(1000);
 panic_button();
temp1();

}

boolean connectWiFi()
{
Serial.println("AT+CWMODE=1");
esp8266.println("AT+CWMODE=1");
delay(2000);
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Serial.println(cmd);
esp8266.println(cmd);
delay(5000);
if(esp8266.find("OK"))
{
  return true;
}
else
{
  return false;
}
}


void temp1(){
raw_myTemp = analogRead(A1);
Voltage = (raw_myTemp / 1023.0) * 5000; // 5000 to get millivots.
myTemp = Voltage * 0.1; 
Serial.print("Temperature = ");
Serial.print(myTemp);
Serial.print(" Degree Celsius\n");
delay(20);
char buffer3[10];
temp = dtostrf(myTemp,4,1,buffer3);
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
Serial.println(cmd);
esp8266.println(cmd);
delay(10000);
if(esp8266.find("Error"))
{
  return;
}
cmd = msg ;
cmd += "&field3=";    //field 1 for BPM
cmd += temp;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
esp8266.print("AT+CIPSEND=");
Serial.println(cmd.length());
esp8266.println(cmd.length());
if(esp8266.find(">"))
{
  Serial.print(cmd);
  esp8266.print(cmd);
}
else
{
  Serial.println("AT+CIPCLOSE");
  esp8266.println("AT+CIPCLOSE");
  //Resend...
  error=1;
}
}

void heart(){

pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
    Serial.print("Heart rate:");
   
    Serial.print(pox.getHeartRate());
       Serial.println(""); 
       tsLastReport = millis();}
     float mybpm = pox.getHeartRate();
     delay(20);            
char buffer1[10];

BPM = dtostrf(mybpm,buffer1);
 String cmd = "AT+CIPSTART=\"TCP\",80";
Serial.println(cmd);
esp8266.println(cmd);
delay(1000);
if(esp8266.find("Error"))
{
  return;
}
cmd = msg ;
cmd += "&field1=";    //field 1 for BPM
cmd += mybpm;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
esp8266.print("AT+CIPSEND=");
Serial.println(cmd.length());
esp8266.println(cmd.length());
if(esp8266.find(">"))
{
  Serial.print(cmd);
  esp8266.print(cmd);
}
else
{
Serial.println("AT+CIPCLOSE");
esp8266.println("AT+CIPCLOSE");
//Resend...
error=1;
}
}
void oxygen(){
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
    
    Serial.print("bpm / SPO2::");
    
    Serial.print(pox.getSpO2());
    Serial.println("%"); 
       tsLastReport = millis();}
     /*int mySPO2 = pox.getSpO2();*/
     delay(20);            
char buffer2[10];

SPO2 = dtostrf(pox.getSpO2(),buffer2);
 String cmd = "AT+CIPSTART=\"TCP\",80";
Serial.println(cmd);
esp8266.println(cmd);
delay(2000);
if(esp8266.find("Error"))
{
return;
}
cmd = msg ;
cmd += "&field2=";    //field 1 for BPM
cmd +=SPO2;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
esp8266.print("AT+CIPSEND=");
Serial.println(cmd.length());
esp8266.println(cmd.length());
if(esp8266.find(">"))
{
Serial.print(cmd);
esp8266.print(cmd);
}
else
{
Serial.println("AT+CIPCLOSE");
esp8266.println("AT+CIPCLOSE");
//Resend...
error=1;
}

}

void panic_button(){
panic = digitalRead(8);
if(panic == HIGH){

Serial.println(panic);
  String cmd = "AT+CIPSTART=\"TCP\",80";
Serial.println(cmd);
esp8266.println(cmd);
delay(2000);
if(esp8266.find("Error"))
{
return;
}
cmd = msg ;
cmd += "&field4=";    
cmd += panic;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
esp8266.print("AT+CIPSEND=");
Serial.println(cmd.length());
esp8266.println(cmd.length());
if(esp8266.find(">"))
{
  Serial.print(cmd);
  esp8266.print(cmd);
}
else
{
  Serial.println("AT+CIPCLOSE");
  esp8266.println("AT+CIPCLOSE");
  //Resend...
  error=1;
} 
}
}

预期输出:MAX30100 和 LM35 的值应显示在串行监视器上并上传到 ThingSpeak 平台。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)