I am new to Arduino and wondering what the best way forward is to add an extra DHT11 to the same ESP32. I have one DHT11 sensor working correctly. When i add a second DHT11 sensor to the same EPS32 (WROOM-32) i get only the Humidity output of sensor 2 and Temperature output of sensor 1 outputted:
12:54:00.763 -> humi sensor 1: 28.00
12:54:08.107 -> temp sensor 2: 24.10
12:54:10.856 -> humi sensor 1: 28.00
12:54:17.919 -> temp sensor 2: 24.10
12:54:20.722 -> humi sensor 1: 28.00
12:54:28.139 -> temp sensor 2: 24.10
12:54:30.895 -> humi sensor 1: 28.00
I just went and duplicated the code (not the best way to do things but it "should" be able to work) as follows:
// Import required libraries
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Replace with your network credentials
const char* ssid = "welcomeneighbor";
const char* password = "1234";
const int tempfix = 2; // 2 verminderen
const int humifix = 10; // 10 toevoegen
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTPIN2 5 // Digital pin connected to the DHT sensor
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
// #define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
///////////////////////////////////////////////////////////////////////////////
// sensor 1
String readDHTTemperature() {
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
// Read temperature as Celsius (the default)
float t = dht.readTemperature() - tempfix;
// Read temperature as Fahrenheit (isFahrenheit = true)
//float t = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(t)) {
Serial.println("Failed to read from DHT temp sensor 1!");
return "--";
}
else {
Serial.print("temp sensor 1: ");
Serial.println(t);
return String(t);
}
}
String readDHTHumidity() {
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity() + humifix;
if (isnan(h)) {
Serial.println("Failed to read from DHT humi sensor 1!");
return "--";
}
else {
Serial.print("humi sensor 1: ");
Serial.println(h);
return String(h);
}
}
///////////////////////////////////////////////////////////////////////////////
// sensor 2
String readDHTTemperature2() {
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
// Read temperature as Celsius (the default)
float t2 = dht2.readTemperature() - tempfix;
// Read temperature as Fahrenheit (isFahrenheit = true)
//float t = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(t2)) {
Serial.println("Failed to read from DHT temp sensor 2!");
return "--";
}
else {
Serial.print("temp sensor 2: ");
Serial.println(t2);
return String(t2);
}
}
String readDHTHumidity2() {
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h2 = dht2.readHumidity() + humifix;
if (isnan(h2)) {
Serial.println("Failed to read from DHT humi sensor 2!");
return "--";
}
else {
Serial.print("humi sensor 2: ");
Serial.println(h2);
return String(h2);
}
}
///////////////////////////////////////////////////////////////////////////////
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<style>
html {
font-family: Arial;
display: inline-block;
margin: 0px auto;
text-align: center;
}
h2 { font-size: 3.0rem; }
p { font-size: 3.0rem; }
.units { font-size: 1.2rem; }
.dht-labels{
font-size: 1.5rem;
vertical-align:middle;
padding-bottom: 15px;
}
</style>
</head>
<body>
<h2>DHT Server</h2>
<p>
<i class="fas fa-thermometer-half" style="color:#059e8a;"></i>
<span class="dht-labels">Temperature</span>
<span id="temperature">%TEMPERATURE%</span>
<sup class="units">°C</sup>
</p>
<p>
<i class="fas fa-tint" style="color:#00add6;"></i>
<span class="dht-labels">Humidity</span>
<span id="humidity">%HUMIDITY%</span>
<sup class="units">%</sup>
</p>
<hr>
<p>
<i class="fas fa-thermometer-half" style="color:#059e8a;"></i>
<span class="dht-labels">Temperature2</span>
<span id="temperature2">%TEMPERATURE2%</span>
<sup class="units">°C</sup>
</p>
<p>
<i class="fas fa-tint" style="color:#00add6;"></i>
<span class="dht-labels">Humidity2</span>
<span id="humidity2">%HUMIDITY2%</span>
<sup class="units">%</sup>
</p>
</body>
<script>
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("temperature").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/temperature", true);
xhttp.send();
}, 10000 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("humidity").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/humidity", true);
xhttp.send();
}, 10000 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("temperature2").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/temperature2", true);
xhttp.send();
}, 10000 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("humidity2").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/humidity2", true);
xhttp.send();
}, 10000 ) ;
</script>
</html>)rawliteral";
// Replaces placeholder with DHT values
String processor(const String& var){
//Serial.println(var);
if(var == "TEMPERATURE"){
return readDHTTemperature();
}
else if(var == "HUMIDITY"){
return readDHTHumidity();
}
else if(var == "TEMPERATURE2"){
return readDHTTemperature2();
}
else if(var == "HUMIDITY2"){
return readDHTHumidity2();
}
return String();
}
void setup(){
// Serial port for debugging purposes
Serial.begin(115200);
dht.begin();
dht2.begin();
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
// Print ESP32 Local IP Address
Serial.println(WiFi.localIP());
// Route for root / web page
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html, processor);
});
server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", readDHTTemperature().c_str());
});
server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", readDHTHumidity().c_str());
});
server.on("/temperature2", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", readDHTTemperature2().c_str());
});
server.on("/humidity2", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", readDHTHumidity2().c_str());
});
// Start server
server.begin();
}
void loop(){
}