// http://bennirafvirki.is/sensors/ui/readings
// Working well as a draft, the code need to be clean.
#ifdef ESP32 // Import required libraries
#include
#else
#include
#include
#include
#include
#include
#endif
#include
#include
#define ONE_WIRE_BUS 4 // Data wire is connected to GPIO 4 = pin D2
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature sensor
//#include
#include
#include
//#define SERVER_IP "bennirafvirki.is"
// Replaced parameters
// Rikki
const char* ssid = "Asus2"; //network credentials
const char* password = "lukas1234";
/*
// F7
const char* ssid = "Hringdu-2.4G-2dfM"; //network credentials F7
const char* password = "8hs9gmmV";
*/
const int tmin = -3; // min temperature
const int tmax = 3; // max temperature
String address = "electropepper";
int time_of_delay = 50000; //if 50000 ms, than will measure each minute interval
// pinout D0=pin16; D1=pin5/GPIO5; D2=pin4/GPIO4; D3=0/Flash; D4=2/Tx1; D5=14; D6=12; D7=13=Rx2; D8=15=Tx2; D9=3=Rx0; D10=1=Tx0;
//const int relay1 = 5; //pin D1 = GPIO5 , relay 1
//const int relay2 = 14; //pin D5 = GPIO14, relay 2
const int relay1 = 16;
const int relay2 = 5;
/// Serial port for debugging purposes Serial.begin(115200); Serial monitoring
AsyncWebServer server(80); // Create AsyncWebServer object on port 80
String readDSTemperatureC() // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
{
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
if (tempC == -127.00 || tempC == 85.00 )
{
Serial.println("Failed to read from DS18B20 sensor");
/////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////could you created README.MD file in your project folder with those notes?
return "--";
}
else
{
//Serial.print("Temperature Celsius: ");
//Serial.print(tempC);
}
return String(tempC);
}
const char index_html[] PROGMEM = R"rawliteral(
Fifusel, Reykjavik
Temperature Celsius%TEMPERATUREC%°C
Heaters are ON between -3 and 3 celcius
Design by tech company Raspjavik.is
Produced by Electropepper.is
Instalation by Bennirafvirki.is
)rawliteral";
String processor(const String& var) // Replaces placeholder with DHT values
{
//Serial.println(var);
if (var == "TEMPERATUREC")
{
return readDSTemperatureC();
}
return String();
}
void setup()
{
pinMode(relay1, OUTPUT);
digitalWrite(relay1, LOW);
pinMode(relay2, OUTPUT);
digitalWrite(relay2, LOW);
Serial.begin(115200); // Serial port for debugging purposes ( baud)
Serial.println();
sensors.begin(); // Start up the DS18B20 library
WiFi.begin(ssid, password); // Connect to Wi-Fi
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println(WiFi.localIP()); // Print ESP Local IP Address 192.168.1.18
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) // Route for root / web page
{
request->send_P(200, "text/html", index_html, processor);
});
server.on("/temperaturec", HTTP_GET, [](AsyncWebServerRequest * request)
{
request->send_P(200, "text/plain", readDSTemperatureC().c_str());
});
server.begin(); // Start server
}
void loop()
{
float tempC = sensors.getTempCByIndex(0);
if (tempC > tmin && tempC < tmax)
{
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
Serial.print("Temperature is ");
Serial.print(tempC);
Serial.println(" Celcius and the heaters are ON ");
}
else
{
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
Serial.print("Temperature is ");
Serial.print(tempC) ;
Serial.println(" Celcius and the heaters are OFF ");
}
delay(10000);
// wait for WiFi connection
if ((WiFi.status() == WL_CONNECTED))
{
WiFiClient client;
HTTPClient http;
Serial.print("[HTTP] begin...\n");
// configure traged server and url
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//could you created README.MD file in your project folder with those notes?
//change to: if tempC is between min and max, so it´s: 0 (OFF), 1 (ON), 2 sensor disconnected, 3 wire or resistance fail, 4
// if tempC = -127, sensor or resistance disconnect, if tempC = 85, sensor
int sensor_status = 0;
String link1 = "http://bennirafvirki.is/sensors/add/temperature/";
String link2 = String(tempC,DEC%4);
String link3 = "/address/";
String link4 = String(address);
String link5 = "/state/";
String link6 = String(sensor_status,DEC);
String link = link1 + link2 + link3 + link4 + link5 + link6 ;
http.begin(client,link); //Serial.print(link);
http.addHeader("Content-Type", "application/json");
Serial.print("[HTTP] POST...\n");
// start connection and send HTTP header and body
int httpCode = http.POST("{\"hello\":\"world\"}");
// httpCode will be negative on error
if (httpCode > 0)
{
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] POST... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK)
{
const String& payload = http.getString();
Serial.println("received payload:\n<<");
Serial.println(payload);
Serial.println(">>");
}
}
else
{
Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(time_of_delay);
}