Two sensor in one broad esp8266

Hi i am newbie i coding i have problem in my esp8266 i have codes in dht11 and also heart rate code but when i use the code of any of this i one is not working could be possible to use that two sensor in one board in the separate codes in arduino??

Welcome to the forum

Why did you start a topic in the Uncategorised category of the forum when its description explicitly tells you not to ?

Your topic has been moved to a relevant category. Please be careful in future when deciding where to start new topics

1 Like

The code for each sensor, whilst separate, will form part of the same sketch

One possible approach is to put the code for each sensor in its own function and to call those functions from loop() but you will need to ensure that no resources, such as pins, are shared by the two sets of code

You will also need to program the sensor code such there is no blocking code that would prevent the free running of the overal sketch

3 Likes

Sorry i dont get that i have a codes that running in the different sensor it's called dht 11 in heart center it's already running but i have two esp board the one is the dht is running and the one is the heartbreak it's also running but my problem is i want to put that sensor in the one board of esp the one is have a database but the one is not have a database the dht 11 have database and the heartbreak is no database but still running when i put it together in one esp board the problem is one is not working the question is is this is possible can i put this in one esp board ?

Yes. My previous reply explained one possible approach. Which part of it do you not understand ?

How to connect that if ever yes because i make but is not working properly i my code i not right but is working the two code i make when i try to upload the one not working

Please post your best attempt at a sketch using two sensors. What sensors are they and how are they connected to the Arduino ?

A schematic of your project would also help

this the one dht11

//////
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <SPI.h>


#define DHTPIN D2

#define DHTTYPE DHT11

DHT dht(DHTPIN,DHTTYPE);


float humidityData;
float temperatureData;


const char* ssid = "user name wifi";// 
const char* password = "password wifi";
//WiFiClient client;
char server[] = "My url";   //eg: url


WiFiClient client;    


void setup()
{
 Serial.begin(115200);
  delay(10);
  dht.begin();
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
//  server.begin();
  Serial.println("Server started");
  Serial.print(WiFi.localIP());
  delay(1000);
  Serial.println("connecting...");
 }
void loop()
{ 
  humidityData = dht.readHumidity();
  temperatureData = dht.readTemperature(); 
  Sending_To_phpmyadmindatabase(); 
  delay(30000); // interval
 }

 void Sending_To_phpmyadmindatabase()   //CONNECTING WITH MYSQL
 {
   if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    Serial.print("GET http://localhost/my_project/sensordata.php?humidity=");
    client.print("GET http://localhost/my_project/sensordata.php?humidity=");     //YOUR URL
    Serial.println(humidityData);
    client.print(humidityData);
    client.print("&temperature=");
    Serial.println("&temperature=");
    client.print(temperatureData);
    Serial.println(temperatureData);
    client.print(" ");      //SPACE BEFORE HTTP/1.1
    client.print("HTTP/1.1");
    client.println();
    client.println("Host: Your Local IP");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
 }
------------------------------------------------------------------------------
and this is the two i make
heart sensor monitoring

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
//----------------------------------------

#include "index.h" //--> Our HTML webpage contents with javascripts

#define ON_Board_LED 2  //--> Defining an On Board LED (GPIO2 = D4), used for indicators when the process of connecting to a wifi router and when there is a client request.

//----------------------------------------SSID and Password of your WiFi router
const char* ssid = "Your wifi name";  //--> Your wifi name
const char* password = "Your wifi password"; //--> Your wifi password
//----------------------------------------

ESP8266WebServer server(80);  //--> Server on port 80

unsigned long previousMillisGetHR = 0; //--> will store the last time Millis (to get Heartbeat) was updated.
unsigned long previousMillisHR = 0; //--> will store the last time Millis (to get BPM) was updated.

const long intervalGetHR = 10; //--> Interval for reading heart rate (Heartbeat) = 10ms.
const long intervalHR = 10000; //--> Interval for obtaining the BPM value based on the sample is 10 seconds.

const int PulseSensorHRWire = A0; //--> PulseSensor connected to ANALOG PIN 0 (A0 / ADC 0).
const int LED_D1 = D1; //--> LED to detect when the heart is beating. The LED is connected to PIN D1 (GPIO5) on the NodeMCU ESP12E.
int Threshold = 600; //--> Determine which Signal to "count as a beat" and which to ignore.

int cntHB = 0; //--> Variable for counting the number of heartbeats.
boolean ThresholdStat = true; //--> Variable for triggers in calculating heartbeats.
int BPMval = 0; //--> Variable to hold the result of heartbeats calculation.

//--------------------------------------------------------------------------------void handleRoot()
// This subroutine is executed when NodeMCU ESP12E IP is opened in the browser.
void handleRoot() {
 String s = MAIN_page; //--> Read HTML contents
 server.send(200, "text/html", s); //--> Send web page
}
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------void handleHeartRate()
// This subroutine is executed when there is a request from the browser / client.
// This subroutine will send / display the BPM value to the browser.
void handleHeartRate() {
  digitalWrite(ON_Board_LED, LOW); //--> "ON_Board_LED" will be turned on when the request from the browser / client starts.
  String BPMvalSend = String(BPMval); 
  server.send(200, "text/plane", BPMvalSend); //--> Sends BPM value to client request / browser.
  digitalWrite(ON_Board_LED, HIGH); //--> Turn off the LED because the client request / browser has been processed.
}
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------void GetHeartRate()
// This subroutine is for reading the heart rate and calculating it to get the BPM value.
// To get a BPM value based on a heart rate reading for 10 seconds.
void GetHeartRate() {
  //----------------------------------------Process of reading heart rate.
  unsigned long currentMillisGetHR = millis();

  if (currentMillisGetHR - previousMillisGetHR >= intervalGetHR) {
    previousMillisGetHR = currentMillisGetHR;

    int PulseSensorHRVal = analogRead(PulseSensorHRWire);

    if (PulseSensorHRVal > Threshold && ThresholdStat == true) {
      cntHB++;
      ThresholdStat = false;
      digitalWrite(LED_D1,HIGH);
    }

    if (PulseSensorHRVal < Threshold) {
      ThresholdStat = true;
      digitalWrite(LED_D1,LOW);
    }
  }
  //----------------------------------------

  //----------------------------------------The process for getting the BPM value.
  unsigned long currentMillisHR = millis();

  if (currentMillisHR - previousMillisHR >= intervalHR) {
    previousMillisHR = currentMillisHR;

    BPMval = cntHB * 6; //--> The taken heart rate is for 10 seconds. So to get the BPM value, the total heart rate in 10 seconds x 6.
    Serial.print("BPM : ");
    Serial.println(BPMval);
    
    cntHB = 0;
  }
  //----------------------------------------
}
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------void setup()
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  delay(500);
    
  pinMode(ON_Board_LED,OUTPUT); //--> On Board LED port Direction output
  digitalWrite(ON_Board_LED, HIGH); //--> Turn off Led On Board

  pinMode(LED_D1,OUTPUT); //--> Set LED_3 PIN as Output.

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password); //--> Connect to your WiFi router
  Serial.println("");

  //----------------------------------------Wait for connection
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    //----------------------------------------Make the On Board Flashing LED on the process of connecting to the wifi router.
    digitalWrite(ON_Board_LED, LOW);
    delay(250);
    digitalWrite(ON_Board_LED, HIGH);
    delay(250);
    //----------------------------------------
  }
  //----------------------------------------
  digitalWrite(ON_Board_LED, HIGH); //--> Turn off the On Board LED when it is connected to the wifi router.
  //----------------------------------------If successfully connected to the wifi router, the IP Address that will be visited is displayed in the serial monitor
  Serial.println("");
  Serial.print("Successfully connected to : ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  //----------------------------------------

  server.on("/", handleRoot); //--> Which routine to handle at root location. This is display page
  server.on("/getHeartRate", handleHeartRate); //--> This page is called in the javascript code in the Index.h file

  server.begin(); //--> Start server
  Serial.println("HTTP server started");

  Serial.println();
  Serial.println("Please wait 10 seconds to get the BPM Value");
}
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------void loop()
void loop() {
  // put your main code here, to run repeatedly:
  server.handleClient(); //--> Handle client requests
  GetHeartRate(); //--> Calling the GetHeartRate() subroutine
}
//--------------------------------------------------------------------------------
//===================================================================================
index.H
///
const char MAIN_page[] PROGMEM = R"=====(
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Monitoring Heart Rate (HeartBeat)</title>
    <style>
      html {
        font-family: Arial;
        display: inline-block;
        margin: 0px auto;
        text-align: center;
      }
      h1 { font-size: 1.5rem; }
    </style>
  </head>
   <a href='http://localhost/my_project/index.php?id=%22.$result['<'btn'>HOME</a>
  <body> 
    <h1 style="color:#7d0633;font-family:consolas;">Monitoring Heart Rate (HeartBeat) with Pulse Heart Rate Sensor</h1>
    <img src=" data:image/png;base64,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"/>
    <br>
    <canvas id="myCanvas" width="500" height="200"></canvas>
    <p>Min = 0 &nbsp;&nbsp;&nbsp; Max = 220</p>
    <p>Please wait 10 seconds to get the BPM Value</p>
    
    <script>
      var myVar = setInterval(myTimer, 1000); //--> Create a loop to send a request to NodeMCU to get the BPM value every 1 second.
      var getHR = 0; //--> Variable to get the BPM value from NodeMCU.
      
      function myTimer() {
        getHeartRateVal();
      }
      
      //------------------------------------------------------------Function for sending request to NodeMCU to get BPM value.
      function getHeartRateVal() {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200) {
            getHR = this.responseText;
          }
        };
        xhttp.open("GET", "getHeartRate", true);
        xhttp.send();
      }
      //------------------------------------------------------------
      
      //------------------------------------------------------------Display the BPM value and create a circle progress bar.
      // Source: https://www.tothenew.com/blog/tutorial-to-create-a-circular-progress-bar-with-canvas/
      var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');
      var start=1.58;
      var cw=context.canvas.width/2;
      var ch=context.canvas.height/2;
      var diff;
       
      var cnt = 0;
      var bar=setInterval(progressBar,10);
      function progressBar(){
        var HR = map(getHR,0,220,0,100);
        diff=(cnt/100)*Math.PI*2;
        context.clearRect(0,0,400,200);
        context.beginPath();
        context.arc(cw,ch,70,0,2*Math.PI,false);
        context.fillStyle='#FFF';
        context.fill();
        context.strokeStyle='#e7f2ba';
        context.stroke();
        context.fillStyle='#000';
        context.strokeStyle='#b3cf3c';
        context.textAlign='center';
        context.lineWidth=15;
        context.font = '15pt Verdana';
        context.beginPath();
        context.arc(cw,ch,70,start,diff+start,false);
        context.stroke();
        context.fillText(getHR+' BPM',cw+2,ch+6);
        
        if(cnt<HR) {
          cnt++;
        }
                
        if(cnt>HR) {
          cnt--;
        }
      }
      //------------------------------------------------------------
      
      //------------------------------------------------------------Scale from the BPM value to the Progress bar value.
      // The BPM value is min = 0 and max = 220 is scaled to the Progress bar value min = 0 and max = 100.
      // Source: https://www.arduino.cc/reference/en/language/functions/math/map/ , https://forum.jquery.com/topic/jquery-map-like-arduino-map
      function map( x,  in_min,  in_max,  out_min,  out_max){
        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
      }
      //------------------------------------------------------------
    </script>
  </body>
</html>
)=====";

I am confused by what you have posted. Please post just your attempt to combine use of 2 sensors in a single sketch in a new reply

I separate of two codes in dht and heart sensor it means to new files in ardrino because i run the 11 with database and the heart sensor with not database and i put in two to board of esp 8266 but i need for one board esp 8266 but they cannot run together for single board because i don't know if the coding need a single in ardrino or separate into codes in arduino ama right or no but i need to run in one board where did i wrong

I am still not clear whether you have tried to combine the 2 codes or not

I want to combine the code but i don't know how to combine that codes because i'm just a newbie this is my project i don't know where can i find or how i don't have any idea

How to combine the two sensor dht11 and heart rate in my esp 8266 ? I what do i need for combined that i one broad?

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