/* * server_ip is the IP address of the ESP8266 module, will be * printed to Serial when the module is connected. * Note!!! Server will not run without sensor connected to the correct pin. * * The documentation for the module used can be found at: * https://www.olimex.com/Products/IoT/ESP8266-EVB/open-source-hardware * * There is a lot of documentation on how to upload a sketch to the module, * using the Arduino IDE, on the web. Use the Generic ESP8266 module" as a board. * * You can comment out any Serial.print commands when you have finished your debugging. * * Thank you again for all the people who provided the code I have adapted. Much appreciated. * */ #include #include // OneWire DS18S20, DS18B20, DS1822 Temperature Example // // http://www.pjrc.com/teensy/td_libs_OneWire.html // // The DallasTemperature library can do all this work for you! // http://milesburton.com/Dallas_Temperature_Control_Library OneWire ds(4); // on pin 14 (a 4.7K resistor is necessary) (2) = pin 2 (4) = pin 4 (12) = pin 12 (13) = pin 13 (14) = pin 14 const char* ssid = "fill in yours here"; const char* password = "fill in your WiFi password here"; int maxwt = 60; int minwt = 30; int csp = 30; int hStatus = 0; String readString; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); int val; void setup() { Serial.begin(115200); delay(10); // prepare GPIO5 pinMode(5, OUTPUT); digitalWrite(5, 0); // 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.println(WiFi.localIP()); } void loop() { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if ( !ds.search(addr)) { Serial.println("No more addresses."); Serial.println(); ds.reset_search(); delay(250); return; } // Serial.print("ROM ="); for( i = 0; i < 8; i++) { // Serial.write(' '); // Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { // Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: // Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: // Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: // Serial.println(" Chip = DS1822"); type_s = 0; break; default: // Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad // Serial.print(" Data = "); // Serial.print(present, HEX); // Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); // Serial.print(data[i], HEX); // Serial.print(" "); } // Serial.print(" CRC="); // Serial.print(OneWire::crc8(data, 8), HEX); // Serial.println(); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(" Setpoint = "); Serial.print(csp); Serial.print(" Celsius, "); // Serial.print(fahrenheit); // Serial.println(" Fahrenheit"); String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\nRelay is now "; s += (celsius); s +=" Celsius"; s += "\n"; // thermostat section if(csp > celsius) { digitalWrite(5, HIGH); hStatus = 1; } else { digitalWrite(5, LOW); csp = minwt; hStatus = 0; } // ******************************************************************************** // Check if a client has connected WiFiClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() < 100) { //store characters to string readString += c; //Serial.print(c); } //if HTTP request has ended if (c == '\n') { Serial.println(readString); //print to serial monitor for debuging client.println("HTTP/1.1 200 OK"); //send new page client.println("Content-Type: text/html"); client.println(); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println("WiFi ESP8266 Hot Water Control"); client.println(""); client.println(""); client.println("

WiFi ESP8266 Hot Water Control

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

Olimex ESP8266-EVB

"); client.println("
"); client.println("Turn On HW"); client.println("Refresh Readings
"); client.println("
"); client.println("
"); client.println("
"); client.println("Current Temperature"); client.println(celsius); client.println(" Degress celsius"); client.println("
"); client.println("
"); client.println("Current Setpoint"); client.println(csp); client.println(" Degress celsius"); client.println("
"); client.println("
"); if(hStatus == 1) { client.println("Status : Heating up to "); client.println(csp); client.println(" Degress celsius"); } else { client.println("Status: Not heating hot water"); } //client.println("

Created by Rui Santos. Visit http://randomnerdtutorials.com for more projects!

"); client.println("
"); client.println(""); client.println(""); delay(1); //stopping client client.stop(); //controls the Arduino if you press the buttons if (readString.indexOf("?buttonHWon") >0){ csp = maxwt; Serial.println(csp); } //clearing string for next read readString=""; } } } } }