Advertisement
noam76

main

Feb 26th, 2021 (edited)
1,100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 14.99 KB | None | 0 0
  1. /* New with JSON */
  2. #include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino
  3. #include <DNSServer.h>
  4. #include <ESP8266WebServer.h>
  5. #include <WiFiManager.h>
  6. #include <Wire.h>
  7. #include "Adafruit_MCP23017.h"
  8. Adafruit_MCP23017 mcp;
  9.  
  10. #define S0 D0   /* Assign Multiplexer pin S0 connect to pin D0 of NodeMCU */
  11. #define S3 D3   /* Assign Multiplexer pin S3 connect to pin D3 of NodeMCU */
  12. #define S1 D7   /* Assign Multiplexer pin S1 connect to pin D1 of NodeMCU */
  13. #define S2 D8   /* Assign Multiplexer pin S2 connect to pin D2 of NodeMCU */
  14. #define SIG A0  /* Assign SIG pin Analog output for all Multiplexer's channels to A0 of NodeMCU */
  15. #define SoilHumidity 430 /* Assign the level of the soil humidity to irrigate the plant */
  16.  
  17. #define PUMP D6
  18. #define solenoid0 0   //Connect Solenoid0 for Sens0 GPA0 on mcp
  19. #define solenoid1 1   //Connect Solenoid1 for Sens1 GPA1 on mcp
  20. #define solenoid2 2   //Connect Solenoid2 for Sens2 GPA2 on mcp
  21. #define solenoid3 3   //Connect Solenoid3 for Sens3 GPA3 on mcp
  22. #define solenoid4 4   //Connect Solenoid4 for Sens4 GPA4 on mcp
  23. #define solenoid5 5   //Connect Solenoid5 for Sens5 GPA5 on mcp
  24. #define solenoid6 6   //Connect Solenoid6 for Sens6 GPA6 on mcp
  25. #define solenoid7 7   //Connect Solenoid7 for Sens7 GPB0 on mcp
  26. #define solenoid8 8   //Connect Solenoid8 for Sens8 GPB1 on mcp
  27. #define solenoid9 9   //Connect Solenoid9 for Sens9 GPB2 on mcp
  28. #define solenoid10 10 //Connect Solenoid10 for Sens10 GPB3 on mcp
  29. #define solenoid11 11 //Connect Solenoid11 for Sens11 GPB4 on mcp
  30. #define solenoid12 12 //Connect Solenoid11 for Sens11 GPB5 on mcp
  31. #define solenoid13 13 //Connect Solenoid11 for Sens11 GPB6 on mcp
  32. #define solenoid14 14 //Connect Solenoid11 for Sens11 GPB7 on mcp
  33. #define solenoid15 15 //Connect Solenoid11 for Sens11 GPB8 on mcp
  34.  
  35. // int sensors[15];
  36. int sensor0;    /* Assign the name "sensor0" as analog output value from Channel C0 */
  37. int sensor1;    /* Assign the name "sensor1" as analog output value from Channel C1 */
  38. int sensor2;    /* Assign the name "sensor2" as analog output value from Channel C2 */
  39. int sensor3;    /* Assign the name "sensor3" as analog output value from Channel C3 */
  40. int sensor4;    /* Assign the name "sensor4" as analog output value from Channel C4 */
  41. int sensor5;    /* Assign the name "sensor5" as analog output value from Channel C5 */
  42. int sensor6;    /* Assign the name "sensor6" as analog output value from Channel C6 */
  43. int sensor7;    /* Assign the name "sensor7" as analog output value from Channel C7 */
  44. int sensor8;    /* Assign the name "sensor8" as analog output value from Channel C8 */
  45. int sensor9;    /* Assign the name "sensor9" as analog output value from Channel C9 */
  46. int sensor10;   /* Assign the name "sensor10" as analog output value from Channel C10 */
  47. int sensor11;   /* Assign the name "sensor11" as analog output value from Channel C11 */
  48. int sensor12;   /* Assign the name "sensor12" as analog output value from Channel C12 */
  49. int sensor13;   /* Assign the name "sensor13" as analog output value from Channel C13 */
  50. int sensor14;   /* Assign the name "sensor14" as analog output value from Channel C14 */
  51. int sensor15;   /* Assign the name "sensor15" as analog output value from Channel C15 */
  52.  
  53. // int SoilHumidity = 525;
  54. String pumpstate = "OFF";
  55. String solenoidState0 = "OFF";
  56. String solenoidState1 = "OFF";
  57. String solenoidState2 = "OFF";
  58. String solenoidState3 = "OFF";
  59. String solenoidState4 = "OFF";
  60. String solenoidState5 = "OFF";
  61. String solenoidState6 = "OFF";
  62. String solenoidState7 = "OFF";
  63. String solenoidState8 = "OFF";
  64. String solenoidState9 = "OFF";
  65. String solenoidState10 = "OFF";
  66. String solenoidState11 = "OFF";
  67. String solenoidState12 = "OFF";
  68. String solenoidState13 = "OFF";
  69. String solenoidState14 = "OFF";
  70. String solenoidState15 = "OFF";
  71.  
  72. ESP8266WebServer server(80);
  73.  
  74. static const char PROGMEM INDEX_HTML[] = R"rawliteral(
  75. <!DOCTYPE html>
  76. <html>
  77. <head>
  78. <meta name="viewport" content=meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
  79. <title>DHT Monitor</title>
  80. <style type="text/css">
  81.  body{
  82.      padding: 35px;
  83.      background-color: #222222;
  84.     }
  85.  h1{
  86.     color: #FFFFFF;
  87.     font-family: sans-serif;
  88.    }
  89.  p{
  90.    color: #FFFFFF;
  91.    font-family: sans-serif;
  92.    font-size: 18px;
  93.    }
  94. span{
  95.    padding-left: 80px;
  96. }
  97.  </style>
  98. </head>
  99. <body>
  100. <h1>Irrigation System Viewer</h1>
  101. <p id="pumpState"></p>
  102. <p id="t0"><span id="s0"></span></p>
  103. <p id="t1"><span id="s0"></span></p>
  104. <p id="t2"><span id="s2"></span></p>
  105. <p id="t3"><span id="s3"></span></p>
  106. <p id="t4"><span id="s4"></span></p>
  107. <body>
  108. <script type="text/javascript">
  109.   refresh();
  110.   setInterval(refresh, 1000);
  111.   function refresh(){
  112.     refreshSoilHumidity();
  113.     refreshSolenoid();
  114.     refreshPump();
  115.   }
  116.  
  117.   function refreshSoilHumidity(){
  118.     var xmlhttp = new XMLHttpRequest();
  119.     xmlhttp.onreadystatechange = function() {
  120.       if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200){
  121.        const parsedData = JSON.parse(xmlhttp.responseText);
  122.        document.getElementById("t0").innerHTML = "SoilHumidity Sensor 0: " + parsedData.t0 + "%";
  123.        document.getElementById("t1").innerHTML = "SoilHumidity Sensor 1: " + parsedData.t1 + "%";
  124.        document.getElementById("t2").innerHTML = "SoilHumidity Sensor 2: " + parsedData.t2 + "%";
  125.        document.getElementById("t3").innerHTML = "SoilHumidity Sensor 3: " + parsedData.t3 + "%";
  126.        document.getElementById("t4").innerHTML = "SoilHumidity Sensor 4: " + parsedData.t4 + "%";
  127.       }
  128.     };
  129.     xmlhttp.open("GET", "/SoilHumidity", true);
  130.     xmlhttp.send();
  131.   }
  132.  
  133.   function refreshSolenoid(){
  134.     var xmlhttp = new XMLHttpRequest();
  135.     xmlhttp.onreadystatechange = function() {
  136.       if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200){
  137.        const parsedData = JSON.parse(xmlhttp.responseText);
  138.        document.getElementById("s0").innerHTML = "Solenoid0 State 0: " + parsedData.s0;
  139.        document.getElementById("s1").innerHTML = "Solenoid1 State 1: " + parsedData.s1;
  140.        document.getElementById("s2").innerHTML = "Solenoid2 State 2: " + parsedData.s2;
  141.        document.getElementById("s3").innerHTML = "Solenoid3 State 3: " + parsedData.s3;
  142.        document.getElementById("s4").innerHTML = "Solenoid4 State 4: " + parsedData.s4;
  143.       }
  144.     };
  145.     xmlhttp.open("GET", "/Solenoid", true);
  146.     xmlhttp.send();
  147.   }
  148.  
  149.   function refreshPump(){
  150.     var xmlhttp = new XMLHttpRequest();
  151.     xmlhttp.onreadystatechange = function() {
  152.       if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200){
  153.        document.getElementById("pumpState").innerHTML = "Pump State: " + this.responseText;
  154.       }
  155.     };
  156.     xmlhttp.open("GET", "/pump", true);
  157.     xmlhttp.send();
  158.    }
  159. </script>
  160. </html>
  161. )rawliteral";
  162.  
  163. void handleRoot(){
  164.   server.send_P(200, "text/html", INDEX_HTML);
  165. }
  166.  
  167. void handleNotFound() {
  168.   String message = "File Not Found\n\n";
  169.   message += "URI: ";
  170.   message += server.uri();
  171.   message += "\nMethod: ";
  172.   message += (server.method() == HTTP_GET) ? "GET" : "POST";
  173.   message += "\nArguments: ";
  174.   message += server.args();
  175.   message += "\n";
  176.   for (uint8_t i = 0; i < server.args(); i++) {
  177.     message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  178.   }
  179.   server.send(404, "text/plain", message);
  180. }
  181.  
  182. // read soil humiduty and display in html
  183. void getSoilHumidity() {
  184.   // Channel 0 (C0 pin - binary output 0,0,0,0)
  185.   digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW);
  186.   sensor0 = analogRead(SIG);
  187.  
  188.   // Channel 1 (C1 pin - binary output 1,0,0,0)
  189.   digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW);
  190.   sensor1 = analogRead(SIG);
  191.  
  192.   // Channel 2 (C2 pin - binary output 0,1,0,0)
  193.   digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,LOW);
  194.   sensor2 = analogRead(SIG);
  195.  
  196.   // Channel 3 (C3 pin - binary output 1,1,0,0)
  197.   digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,LOW);
  198.   sensor3 = analogRead(SIG);
  199.  
  200.   // Channel 4 (C4 pin - binary output 0,0,1,0)
  201.   digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,LOW);
  202.   sensor4 = analogRead(SIG);
  203.  
  204.   // Channel 5 (C5 pin - binary output 1,0,1,0)
  205.   digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,LOW);
  206.   sensor5 = analogRead(SIG);
  207.  
  208.   // Channel 6 (C6 pin - binary output 0,1,1,0)
  209.   digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,LOW);
  210.   sensor6 = analogRead(SIG);
  211.  
  212.   // Channel 7 (C7 pin - binary output 1,1,1,0)
  213.   digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,LOW);
  214.   sensor7 = analogRead(SIG);
  215.  
  216.   // Channel 8 (C8 pin - binary output 0,0,0,1)
  217.   digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,HIGH);
  218.   sensor8 = analogRead(SIG);
  219.  
  220.   // Channel 9 (C9 pin - binary output 1,0,0,1)
  221.   digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,HIGH);
  222.   sensor9 = analogRead(SIG);
  223.  
  224.   // Channel 10 (C10 pin - binary output 0,1,0,1)
  225.   digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,HIGH);
  226.   sensor10 = analogRead(SIG);
  227.  
  228.   // Channel 11 (C11 pin - binary output 1,1,0,1)
  229.   digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,LOW); digitalWrite(S3,HIGH);
  230.   sensor11 = analogRead(SIG);
  231.  
  232.   // Channel 12 (C12 pin - binary output 0,0,1,1)
  233.   digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH);
  234.   sensor12 = analogRead(SIG);
  235.  
  236.   // Channel 13 (C13 pin - binary output 1,0,1,1)
  237.   digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH);
  238.   sensor13 = analogRead(SIG);
  239.  
  240.   // Channel 14 (C14 pin - binary output 0,1,1,1)
  241.   digitalWrite(S0,LOW); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH);
  242.   sensor14 = analogRead(SIG);
  243.  
  244.   // Channel 15 (C15 pin - binary output 1,1,1,1)
  245.   digitalWrite(S0,HIGH); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH);
  246.   sensor15 = analogRead(SIG);
  247.  
  248.   sensor1 = 532;
  249.   sensor2 = 345;
  250.   sensor3 = 555;
  251.   sensor4 = 269;
  252.   // Serial.println(sensor0);
  253.   String json = "{\"t0\":" + String(sensor0) + ",\"t1\":" + String(sensor1)+ ",\"t2\":" + String(sensor2)+ ",\"t3\":" + String(sensor3)+ ",\"t4\":" + String(sensor4)+ "}";
  254.   server.send (200, "application/json", json);
  255. }
  256.  
  257. // Read Solenoid status and display status in html
  258. void driveSolenoid() {
  259.   solenoidState0 = solneoidStatus(sensor0, solenoid0);
  260.   solenoidState1 = solneoidStatus(sensor1, solenoid1);
  261.   solenoidState2 = solneoidStatus(sensor2, solenoid2);
  262.   solenoidState3 = solneoidStatus(sensor3, solenoid3);
  263.   solenoidState4 = solneoidStatus(sensor4, solenoid4);
  264.   solenoidState5 = solneoidStatus(sensor5, solenoid5);
  265.   solenoidState6 = solneoidStatus(sensor6, solenoid6);
  266.   solenoidState7 = solneoidStatus(sensor7, solenoid7);
  267.   solenoidState8 = solneoidStatus(sensor8, solenoid8);
  268.   solenoidState9 = solneoidStatus(sensor9, solenoid9);
  269.   solenoidState12 = solneoidStatus(sensor10, solenoid10);
  270.   solenoidState11 = solneoidStatus(sensor11, solenoid11);
  271.   solenoidState12 = solneoidStatus(sensor12, solenoid12);
  272.   solenoidState13 = solneoidStatus(sensor13, solenoid13);
  273.   solenoidState14 = solneoidStatus(sensor14, solenoid14);
  274.   solenoidState15 = solneoidStatus(sensor15, solenoid15);
  275.   String json1 = "{\"s0\":" + String(solenoidState0) + ",\"s1\":" + String(solenoidState1)+ ",\"s2\":" + String(solenoidState2)+ ",\"s3\":" + String(solenoidState3)+ ",\"s4\":" + String(solenoidState4)+ "}";
  276.   server.send (200, "application/json", json1);
  277. }
  278.  
  279. // Drive the Solenoid
  280. String solneoidStatus(int sensor, int solenoidPin) {
  281.   String solenoidState;
  282.   if(sensor <= SoilHumidity) {
  283.     solenoidState = "OFF";
  284.     mcp.digitalWrite(solenoidPin,LOW);
  285.   }
  286.   else {
  287.   solenoidState = "ON";
  288.   mcp.digitalWrite(solenoidPin,HIGH);
  289.   }
  290.   return(solenoidState);
  291. }
  292.  
  293. // Drive the pump and display status in html
  294. void drivePump() {
  295.   if(solenoidState0 == "OFF" && solenoidState1 == "OFF" && solenoidState2 == "OFF" && solenoidState3 == "OFF" &&
  296.      solenoidState4 == "OFF" && solenoidState5 == "OFF" && solenoidState6 == "OFF" && solenoidState7 == "OFF" &&
  297.      solenoidState8 == "OFF" && solenoidState9 == "OFF" && solenoidState10 == "OFF" && solenoidState11 == "OFF" &&
  298.      solenoidState12 == "OFF" && solenoidState13 == "OFF" && solenoidState14 == "OFF" && solenoidState15 == "OFF") {
  299.     if(pumpstate == "ON") {
  300.       pumpstate = "OFF";
  301.       digitalWrite(PUMP,LOW);
  302.     }
  303.   }
  304.   else {
  305.     if(pumpstate == "OFF") {
  306.     pumpstate = "ON";
  307.     digitalWrite(PUMP,HIGH);
  308.     }
  309.   }
  310.   server.send(200, "text/plain", pumpstate);
  311. }
  312.  
  313. void setup() {
  314.   Serial.begin(115200);
  315.   mcp.begin();
  316.   pinMode(S0,OUTPUT);   /* Define digital pin as output to the Multiplexer pin SO */
  317.   pinMode(S1,OUTPUT);   /* Define digital pin as output to the Multiplexer pin S1 */
  318.   pinMode(S2,OUTPUT);   /* Define digital pin as output to the Multiplexer pin S2 */
  319.   pinMode(S3,OUTPUT);   /* Define digital pin as output to the Multiplexer pin S3 */
  320.   pinMode(SIG, INPUT);  /* Define analog pin as input from the Multiplexer pin SIG */
  321.   pinMode(PUMP,OUTPUT); /* Define digital pin os output to control pump */
  322.   mcp.pinMode(solenoid0, OUTPUT);
  323.   mcp.pinMode(solenoid1, OUTPUT);
  324.   mcp.pinMode(solenoid2, OUTPUT);
  325.   mcp.pinMode(solenoid3, OUTPUT);
  326.   mcp.pinMode(solenoid4, OUTPUT);
  327.   mcp.pinMode(solenoid5, OUTPUT);
  328.   mcp.pinMode(solenoid6, OUTPUT);
  329.   mcp.pinMode(solenoid7, OUTPUT);
  330.   mcp.pinMode(solenoid8, OUTPUT);
  331.   mcp.pinMode(solenoid9, OUTPUT);
  332.   mcp.pinMode(solenoid10, OUTPUT);
  333.   mcp.pinMode(solenoid11, OUTPUT);
  334.   mcp.pinMode(solenoid12, OUTPUT);
  335.   mcp.pinMode(solenoid13, OUTPUT);
  336.   mcp.pinMode(solenoid14, OUTPUT);
  337.   mcp.pinMode(solenoid15, OUTPUT);
  338.   digitalWrite(PUMP,LOW);
  339.   mcp.digitalWrite(solenoid0,LOW);
  340.   mcp.digitalWrite(solenoid1,LOW);
  341.   mcp.digitalWrite(solenoid2,LOW);
  342.   mcp.digitalWrite(solenoid3,LOW);
  343.   mcp.digitalWrite(solenoid4,LOW);
  344.   mcp.digitalWrite(solenoid5,LOW);
  345.   mcp.digitalWrite(solenoid6,LOW);
  346.   mcp.digitalWrite(solenoid7,LOW);
  347.   mcp.digitalWrite(solenoid8,LOW);
  348.   mcp.digitalWrite(solenoid9,LOW);
  349.   mcp.digitalWrite(solenoid10,LOW);
  350.   mcp.digitalWrite(solenoid11,LOW);
  351.   mcp.digitalWrite(solenoid12,LOW);
  352.   mcp.digitalWrite(solenoid13,LOW);
  353.   mcp.digitalWrite(solenoid14,LOW);
  354.   mcp.digitalWrite(solenoid15,LOW);
  355.   WiFiManager wifiManager;
  356.   wifiManager.autoConnect("AutoConnectAP");
  357.   Serial.println("Yourconnected...yeey :)");
  358.  
  359.   server.on("/", handleRoot);
  360.   server.on("/SoilHumidity", HTTP_GET, getSoilHumidity);
  361.   server.on("/Solenoid", HTTP_GET, driveSolenoid);
  362.   server.on("/pump", HTTP_GET, drivePump);
  363.   server.onNotFound(handleNotFound);   /* page not found */
  364.  
  365.   server.begin();
  366.   Serial.println("HTTP server started");
  367.   Serial.println(WiFi.localIP());
  368. }
  369.  
  370. void loop()
  371. {
  372.   server.handleClient();
  373. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement