Last active
May 21, 2016 09:58
-
-
Save yavor87/289d128bbeadcc1335a8 to your computer and use it in GitHub Desktop.
ESP8266 sensor server
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
#include <DHT.h> | |
#include <ESP8266WiFi.h> | |
#include <ESP8266WebServer.h> | |
#define DHTPIN 2 | |
#define DHTTYPE DHT11 | |
#define LEDPIN 14 | |
ESP8266WebServer server(80); | |
DHT dht(DHTPIN, DHTTYPE); | |
void setup() { | |
// Setup LED | |
pinMode(LEDPIN, OUTPUT); | |
// Setup DTH11 sensor | |
dht.begin(); | |
// Setup serial | |
Serial.begin(115200); | |
delay(100); | |
// Connect to WiFi | |
WiFi.mode(WIFI_STA); | |
delay(500); | |
// Called to check if SSID and password has already been stored by previous WPS call. | |
// The SSID and password are stored in flash memory and will survive a full power cycle. | |
// Calling ("",""), i.e. with blank string parameters, appears to use these stored values. | |
WiFi.begin("",""); | |
// Long delay required especially soon after power on. | |
delay(4000); | |
if (WiFi.status() != WL_CONNECTED) { | |
WiFiSmartConfig(); | |
} | |
Serial.println("\nWiFi connected"); | |
Serial.print("IP address: "); | |
Serial.println(WiFi.localIP()); | |
Serial.print("SSID: "); | |
Serial.println(WiFi.SSID()); | |
// Setup server | |
server.on("/", handle_root); | |
server.on("/actuators/led", HTTP_GET, getLedStatus); | |
server.on("/actuators/led", HTTP_POST, setLedStatus); | |
server.on("/sensors/dht11", HTTP_GET, getDHT11Status); | |
server.begin(); | |
Serial.println("HTTP server started"); | |
} | |
void loop() { | |
server.handleClient(); | |
} | |
void handle_root() { | |
server.send(200, "text/plain", "Hello from the weather esp8266, read from /temp or /humidity"); | |
} | |
void getLedStatus() { | |
int ledStatus = digitalRead(LEDPIN); | |
String ledStatusStr = ledStatus == HIGH ? "true" : "false"; | |
String json = "{ \"isOn\": " + ledStatusStr + " }"; | |
server.send(200, "application/json", json); | |
} | |
void setLedStatus() { | |
if (!server.hasArg("status")) { | |
server.send(400, "text/plain", "Missing \"status\" argument"); | |
return; | |
} | |
String arg = server.arg("status"); | |
arg.toLowerCase(); | |
int ledStatus = LOW; | |
if (arg.equals("high") || arg.equals("true")) | |
ledStatus = HIGH; | |
digitalWrite(LEDPIN, ledStatus); | |
getLedStatus(); | |
} | |
void getDHT11Status() { | |
float temp = dht.readTemperature(); | |
float hum = dht.readHumidity(); | |
float heatIndex = dht.computeHeatIndex(temp, hum, false); | |
String json = "{ \"temp\": " + String(temp) + ", \"humidity\": " + String(hum / 100) + ", \"heatIndex\": " + String(heatIndex) + " }"; | |
server.send(200, "application/json", json); | |
} | |
void WiFiSmartConfig() { | |
Serial.println("\nAttempting SmartConfig..."); | |
WiFi.beginSmartConfig(); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
if (WiFi.smartConfigDone()) { | |
Serial.println("SmartConfig Success"); | |
break; | |
} | |
} | |
} | |
void WiFiWPSConfig() { | |
while (WiFi.status() != WL_CONNECTED) { | |
Serial.println("\nAttempting WPS connection ..."); | |
WiFi.beginWPSConfig(); | |
// Another long delay required. | |
delay(3000); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment