/* New with XML */ #include #include #include #include #include #include #include #include #include #include "Adafruit_MCP23017.h" Adafruit_MCP23017 mcp; #define S0 D0 /* Assign Multiplexer pin S0 connect to pin D0 of NodeMCU */ #define S3 D3 /* Assign Multiplexer pin S3 connect to pin D3 of NodeMCU */ #define S1 D7 /* Assign Multiplexer pin S1 connect to pin D1 of NodeMCU */ #define S2 D8 /* Assign Multiplexer pin S2 connect to pin D2 of NodeMCU */ #define SIG A0 /* Assign SIG pin Analog output for all Multiplexer's channels to A0 of NodeMCU */ #define PUMP D6 #define solenoid0 0 //Connect Solenoid0 for Sens0 GPA0 on mcp #define solenoid1 1 //Connect Solenoid1 for Sens1 GPA1 on mcp #define solenoid2 2 //Connect Solenoid2 for Sens2 GPA2 on mcp #define solenoid3 3 //Connect Solenoid3 for Sens3 GPA3 on mcp #define solenoid4 4 //Connect Solenoid4 for Sens4 GPA4 on mcp #define solenoid5 5 //Connect Solenoid5 for Sens5 GPA5 on mcp #define solenoid6 6 //Connect Solenoid6 for Sens6 GPA6 on mcp #define solenoid7 7 //Connect Solenoid7 for Sens7 GPB0 on mcp #define solenoid8 8 //Connect Solenoid8 for Sens8 GPB1 on mcp #define solenoid9 9 //Connect Solenoid9 for Sens9 GPB2 on mcp #define solenoid10 10 //Connect Solenoid10 for Sens10 GPB3 on mcp #define solenoid11 11 //Connect Solenoid11 for Sens11 GPB4 on mcp #define solenoid12 12 //Connect Solenoid11 for Sens11 GPB5 on mcp #define solenoid13 13 //Connect Solenoid11 for Sens11 GPB6 on mcp #define solenoid14 14 //Connect Solenoid11 for Sens11 GPB7 on mcp #define solenoid15 15 //Connect Solenoid11 for Sens11 GPB8 on mcp int sensor[15]; /* Assign the name "sensor[0]" as analog output value from Channel C0 */ /* Assign the name "sensor[1]" as analog output value from Channel C1 */ /* Assign the name "sensor[2]" as analog output value from Channel C2 */ /* Assign the name "sensor[3]" as analog output value from Channel C3 */ /* Assign the name "sensor[4]" as analog output value from Channel C4 */ /* Assign the name "sensor[5]" as analog output value from Channel C5 */ /* Assign the name "sensor[6]" as analog output value from Channel C6 */ /* Assign the name "sensor[7]" as analog output value from Channel C7 */ /* Assign the name "sensor[8]" as analog output value from Channel C8 */ /* Assign the name "sensor[9]" as analog output value from Channel C9 */ /* Assign the name "sensor[10]" as analog output value from Channel C10 */ /* Assign the name "sensor[11]" as analog output value from Channel C11 */ /* Assign the name "sensor[12]" as analog output value from Channel C12 */ /* Assign the name "sensor[13]" as analog output value from Channel C13 */ /* Assign the name "sensor[14]" as analog output value from Channel C14 */ /* Assign the name "sensor[15]" as analog output value from Channel C15 */ String pumpstate = "OFF"; //pump for Status ON/OFF String solenoidState0 = "OFF"; //Solenoid0 for Status ON/OFF String solenoidState1 = "OFF"; //Solenoid1 for Status ON/OFF String solenoidState2 = "OFF"; //Solenoid2 for Status ON/OFF String solenoidState3 = "OFF"; //Solenoid3 for Status ON/OFF String solenoidState4 = "OFF"; //Solenoid4 for Status ON/OFF String solenoidState5 = "OFF"; //Solenoid5 for Status ON/OFF String solenoidState6 = "OFF"; //Solenoid6 for Status ON/OFF String solenoidState7 = "OFF"; //Solenoid7 for Status ON/OFF String solenoidState8 = "OFF"; //Solenoid8 for Status ON/OFF String solenoidState9 = "OFF"; //Solenoid9 for Status ON/OFF String solenoidState10 = "OFF"; //Solenoid10 for Status ON/OFF String solenoidState11 = "OFF"; //Solenoid11 for Status ON/OFF String solenoidState12 = "OFF"; //Solenoid11 for Status ON/OFF String solenoidState13 = "OFF"; //Solenoid11 for Status ON/OFF String solenoidState14 = "OFF"; //Solenoid11 for Status ON/OFF String solenoidState15 = "OFF"; //Solenoid11 for Status ON/OFF String XML; // pour envoyer le code XML a ma page web //User input from WebForm int Usermax0,Usermax1,Usermax2,Usermax3,Usermax4,Usermax5,Usermax6,Usermax7,Usermax8,Usermax9,Usermax10,Usermax11,Usermax12,Usermax13,Usermax14,Usermax15; int Usermin0,Usermin1,Usermin2,Usermin3,Usermin4,Usermin5,Usermin6,Usermin7,Usermin8,Usermin9,Usermin10,Usermin11,Usermin12,Usermin13,Usermin14,Usermin15; ESP8266WebServer server(80); #include "html.h" #include "readSensor.h" #include "jsonconfig1.h" void handleRoot(){ server.send_P(200, "text/html", INDEX_HTML); //Send web page } void handleReadUserPlantSelected(){ // Read Value from the User selected from the Html WebForm to String if(server.arg("S00max").toInt() != 0) {Usermax0 = server.arg("S00max").toInt();} if(server.arg("S00min").toInt() != 0) {Usermin0 = server.arg("S00min").toInt();} if(server.arg("S01max").toInt() != 0) {Usermax1 = server.arg("S01max").toInt();} if(server.arg("S01min").toInt() != 0) {Usermin1 = server.arg("S01min").toInt();} if(server.arg("S02max").toInt() != 0) {Usermax2 = server.arg("S02max").toInt();} if(server.arg("S02min").toInt() != 0) {Usermin2 = server.arg("S02min").toInt();} if(server.arg("S03max").toInt() != 0) {Usermax3 = server.arg("S03max").toInt();} if(server.arg("S03min").toInt() != 0) {Usermin3 = server.arg("S03min").toInt();} if(server.arg("S04max").toInt() != 0) {Usermax4 = server.arg("S04max").toInt();} if(server.arg("S04min").toInt() != 0) {Usermin4 = server.arg("S04min").toInt();} if(server.arg("S05max").toInt() != 0) {Usermax5 = server.arg("S05max").toInt();} if(server.arg("S05min").toInt() != 0) {Usermin5 = server.arg("S05min").toInt();} if(server.arg("S06max").toInt() != 0) {Usermax6 = server.arg("S06max").toInt();} if(server.arg("S06min").toInt() != 0) {Usermin6 = server.arg("S06min").toInt();} if(server.arg("S07max").toInt() != 0) {Usermax7 = server.arg("S07max").toInt();} if(server.arg("S07min").toInt() != 0) {Usermin7 = server.arg("S07min").toInt();} if(server.arg("S08max").toInt() != 0) {Usermax8 = server.arg("S08max").toInt();} if(server.arg("S08min").toInt() != 0) {Usermin8 = server.arg("S08min").toInt();} if(server.arg("S09max").toInt() != 0) {Usermax9 = server.arg("S09max").toInt();} if(server.arg("S09min").toInt() != 0) {Usermin9 = server.arg("S09min").toInt();} if(server.arg("S10max").toInt() != 0) {Usermax10 = server.arg("S10max").toInt();} if(server.arg("S10min").toInt() != 0) {Usermin10 = server.arg("S10min").toInt();} if(server.arg("S11max").toInt() != 0) {Usermax11 = server.arg("S11max").toInt();} if(server.arg("S11min").toInt() != 0) {Usermin11 = server.arg("S11min").toInt();} if(server.arg("S12max").toInt() != 0) {Usermax12 = server.arg("S12max").toInt();} if(server.arg("S12min").toInt() != 0) {Usermin12 = server.arg("S12min").toInt();} if(server.arg("S13max").toInt() != 0) {Usermax13 = server.arg("S13max").toInt();} if(server.arg("S13min").toInt() != 0) {Usermin13 = server.arg("S13min").toInt();} if(server.arg("S14max").toInt() != 0) {Usermax14 = server.arg("S14max").toInt();} if(server.arg("S14min").toInt() != 0) {Usermin14 = server.arg("S14min").toInt();} if(server.arg("S15max").toInt() != 0) {Usermax15 = server.arg("S15max").toInt();} if(server.arg("S15min").toInt() != 0) {Usermin15 = server.arg("S15min").toInt();} // Print Value to Serial Monitor Serial.println("Form Soil Humidity"); Serial.print("Max0: "); Serial.print(Usermax0); Serial.print("\t Min0: "); Serial.println(Usermin0); Serial.print("Max1: "); Serial.print(Usermax1); Serial.print("\t Min1: "); Serial.println(Usermin1); Serial.print("Max2: "); Serial.print(Usermax2); Serial.print("\t Min2: "); Serial.println(Usermin2); Serial.print("Max3: "); Serial.print(Usermax3); Serial.print("\t Min3: "); Serial.println(Usermin3); Serial.print("Max4: "); Serial.print(Usermax4); Serial.print("\t Min4: "); Serial.println(Usermin4); Serial.print("Max5: "); Serial.print(Usermax5); Serial.print("\t Min5: "); Serial.println(Usermin5); Serial.print("Max6: "); Serial.print(Usermax6); Serial.print("\t Min6: "); Serial.println(Usermin6); Serial.print("Max7: "); Serial.print(Usermax7); Serial.print("\t Min7: "); Serial.println(Usermin7); Serial.print("Max8: "); Serial.print(Usermax8); Serial.print("\t Min8: "); Serial.println(Usermin8); Serial.print("Max9: "); Serial.print(Usermax9); Serial.print("\t Min9: "); Serial.println(Usermin9); Serial.print("Max10: "); Serial.print(Usermax10); Serial.print("\t Min10: "); Serial.println(Usermin10); Serial.print("Max11: "); Serial.print(Usermax11); Serial.print("\t Min11: "); Serial.println(Usermin11); Serial.print("Max12: "); Serial.print(Usermax12); Serial.print("\t Min12: "); Serial.println(Usermin12); Serial.print("Max13: "); Serial.print(Usermax13); Serial.print("\t Min13: "); Serial.println(Usermin13); Serial.print("Max14: "); Serial.print(Usermax14); Serial.print("\t Min14: "); Serial.println(Usermin14); Serial.print("Max15: "); Serial.print(Usermax15); Serial.print("\t Min15: "); Serial.println(Usermin15); if(!saveConfiguration) { Serial.println(F("failed to Save...")); } else { Serial.println(F("Saved OK...")); } server.sendHeader("Location","/"); // Add header to go to the home page again server.send(303); // Send it back to the browser with an HTTP status 303 } void handleNotFound() { String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); } // include read sensor // Drive the Solenoid String solenoidStatus(int sensor, int solenoidPin, int SoilHumidityMax, int SoilHumidityMin) { String solenoidState; if(sensor <= SoilHumidityMin) { solenoidState = "OFF"; mcp.digitalWrite(solenoidPin,LOW); } else if(sensor >= SoilHumidityMax){ solenoidState = "ON"; mcp.digitalWrite(solenoidPin,HIGH); } return(solenoidState); } // Read Solenoid status and display status in html void driveSolenoid() { solenoidState0 = solenoidStatus(sensor[0], solenoid0, Usermax0, Usermin0); solenoidState1 = solenoidStatus(sensor[1], solenoid1, Usermax1, Usermin1); solenoidState2 = solenoidStatus(sensor[2], solenoid2, Usermax2, Usermin2); solenoidState3 = solenoidStatus(sensor[3], solenoid3, Usermax3, Usermin3); solenoidState4 = solenoidStatus(sensor[4], solenoid4, Usermax4, Usermin4); solenoidState5 = solenoidStatus(sensor[5], solenoid5, Usermax5, Usermin5); solenoidState6 = solenoidStatus(sensor[6], solenoid6, Usermax6, Usermin6); solenoidState7 = solenoidStatus(sensor[7], solenoid7, Usermax7, Usermin7); solenoidState8 = solenoidStatus(sensor[8], solenoid8, Usermax8, Usermin8); solenoidState9 = solenoidStatus(sensor[9], solenoid9, Usermax9, Usermin9); solenoidState10 = solenoidStatus(sensor[10], solenoid10, Usermax10, Usermin10); solenoidState11 = solenoidStatus(sensor[11], solenoid11, Usermax11, Usermin11); solenoidState12 = solenoidStatus(sensor[12], solenoid12, Usermax12, Usermin12); solenoidState13 = solenoidStatus(sensor[13], solenoid13, Usermax13, Usermin13); solenoidState14 = solenoidStatus(sensor[14], solenoid14, Usermax14, Usermin14); solenoidState15 = solenoidStatus(sensor[15], solenoid15, Usermax15, Usermin15); } // Drive the pump and display status in html void drivePump() { if(solenoidState0 == "OFF" && solenoidState1 == "OFF" && solenoidState2 == "OFF" && solenoidState3 == "OFF" && solenoidState4 == "OFF" && solenoidState5 == "OFF" && solenoidState6 == "OFF" && solenoidState7 == "OFF" && solenoidState8 == "OFF" && solenoidState9 == "OFF" && solenoidState10 == "OFF" && solenoidState11 == "OFF" && solenoidState12 == "OFF" && solenoidState13 == "OFF" && solenoidState14 == "OFF" && solenoidState15 == "OFF") { if(pumpstate == "ON") { pumpstate = "OFF"; digitalWrite(PUMP,LOW); } } else { if(pumpstate == "OFF") { pumpstate = "ON"; digitalWrite(PUMP,HIGH); } } } void handleXML(){ XML=""; XML+=""; XML+=""; XML+= pumpstate; XML+=""; XML+=""; XML+= sensor[0]; XML+=""; XML+=""; XML+= sensor[1]; XML+=""; XML+=""; XML+= sensor[2]; XML+=""; XML+=""; XML+= sensor[3]; XML+=""; XML+=""; XML+= sensor[4]; XML+=""; XML+=""; XML+= sensor[5]; XML+=""; XML+=""; XML+= sensor[6]; XML+=""; XML+=""; XML+= sensor[7]; XML+=""; XML+=""; XML+= sensor[8]; XML+=""; XML+=""; XML+= sensor[9]; XML+=""; XML+=""; XML+= sensor[10]; XML+=""; XML+=""; XML+= sensor[11]; XML+=""; XML+=""; XML+= sensor[12]; XML+=""; XML+=""; XML+= sensor[13]; XML+=""; XML+=""; XML+= sensor[14]; XML+=""; XML+=""; XML+= sensor[15]; XML+=""; XML+=""; XML+= solenoidState0; XML+=""; XML+=""; XML+= solenoidState1; XML+=""; XML+=""; XML+= solenoidState2; XML+=""; XML+=""; XML+= solenoidState3; XML+=""; XML+=""; XML+= solenoidState4; XML+=""; XML+=""; XML+= solenoidState5; XML+=""; XML+=""; XML+= solenoidState6; XML+=""; XML+=""; XML+= solenoidState7; XML+=""; XML+=""; XML+= solenoidState8; XML+=""; XML+=""; XML+= solenoidState9; XML+=""; XML+=""; XML+= solenoidState10; XML+=""; XML+=""; XML+= solenoidState11; XML+=""; XML+=""; XML+= solenoidState12; XML+=""; XML+=""; XML+= solenoidState13; XML+=""; XML+=""; XML+= solenoidState14; XML+=""; XML+=""; XML+= solenoidState15; XML+=""; XML+=""; XML+= Usermax0; XML+=""; XML+=""; XML+= Usermin0; XML+=""; XML+=""; XML+= Usermax1; XML+=""; XML+=""; XML+= Usermin1; XML+=""; XML+=""; XML+= Usermax2; XML+=""; XML+=""; XML+= Usermin2; XML+=""; XML+=""; XML+= Usermax3; XML+=""; XML+=""; XML+= Usermin3; XML+=""; XML+=""; XML+= Usermax4; XML+=""; XML+=""; XML+= Usermin4; XML+=""; XML+=""; XML+= Usermax5; XML+=""; XML+=""; XML+= Usermin5; XML+=""; XML+=""; XML+= Usermax6; XML+=""; XML+=""; XML+= Usermin6; XML+=""; XML+=""; XML+= Usermax7; XML+=""; XML+=""; XML+= Usermin7; XML+=""; XML+=""; XML+= Usermax8; XML+=""; XML+=""; XML+= Usermin8; XML+=""; XML+=""; XML+= Usermax9; XML+=""; XML+=""; XML+= Usermin9; XML+=""; XML+=""; XML+= Usermax10; XML+=""; XML+=""; XML+= Usermin10; XML+=""; XML+=""; XML+= Usermax11; XML+=""; XML+=""; XML+= Usermin11; XML+=""; XML+=""; XML+= Usermax12; XML+=""; XML+=""; XML+= Usermin12; XML+=""; XML+=""; XML+= Usermax13; XML+=""; XML+=""; XML+= Usermin13; XML+=""; XML+=""; XML+= Usermax14; XML+=""; XML+=""; XML+= Usermin14; XML+=""; XML+=""; XML+= Usermax15; XML+=""; XML+=""; XML+= Usermin15; XML+=""; XML+=""; server.send(200,"text/xml",XML); } void setup() { Serial.begin(115200); mcp.begin(); pinMode(S0,OUTPUT); /* Define digital pin as output to the Multiplexer pin SO */ pinMode(S1,OUTPUT); /* Define digital pin as output to the Multiplexer pin S1 */ pinMode(S2,OUTPUT); /* Define digital pin as output to the Multiplexer pin S2 */ pinMode(S3,OUTPUT); /* Define digital pin as output to the Multiplexer pin S3 */ pinMode(SIG, INPUT); /* Define analog pin as input from the Multiplexer pin SIG */ pinMode(PUMP,OUTPUT); /* Define digital pin os output to control pump */ mcp.pinMode(solenoid0, OUTPUT); mcp.pinMode(solenoid1, OUTPUT); mcp.pinMode(solenoid2, OUTPUT); mcp.pinMode(solenoid3, OUTPUT); mcp.pinMode(solenoid4, OUTPUT); mcp.pinMode(solenoid5, OUTPUT); mcp.pinMode(solenoid6, OUTPUT); mcp.pinMode(solenoid7, OUTPUT); mcp.pinMode(solenoid8, OUTPUT); mcp.pinMode(solenoid9, OUTPUT); mcp.pinMode(solenoid10, OUTPUT); mcp.pinMode(solenoid11, OUTPUT); mcp.pinMode(solenoid12, OUTPUT); mcp.pinMode(solenoid13, OUTPUT); mcp.pinMode(solenoid14, OUTPUT); mcp.pinMode(solenoid15, OUTPUT); digitalWrite(PUMP,LOW); mcp.digitalWrite(solenoid0,LOW); mcp.digitalWrite(solenoid1,LOW); mcp.digitalWrite(solenoid2,LOW); mcp.digitalWrite(solenoid3,LOW); mcp.digitalWrite(solenoid4,LOW); mcp.digitalWrite(solenoid5,LOW); mcp.digitalWrite(solenoid6,LOW); mcp.digitalWrite(solenoid7,LOW); mcp.digitalWrite(solenoid8,LOW); mcp.digitalWrite(solenoid9,LOW); mcp.digitalWrite(solenoid10,LOW); mcp.digitalWrite(solenoid11,LOW); mcp.digitalWrite(solenoid12,LOW); mcp.digitalWrite(solenoid13,LOW); mcp.digitalWrite(solenoid14,LOW); mcp.digitalWrite(solenoid15,LOW); Serial.println(""); delay(1000); Serial.println("Mounting FS..."); if (!LittleFS.begin()) { Serial.println("Failed to mount file system"); return; } if(!loadConfiguration) { Serial.println(F("Failed to load...")); } else { Serial.println(F("Load OK...")); } delay(1000); WiFiManager wifiManager; wifiManager.autoConnect("AutoConnectAP"); Serial.println("Yourconnected...yeey :)"); server.on("/", handleRoot); server.on("/reqEtatVariables",handleXML); server.on("/get",handleReadUserPlantSelected); server.onNotFound(handleNotFound); /* page not found */ server.begin(); Serial.println("HTTP server started"); Serial.println(WiFi.localIP()); } void loop() { server.handleClient(); getSoilHumidity(); driveSolenoid(); drivePump(); }