DHT22

From Noisebridge
Revision as of 18:23, 11 January 2018 by (talk | contribs) (temp)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Connects to specified network with static ip configuration and hosts a basic web page to show current sensor information, you can also query with /data to get a "|" delimeted plain text version.

// DHT code adapted from code written by ladyada, public domain

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#include "DHT.h"

#define DHTPIN 5     // sensor data pin D1 == 5
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321


const char* ssid = "nubnano";
const char* password = "1234567890";
const String esp-name = "blue-esp";

IPAddress ip(10, 10, 10, 222);
IPAddress gateway(10, 10, 10, 1);
IPAddress subnet(255, 255, 255, 0);

ESP8266WebServer server(80);

const int led = 13;

// DHT Params
DHT dht(DHTPIN, DHTTYPE);
unsigned long nextTime = 1;

float humidity = dht.readHumidity();
float celsius = dht.readTemperature();
float fahrenheit = dht.readTemperature(true);

void handleRoot() {
  String response = "";
  
  digitalWrite(led, 1);

  response += "Humidity: " +  String(humidity) + "%<br/>";
  response += "Temperature: " + String(celsius) + "C/" + String(fahrenheit) + "F<br/>";
  response += "Garden Mesh sensor node";
  server.send(200, "text/html", response);
  
  digitalWrite(led, 0);
}

void handleData() {
  String response = "";
  
  digitalWrite(led, 1);

  response += String(humidity) + "|";
  response += String(celsius) + "|" + String(fahrenheit);
  server.send(200, "text/plain", response);
  
  digitalWrite(led, 0);
}

void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);

  WiFi.config(ip, gateway, subnet);
  WiFi.begin(ssid, password);
  
  
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin(esp-name)) {
    Serial.println("MDNS responder started");
    MDNS.addService("http", "tcp", 80);
  }

  server.on("/", handleRoot);

  server.on("/data", handleData);

  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");

  Serial.println("Initialize DHT22 Sensor");
  dht.begin();
}

void sampleDHT() {
  humidity = dht.readHumidity();
  celsius = dht.readTemperature();
  fahrenheit = dht.readTemperature(true);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(celsius) || isnan(fahrenheit)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  nextTime = millis() + 2000;
}

void loop(void) {
  server.handleClient();

  if (millis() > nextTime)
    sampleDHT();
}