From 7ec30730e1ffc89277d745bbc867d01556559f60 Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Sat, 28 Apr 2018 12:06:02 +0200 Subject: [PATCH] First draft for an Arduino sensor --- arduino-sensor/arduino-sensor.ino | 184 ++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 arduino-sensor/arduino-sensor.ino diff --git a/arduino-sensor/arduino-sensor.ino b/arduino-sensor/arduino-sensor.ino new file mode 100644 index 0000000..f324c50 --- /dev/null +++ b/arduino-sensor/arduino-sensor.ino @@ -0,0 +1,184 @@ +#include +#include +#include + +const char* ssid = "FLRLAN"; +const char* password = "XXXXXX"; + +#define DHT_PIN 4 + +DHT dht(DHT_PIN, DHT22); + +WiFiServer server(80); + +void setup() { + Serial.begin(115200); + dht.begin(); + EEPROM.begin(512); + + delay(10); + + // Connect to WiFi network + Serial.println(); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + Serial.println("WiFi connected"); + + // Start the server + server.begin(); + Serial.println("Server started"); + + // Print the IP address + Serial.print("Use this URL to connect: "); + Serial.print("http://"); + Serial.print(WiFi.localIP()); + Serial.println("/"); +} + +#define REQ_SLP 0 +#define REQ_SET 1 +#define REQ_ERR 99 + +void loop() { + // Check if a client has connected + WiFiClient client = server.available(); + if (!client) { + return; + } + + // Wait until the client sends some data + Serial.println("new client"); + while(!client.available()){ + delay(1); + } + + // Read the first line of the request + String requestStr = client.readStringUntil('\r'); + Serial.println(requestStr); + client.flush(); + + int idxSpace = requestStr.indexOf(" "); + requestStr = requestStr.substring(idxSpace + 1); + + int idxSndSpace = requestStr.indexOf(" "); + requestStr = requestStr.substring(0, idxSndSpace); + + // Match the request + + int value = REQ_ERR; + String parameter = ""; + + if (requestStr.indexOf("/SLEEP=") != -1) { + value = REQ_SLP; + int idx = requestStr.indexOf("/SLEEP="); + parameter = requestStr.substring(idx + 7); + } else if (requestStr.indexOf("/SET=") != -1) { + value = REQ_SET; + int idx = requestStr.indexOf("/SET="); + parameter = requestStr.substring(idx + 5); + } else { + value = REQ_ERR; + } + + + // Headers of the response + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: text/html"); + client.println(""); + + // HTML part + client.println(""); + client.println(""); + + client.println("

"); + client.println(getNodeId()); + client.println("

"); + + float h = dht.readHumidity(); + float t = dht.readTemperature(); + + while (isnan(h) || isnan(t)) { + h = dht.readHumidity(); + t = dht.readTemperature(); + } + + client.print ("Temperature: "); + client.print (t); + client.print (" *C"); + client.println("
"); + + client.print ("Humidity: "); + client.print (h); + client.print ("%"); + client.println("
"); + + client.print("Request is "); + client.println(value); + + client.print("Parameter is "); + client.println(parameter); + + client.println("

"); + client.println(""); + + client.stop(); + + delay(1); + Serial.println("Client disonnected"); + + if (value == REQ_SLP) { + int sleepTime = parameter.toInt() * 1e6; + Serial.print("Going to sleep for "); + Serial.print(sleepTime); + Serial.print(" nanoseconds"); + + ESP.deepSleep(sleepTime); + } else if (value == REQ_SET) { + setNodeId(parameter); + } +} + +#define LENGTH_ID 10 + +void setNodeId(String value) { + const char* c = value.c_str(); + size_t addr = 0x0; + + int givenLength = strlen(c); + if (givenLength >= LENGTH_ID) { + givenLength = LENGTH_ID; + } + + size_t i = 0; + for (; i < givenLength; i++) { + EEPROM.write(addr + i, (uint8_t) c[i]); + } + for (; i < LENGTH_ID; i++) { + EEPROM.write(addr + i, 0); + } + EEPROM.commit(); +} + +String getNodeId() { + size_t addr = 0x0; + + char* eepromId = new char[LENGTH_ID]; + for (size_t i = 0; i < LENGTH_ID; i++) { + uint8_t temp = EEPROM.read(addr + i); + eepromId[i] = temp; + } + + return String(eepromId); + +} + +