/********* Pleasedontcode.com ********** Pleasedontcode thanks you for automatic code generation! Enjoy your code! - Terms and Conditions: You have a non-exclusive, revocable, worldwide, royalty-free license for personal and commercial use. Attribution is optional; modifications are allowed, but you're responsible for code maintenance. We're not liable for any loss or damage. For full terms, please visit pleasedontcode.com/termsandconditions. - Project: Smart Climate - Source Code NOT compiled for: ESP32 DevKit V1 - Source Code created on: 2024-09-28 18:53:06 ********* Pleasedontcode.com **********/ /****** SYSTEM REQUIREMENTS *****/ /****** SYSTEM REQUIREMENT 1 *****/ /* Connect to wifi, print ip address on first line of */ /* display, monitor temperatures and humidity for all */ /* 3 zones and print each sensor on a new line, when */ /* temperature lower than 21C, activate corresponding */ /* relay, when temp over 23 C, turn off the relay */ /****** SYSTEM REQUIREMENT 2 *****/ /* emulate a webserver that will print values for */ /* each zone and include a toggle switch and for each */ /* relay, in the webpage add the ability to turn on */ /* relays based on temperature or a timer */ /****** END SYSTEM REQUIREMENTS *****/ /****** DEFINITION OF LIBRARIES *****/ #include #include //https://github.com/rafaelnsantos/Relay #include //https://github.com/olikraus/U8g2_for_Adafruit_GFX #include // Include the Adafruit SSD1306 library #include // Include WiFi library #include // Include WebServer library #include // Include DHT sensor library /****** FUNCTION PROTOTYPES *****/ void setup(void); void loop(void); void updateOutputs(); void handleRoot(); // Function to handle root URL void readSensors(); // Function to read temperature and humidity /***** DEFINITION OF DIGITAL INPUT PINS *****/ const uint8_t Sensor1_DHT11_DOUT_PIN_D4 = 4; const uint8_t Sensor2_DHT11_DOUT_PIN_D13 = 13; /***** DEFINITION OF DIGITAL OUTPUT PINS *****/ const uint8_t Relay1_RelayModule_Signal_PIN_D16 = 16; const uint8_t Relay2_RelayModule_Signal_PIN_D17 = 17; /***** DEFINITION OF I2C PINS *****/ const uint8_t Display1_SSD1306OledDisplay_I2C_PIN_SDA_D21 = 21; const uint8_t Display1_SSD1306OledDisplay_I2C_PIN_SCL_D22 = 22; const uint8_t Display1_SSD1306OledDisplay_I2C_SLAVE_ADDRESS = 60; /***** DEFINITION OF OUTPUT RAW VARIABLES *****/ bool Relay1_RelayModule_Signal_PIN_D16_rawData = 0; bool Relay2_RelayModule_Signal_PIN_D17_rawData = 0; /***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/ float Relay1_RelayModule_Signal_PIN_D16_phyData = 0.0; float Relay2_RelayModule_Signal_PIN_D17_phyData = 0.0; // DHT sensor instances DHT dht1(Sensor1_DHT11_DOUT_PIN_D4, DHT11); DHT dht2(Sensor2_DHT11_DOUT_PIN_D13, DHT11); // Create relay instances for Relay1 and Relay2 Relay relay1(Relay1_RelayModule_Signal_PIN_D16, 1); // Relay on pin 16 Relay relay2(Relay2_RelayModule_Signal_PIN_D17, 1); // Relay on pin 17 // Create an instance of the Adafruit SSD1306 display Adafruit_SSD1306 display(Display1_SSD1306OledDisplay_I2C_SLAVE_ADDRESS, Display1_SSD1306OledDisplay_I2C_PIN_SDA_D21, Display1_SSD1306OledDisplay_I2C_PIN_SCL_D22); // Create an instance of the U8G2_FOR_ADAFRUIT_GFX class U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx; // WiFi credentials const char* ssid = "your_SSID"; // Replace with your WiFi SSID const char* password = "your_PASSWORD"; // Replace with your WiFi Password // Web server instance WebServer server(80); // Variables to store sensor readings float temperature1, humidity1; float temperature2, humidity2; void setup(void) { // Initialize serial communication Serial.begin(115200); // Connect to WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // Initialize the display display.begin(SSD1306_SWITCHCAPVCC); // Initialize the SSD1306 display u8g2_for_adafruit_gfx.begin(display); // Connect u8g2 procedures to Adafruit GFX // Initialize relays relay1.setRelayMode(relayModeAutomatic); // Set relay1 to automatic mode relay2.setRelayMode(relayModeAutomatic); // Set relay2 to automatic mode // Initialize DHT sensors dht1.begin(); dht2.begin(); // Set up web server routes server.on("/", handleRoot); server.begin(); } void loop(void) { // Refresh output data updateOutputs(); relay1.loop(); // Call loop function for relay1 relay2.loop(); // Call loop function for relay2 // Read sensors readSensors(); // Example of using the display display.clearDisplay(); // Clear the display u8g2_for_adafruit_gfx.setFont(u8g2_font_helvR14_tf); // Set font u8g2_for_adafruit_gfx.setCursor(0, 20); // Set cursor position u8g2_for_adafruit_gfx.print("IP: "); u8g2_for_adafruit_gfx.print(WiFi.localIP()); // Print IP address u8g2_for_adafruit_gfx.setCursor(0, 40); // Set cursor position u8g2_for_adafruit_gfx.print("T1: "); u8g2_for_adafruit_gfx.print(temperature1); u8g2_for_adafruit_gfx.print("C"); u8g2_for_adafruit_gfx.setCursor(0, 60); // Set cursor position u8g2_for_adafruit_gfx.print("T2: "); u8g2_for_adafruit_gfx.print(temperature2); u8g2_for_adafruit_gfx.print("C"); display.display(); // Display the content delay(2000); // Wait for 2 seconds // Handle client requests server.handleClient(); } void updateOutputs() { // Control relays based on temperature thresholds if (temperature1 < 21) { Relay1_RelayModule_Signal_PIN_D16_rawData = 1; // Turn on relay 1 } else if (temperature1 > 23) { Relay1_RelayModule_Signal_PIN_D16_rawData = 0; // Turn off relay 1 } if (temperature2 < 21) { Relay2_RelayModule_Signal_PIN_D17_rawData = 1; // Turn on relay 2 } else if (temperature2 > 23) { Relay2_RelayModule_Signal_PIN_D17_rawData = 0; // Turn off relay 2 } digitalWrite(Relay1_RelayModule_Signal_PIN_D16, Relay1_RelayModule_Signal_PIN_D16_rawData); digitalWrite(Relay2_RelayModule_Signal_PIN_D17, Relay2_RelayModule_Signal_PIN_D17_rawData); } void readSensors() { // Read temperature and humidity from DHT sensors humidity1 = dht1.readHumidity(); temperature1 = dht1.readTemperature(); humidity2 = dht2.readHumidity(); temperature2 = dht2.readTemperature(); } void handleRoot() { // Handle root URL and send HTML response server.send(200, "text/html", "

Temperature and Humidity

Zone 1: T: " + String(temperature1) + "C, H: " + String(humidity1) + "%

Zone 2: T: " + String(temperature2) + "C, H: " + String(humidity2) + "%

"); } /* END CODE */