Last active
September 15, 2024 04:11
-
-
Save dewomser/238de24dd6ce476cbed8ab076332b617 to your computer and use it in GitHub Desktop.
ESP32 dht11 + sensor for moisture in soil
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********* | |
Rui Santos | |
Complete project details at https://randomnerdtutorials.com | |
Now with sensor for soil-humidity Pin 34 | |
Stefan Höhn | |
*********/ | |
// Import required libraries | |
#include "WiFi.h" | |
#include "ESPAsyncWebServer.h" | |
#include <Adafruit_Sensor.h> | |
#include <DHT.h> | |
// Replace with your network credentials | |
const char* ssid = "lololol"; | |
const char* password = "xyxyxy"; | |
#define DHTPIN 27 // 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); | |
// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) | |
const int earthPin = 34; | |
// variable for storing the potentiometer value | |
int earthValue = 0; | |
float e = 137.00; | |
// Create AsyncWebServer object on port 80 | |
AsyncWebServer server(80); | |
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(); | |
// 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 sensor!"); | |
return "--"; | |
} | |
else { | |
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(); | |
if (isnan(h)) { | |
Serial.println("Failed to read from DHT sensor!"); | |
return "--"; | |
} | |
else { | |
Serial.println(h); | |
return String(h); | |
} | |
} | |
String readEarth() { | |
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) | |
analogReadResolution(10); | |
int e = analogRead(earthPin); | |
if (isnan(e)) { | |
Serial.println("Failed to read from Earth sensor!"); | |
return "--"; | |
} | |
else { | |
Serial.println(e); | |
return String(e); | |
} | |
} | |
const char index_html[] PROGMEM = R"rawliteral( | |
<!DOCTYPE HTML><html> | |
<head> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<meta charset="utf-8"> | |
<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>Umweltdaten Küchenfenster - ESP32 </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> | |
<p> | |
<i class="fas fa-tint" style="color:#00add6;"></i> | |
<span class="dht-labels">Earth</span> | |
<span id="earth">%Earth/%</span> | |
<sup class="units">0-1024;</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("earth").innerHTML = this.responseText; | |
} | |
}; | |
xhttp.open("GET", "/earth", 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 == "EARTH"){ | |
// return readEarth (); | |
// } | |
return String(); | |
} | |
void setup(){ | |
// Serial port for debugging purposes | |
Serial.begin(115200); | |
dht.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("/earth", HTTP_GET, [](AsyncWebServerRequest *request){ | |
request->send_P(200, "text/plain", readEarth().c_str()); | |
}); | |
// Start server | |
server.begin(); | |
} | |
void loop(){ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ich hab das script von Rui Santos erweitert