Lua ESP8266MOD Server DHT 11(22)
Necesar:
- Modul Lua ESP8266MOD Wireless
-
Senzor temperatură şi umiditate DHT11
-
Breadboard 420
-
Cabluri Dupont (10 bucaţi) tată-tată
ESP8266MOD DHT11/DHT22 Temperature and Humidity Web Server
În acest proiect, veți crea un server web independent cu un ESP8266 care afișează temperatura și umiditatea cu un senzor DHT11 sau DHT22 folosind Arduino IDE (rezistența din poză nu e neapărat necesară). Serverul web pe care îl veți construi poate fi accesat cu orice dispozitiv care are un browser în rețeaua dvs. locală.
Installing the DHT Library for ESP8266
1. Deschideți IDE-ul Arduino și accesați Sketch > Include Library > Manage Libraries. Managerul bibliotecii ar trebui să se deschidă.
2. Căutați „DHT” în caseta Căutare și instalați biblioteca DHT de la Adafruit.
3. După instalarea bibliotecii DHT de la Adafruit, tastați „Adafruit Unified Sensor” în caseta de căutare. Derulați până la capăt pentru a găsi biblioteca și a o instala.
După instalarea bibliotecilor, restart ID-ul Arduino.
Instalează :
Installing the ESPAsyncWebServer library: https://github.com/me-no-dev/ESPAsyncWebServer
Installing the ESPAsync TCP Library: https://github.com/me-no-dev/ESPAsyncTCP
Install the ESP8266 Board in Arduino IDE
Deschideți ID-ul Arduino și copiați următorul cod :
// ROBOROMANIA LUA ESP8266MOD DHT
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Hash.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// completează cu nume și parolă locală Wifi network
const char* ssid = „DIGI-24”;
const char* password = „robo”;
#define DHTPIN D1 // Digital pin D1 connected to the DHT sensor
// tip senzor
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float t = 0.0;
float h = 0.0;
// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
unsigned long previousMillis = 0; // will store last time DHT was updated
// Updates DHT readings every 10 seconds
const long interval = 10000;
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: 2.0rem; }
p { font-size: 2.0rem; }
.units { font-size: 1.2rem; }
.dht-labels{
font-size: 1.5rem;
vertical-align:middle;
padding-bottom: 15px;
}
</style>
</head>
<body>
<h2>ESP8266 DHT SERVER ROBOROMANIA roboromania.ro</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 style=”font-size:80px”>😜</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 ) ;
</script>
</html>)rawliteral”;
// Replaces placeholder with DHT values
String processor(const String& var){
//Serial.println(var);
if(var == „TEMPERATURE”){
return String(t);
}
else if(var == „HUMIDITY”){
return String(h);
}
return String();
}
void setup(){
Serial.begin(115200);
dht.begin();
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.println(„Connecting to WiFi”);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println(„.”);
}
// Print ESP8266 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”, String(t).c_str());
});
server.on(„/humidity”, HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, „text/plain”, String(h).c_str());
});
// Start server
server.begin();
}
void loop(){
unsigned long currentMillis = millis();
if (currentMillis – previousMillis >= interval) {
// save the last time you updated the DHT values
previousMillis = currentMillis;
// Read temperature as Celsius (the default)
float newT = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
//float newT = dht.readTemperature(true);
// if temperature read failed, don’t change t value
if (isnan(newT)) {
Serial.println(„Failed to read from DHT sensor!”);
}
else {
t = newT;
Serial.println(t);
}
// Read Humidity
float newH = dht.readHumidity();
// if humidity read failed, don’t change h value
if (isnan(newH)) {
Serial.println(„Failed to read from DHT sensor!”);
}
else {
h = newH;
Serial.println(h);
}
}
}
//––––––––––––-
Atenție la declararea pinilor. Dacă copiați codul atenție la fonturi.
Pe serial veți afla IP-ul dat de server și dacă senzorul e ok.
Serverul web pe care îl veți construi poate fi accesat cu orice dispozitiv care are un browser în rețeaua dvs. locală.
Succes!