/* New with JSON */ #include //https://github.com/esp8266/Arduino #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 SoilHumidity 430 /* Assign the level of the soil humidity to irrigate the plant */ #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"; String solenoidState0 = "OFF"; String solenoidState1 = "OFF"; String solenoidState2 = "OFF"; String solenoidState3 = "OFF"; String solenoidState4 = "OFF"; String solenoidState5 = "OFF"; String solenoidState6 = "OFF"; String solenoidState7 = "OFF"; String solenoidState8 = "OFF"; String solenoidState9 = "OFF"; String solenoidState10 = "OFF"; String solenoidState11 = "OFF"; String solenoidState12 = "OFF"; String solenoidState13 = "OFF"; String solenoidState14 = "OFF"; String solenoidState15 = "OFF"; String XML; // pour envoyer le code XML a ma page web ESP8266WebServer server(80); static const char PROGMEM INDEX_HTML[] = R"rawliteral( Irrigation Viewer

Irrigation System Viewer

ssss
)rawliteral"; void handleRoot(){ server.send_P(200, "text/html", INDEX_HTML); } 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); } // read soil humiduty and display in html void getSoilHumidity() { // Channel 0 (C0 pin - binary output 0,0,0,0) digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW); sensor[0] = analogRead(SIG); // Channel 1 (C1 pin - binary output 1,0,0,0) digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW); sensor[1] = analogRead(SIG); // Channel 2 (C2 pin - binary output 0,1,0,0) digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,LOW); sensor[2] = analogRead(SIG); // Channel 3 (C3 pin - binary output 1,1,0,0) digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,LOW); sensor[3] = analogRead(SIG); // Channel 4 (C4 pin - binary output 0,0,1,0) digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,LOW); sensor[4] = analogRead(SIG); // Channel 5 (C5 pin - binary output 1,0,1,0) digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,LOW); sensor[5] = analogRead(SIG); // Channel 6 (C6 pin - binary output 0,1,1,0) digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,LOW); sensor[6] = analogRead(SIG); // Channel 7 (C7 pin - binary output 1,1,1,0) digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,LOW); sensor[7] = analogRead(SIG); // Channel 8 (C8 pin - binary output 0,0,0,1) digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,HIGH); sensor[8] = analogRead(SIG); // Channel 9 (C9 pin - binary output 1,0,0,1) digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,HIGH); sensor[9] = analogRead(SIG); // Channel 10 (C10 pin - binary output 0,1,0,1) digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,HIGH); sensor[10] = analogRead(SIG); // Channel 11 (C11 pin - binary output 1,1,0,1) digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,HIGH); sensor[11] = analogRead(SIG); // Channel 12 (C12 pin - binary output 0,0,1,1) digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); sensor[12] = analogRead(SIG); // Channel 13 (C13 pin - binary output 1,0,1,1) digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); sensor[13] = analogRead(SIG); // Channel 14 (C14 pin - binary output 0,1,1,1) digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); sensor[14] = analogRead(SIG); // Channel 15 (C15 pin - binary output 1,1,1,1) digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); sensor[15] = analogRead(SIG); } // Drive the Solenoid String solenoidStatus(int sensor, int solenoidPin) { String solenoidState; if(sensor <= SoilHumidity) { solenoidState = "OFF"; mcp.digitalWrite(solenoidPin,LOW); } else { solenoidState = "ON"; mcp.digitalWrite(solenoidPin,HIGH); } return(solenoidState); } // Read Solenoid status and display status in html void driveSolenoid() { solenoidState0 = solenoidStatus(sensor[0], solenoid0); solenoidState1 = solenoidStatus(sensor[1], solenoid1); solenoidState2 = solenoidStatus(sensor[2], solenoid2); solenoidState3 = solenoidStatus(sensor[3], solenoid3); solenoidState4 = solenoidStatus(sensor[4], solenoid4); solenoidState5 = solenoidStatus(sensor[5], solenoid5); solenoidState6 = solenoidStatus(sensor[6], solenoid6); solenoidState7 = solenoidStatus(sensor[7], solenoid7); solenoidState8 = solenoidStatus(sensor[8], solenoid8); solenoidState9 = solenoidStatus(sensor[9], solenoid9); solenoidState12 = solenoidStatus(sensor[10], solenoid10); solenoidState11 = solenoidStatus(sensor[11], solenoid11); solenoidState12 = solenoidStatus(sensor[12], solenoid12); solenoidState13 = solenoidStatus(sensor[13], solenoid13); solenoidState14 = solenoidStatus(sensor[14], solenoid14); solenoidState15 = solenoidStatus(sensor[15], solenoid15); } // 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+=""; 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); WiFiManager wifiManager; wifiManager.autoConnect("AutoConnectAP"); Serial.println("Yourconnected...yeey :)"); server.on("/", handleRoot); server.on("/reqEtatVariables",handleXML); server.onNotFound(handleNotFound); /* page not found */ server.begin(); Serial.println("HTTP server started"); Serial.println(WiFi.localIP()); } void loop() { server.handleClient(); getSoilHumidity(); driveSolenoid(); drivePump(); }