Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <Adafruit_Sensor.h>
- #include <DHT.h>
- #include <Arduino.h>
- #include <ESP8266WiFi.h>
- #include <Hash.h>
- #include <ESPAsyncTCP.h>
- #include <ESPAsyncWebServer.h>
- #define SCREEN_WIDTH 128 // OLED display width, in pixels
- #define SCREEN_HEIGHT 64 // OLED display height, in pixels
- // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
- #define DHTPIN 14 // 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);
- const char* ssid = "******";
- const char* password = "******";
- 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);
- }
- }
- 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>ESP8266 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>
- </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 readDHTTemperature();
- }
- else if(var == "HUMIDITY"){
- return readDHTHumidity();
- }
- return String();
- }
- void setup(){
- // Serial port for debugging purposes
- Serial.begin(115200);
- //Serial.setDebugOutput(true);
- 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", readDHTTemperature().c_str());
- });
- server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
- request->send_P(200, "text/plain", readDHTHumidity().c_str());
- });
- // Start server
- server.begin();
- if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
- Serial.println(F("SSD1306 allocation failed"));
- for(;;);
- }
- delay(2000);
- display.clearDisplay();
- display.setTextColor(WHITE);
- }
- void loop(){
- delay(5000);
- //read temperature and humidity
- float OLEDt = dht.readTemperature();
- float OLEDh = dht.readHumidity();
- //if (isnan(h) || isnan(t)) {
- //Serial.println("Failed to read from DHT sensor!");
- //}
- // clear display
- display.clearDisplay();
- // display temperature
- display.setTextSize(1);
- display.setCursor(0,0);
- display.print("Temperature: ");
- display.setTextSize(2);
- display.setCursor(0,10);
- display.print(OLEDt);
- display.print(" ");
- display.setTextSize(1);
- display.cp437(true);
- display.write(167);
- display.setTextSize(2);
- display.print("C");
- // display humidity
- display.setTextSize(1);
- display.setCursor(0, 35);
- display.print("Humidity: ");
- display.setTextSize(2);
- display.setCursor(0, 45);
- display.print(OLEDh);
- display.print(" %");
- display.display();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement