// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain // REQUIRES the following Arduino libraries: // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library // - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor #include "DHT.h" /********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ // Load Wi-Fi library #include // Replace with your network credentials const char* ssid = "Kalaksi"; const char* password = "testisalasana"; // Set web server port number to 80 WiFiServer server(80); // Variable to store the HTTP request String header; // Auxiliar variables to store the current output state String output26State = "off"; //String output27State = "off"; // Assign output variables to GPIO pins const int output26 = D6; //const int output27 = D1; // Current time unsigned long currentTime = millis(); // Previous time unsigned long previousTime = 0; // Define timeout time in milliseconds (example: 2000ms = 2s) const long timeoutTime = 2000; #define DHTPIN D2 // Digital pin connected to the DHT sensor // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- // Pin 15 can work but DHT must be disconnected during program upload. // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 // to 3.3V instead of 5V! // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins) // Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins) // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor // Initialize DHT sensor. // Note that older versions of this library took an optional third parameter to // tweak the timings for faster processors. This parameter is no longer needed // as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); int mytimer; float h,t,f; float aika,deltaaika; void setup() { Serial.begin(9600); Serial.println(F("DHTxx test!")); mytimer=0; //h=0; //t=0; dht.begin(); Serial.begin(115200); // Initialize the output variables as outputs pinMode(output26, OUTPUT); //pinMode(output27, OUTPUT); // Set outputs to LOW digitalWrite(output26, LOW); //digitalWrite(output27, LOW); // Connect to Wi-Fi network with SSID and password Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Print local IP address and start web server Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); delay(2000); h = dht.readHumidity(); // Read temperature as Celsius (the default) t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) f = dht.readTemperature(true); aika=0; } void loop() { // Wait a few seconds between measurements. //delay(2000); deltaaika=millis()-aika; mytimer=mytimer+deltaaika; aika=millis(); if (mytimer>2000){ // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) h = dht.readHumidity(); // Read temperature as Celsius (the default) t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("Failed to read from DHT sensor!")); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.print(F("°C ")); Serial.print(f); Serial.print(F("°F Heat index: ")); Serial.print(hic); Serial.print(F("°C ")); Serial.print(hif); Serial.println(F("°F")); mytimer=0; } WiFiClient client = server.available(); // Listen for incoming clients if (client) { // If a new client connects, currentTime = millis(); previousTime = currentTime; Serial.println("New Client."); // print a message out in the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected currentTime = millis(); if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor header += c; if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // turns the GPIOs on and off if (header.indexOf("GET /26/on") >= 0) { Serial.println("GPIO 26 on"); output26State = "on"; digitalWrite(output26, HIGH); } else if (header.indexOf("GET /26/off") >= 0) { Serial.println("GPIO 26 off"); output26State = "off"; digitalWrite(output26, LOW); // } else if (header.indexOf("GET /27/on") >= 0) { // Serial.println("GPIO 27 on"); // output27State = "on"; // digitalWrite(output27, HIGH); // } else if (header.indexOf("GET /27/off") >= 0) { // Serial.println("GPIO 27 off"); // output27State = "off"; // digitalWrite(output27, LOW); } // Display the HTML web page client.println(""); client.println(""); client.println(""); client.print(""); // CSS to style the on/off buttons // Feel free to change the background-color and font-size attributes to fit your preferences client.println(""); // Web Page Heading // client.println("

Aarne's ESP32 Web Server

"); // I customized the webpage client.println("

Aarne's Temperature and humidity server

"); client.println("

Temperature

"); client.println(t); client.println("

Humidity

"); client.println(h); // // Display current state, and ON/OFF buttons for GPIO 26 // client.println("

Button 1 - State " + output26State + "

"); // I customized the webpage // // If the output26State is off, it displays the ON button if (output26State=="off") { client.println("

"); } else { client.println("

"); } // // Display current state, and ON/OFF buttons for GPIO 27 // client.println("

Button 2 - State " + output27State + "

"); // I customized the webpage // // If the output27State is off, it displays the ON button // if (output27State=="off") { // client.println("

"); // } else { // client.println("

"); // } client.println(""); // The HTTP response ends with another blank line client.println(); // Break out of the while loop break; } else { // if you got a newline, then clear currentLine currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } } } // Clear the header variable header = ""; // Close the connection client.stop(); Serial.println("Client disconnected."); Serial.println(""); } }