Advertisement
hms11

ESP32ZoneCommandEdgentRev0.2.3

Feb 25th, 2022
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.26 KB | None | 0 0
  1.  
  2. // Fill-in information from your Blynk Template here
  3. #define BLYNK_TEMPLATE_ID "TMPL3bTnPK_y"
  4. #define BLYNK_DEVICE_NAME "ZoneCommand"
  5.  
  6. #define BLYNK_FIRMWARE_VERSION "0.2.3"
  7.  
  8. #define BLYNK_PRINT Serial
  9. //#define BLYNK_DEBUG
  10.  
  11. #define APP_DEBUG
  12.  
  13. // Uncomment your board, or configure a custom board in Settings.h
  14. //#define USE_WROVER_BOARD
  15. //#define USE_TTGO_T7
  16.  
  17. #include "BlynkEdgent.h"
  18.  
  19. //Widget Setups
  20.  
  21. WidgetLED led1(V4);
  22. WidgetLED led2(V5);
  23. WidgetLED led3(V6);
  24. WidgetLED led4(V7);
  25. WidgetLED led5(V8);
  26. WidgetLED led6(V9);
  27. WidgetLED led7(V10);
  28. const int ledArray[] = {V7,V8,V9,V10};
  29. int ledStatus[] = {0,0,0,0};
  30.  
  31. // Set Pin Assignments For Output Pins
  32.  
  33. // MOSFETS:
  34. const int output[] = {4,16,17,18};
  35. //Motor Drivers:
  36. //U4 Motor Driver:
  37. const int mtrOutA1 = 22;
  38. const int mtrOutA2 = 23;
  39. //U7 Motor Driver:
  40. const int mtrOutB1 = 19;
  41. const int mtrOutB2 = 21;
  42.  
  43. //Set Pin Assignments for Input Pins
  44.  
  45. //Analog Inputs:
  46.  
  47. //Moisture Sensors:
  48. const int sensPin[] = {35,34,39,36};
  49.  
  50. //Water Level Sensors:
  51. const int wtrLvlTop = 26;
  52. const int wtrLvlBtm = 27;
  53.  
  54.  
  55. //Zone Loop Controls
  56.  
  57. int zoneNumber = 0;
  58. int blynkZone = 0;
  59. int triggerHigh[] = {2700,2700,2700,2700};
  60. int triggerLow[] = {3500,3500,3500,3500};
  61. bool zoneActive[] = {true, true, true, true};
  62. bool zoneManual[] = {false,false,false,false};
  63. bool zoneAuto[] = {true,true,true,true};
  64. int waterStatus[] = {0,0,0,0};
  65.  
  66. // Sensor Data:
  67. int sensor[] = {0, 0, 0, 0}; // Sensor reading values array
  68. int topWtrLvl = 0;
  69. int btmWtrLvl = 0;
  70. int lowWater = 3500;
  71. int highWater = 3500;
  72.  
  73. // Timer Variables
  74.  
  75. const int manualDayTimer[] = {86400000, 86400000, 86400000, 86400000}; // delay for once a day manual watering mode
  76. unsigned long lastManualDayTimer[] = {0, 0, 0, 0,};
  77. unsigned long pumpTimer[] = {60000, 60000, 60000, 60000}; //Pump timers in array
  78. unsigned long lastPumpTimer[] = {0, 0, 0, 0}; // last value of Pump timers in array
  79.  
  80. BlynkTimer timer;
  81.  
  82. void setup()
  83. {
  84. // Set OUT Pins to Output
  85. pinMode(output[0], OUTPUT);
  86. pinMode(output[1], OUTPUT);
  87. pinMode(output[2], OUTPUT);
  88. pinMode(output[3], OUTPUT);
  89. // Set Sensor Pins to Input
  90. pinMode(sensPin[0], INPUT);
  91. pinMode(sensPin[1], INPUT);
  92. pinMode(sensPin[2], INPUT);
  93. pinMode(sensPin[3], INPUT);
  94.  
  95. // set Water Level Pins to Input
  96. pinMode(wtrLvlTop, INPUT);
  97. pinMode(wtrLvlBtm, INPUT);
  98.  
  99. //Blynk Timers
  100. BlynkEdgent.begin();
  101. timer.setInterval(500L,blynkData);
  102. timer.setInterval(1000L,waterLevel);
  103. //timer.setInterval(500, zoneWater);
  104.  
  105. Serial.begin(115200);
  106. delay(100);
  107.  
  108. }
  109.  
  110.  
  111. void sensorRead()
  112. {
  113. for (zoneNumber = 0; zoneNumber < 3; zoneNumber++) {
  114. if (zoneActive[zoneNumber]) {
  115. sensor[zoneNumber] = analogRead(sensPin[zoneNumber]);
  116. if (sensor[zoneNumber] > triggerLow[zoneNumber]) {
  117. digitalWrite(output[zoneNumber], HIGH);
  118. ledStatus[zoneNumber] = 1;
  119. }
  120. else if (sensor[zoneNumber] < triggerHigh[zoneNumber]) {
  121. digitalWrite(output[zoneNumber], LOW);
  122. ledStatus[zoneNumber] = 0;
  123. }
  124. Serial.println(sensor[zoneNumber]);
  125. }
  126. }
  127. for (zoneNumber = 3; zoneNumber > 0; zoneNumber = 0) {
  128. if (zoneActive[zoneNumber]) {
  129. sensor[zoneNumber] = analogRead(sensPin[zoneNumber]);
  130. if (sensor[zoneNumber] > triggerLow[zoneNumber]) {
  131. digitalWrite(output[zoneNumber], HIGH);
  132. ledStatus[zoneNumber] = 1;
  133. }
  134. else if (sensor[zoneNumber] < triggerHigh[zoneNumber]) {
  135. digitalWrite(output[zoneNumber], LOW);
  136. ledStatus[zoneNumber] = 0;
  137. }
  138. Serial.println(sensor[zoneNumber]);
  139. }
  140. }
  141. }
  142.  
  143.  
  144.  
  145. void blynkData()
  146. {
  147. Blynk.virtualWrite(V0, sensor[0]);
  148. Blynk.virtualWrite(V1, sensor[1]);
  149. Blynk.virtualWrite(V2, sensor[2]);
  150. Blynk.virtualWrite(V3, sensor[3]);
  151.  
  152. Blynk.virtualWrite(V11, triggerLow[0]);
  153. Blynk.virtualWrite(V12, triggerLow[1]);
  154. Blynk.virtualWrite(V13, triggerLow[2]);
  155. Blynk.virtualWrite(V14, triggerLow[3]);
  156.  
  157. for (blynkZone = 0; blynkZone < 3; blynkZone++) {
  158. if (ledStatus[blynkZone] == 1) {
  159. Blynk.virtualWrite(ledArray[blynkZone], HIGH);
  160. }
  161. else {
  162. Blynk.virtualWrite(ledArray[blynkZone], LOW);
  163. }
  164. }
  165. for (blynkZone = 3; blynkZone > 0; blynkZone = 0) {
  166. if (ledStatus[blynkZone] == 1) {
  167. Blynk.virtualWrite(ledArray[blynkZone], HIGH);
  168. }
  169. else {
  170. Blynk.virtualWrite(ledArray[blynkZone], LOW);
  171. }
  172. }
  173.  
  174. }
  175.  
  176. void waterLevel()
  177. {
  178. int topWtrLvl = analogRead(wtrLvlTop);
  179. int btmWtrLvl = analogRead(wtrLvlBtm);
  180. if (btmWtrLvl > lowWater) {
  181. digitalWrite(mtrOutA1, HIGH);
  182. digitalWrite(mtrOutA2, LOW);
  183. led1.on();
  184. led2.on();
  185. }
  186. if (topWtrLvl < highWater) {
  187. digitalWrite(mtrOutA1, LOW);
  188. digitalWrite(mtrOutA2, LOW);
  189. led1.off();
  190. led2.off();
  191. led3.on();
  192. }
  193. }
  194.  
  195. BLYNK_WRITE(V15)
  196. {
  197. triggerLow[0] = param.asInt();
  198. triggerHigh[0] = triggerLow[0] - 700;
  199. }
  200.  
  201. BLYNK_WRITE(V16)
  202. {
  203. triggerLow[1] = param.asInt();
  204. triggerHigh[1] = triggerLow[1] - 700;
  205. }
  206.  
  207. BLYNK_WRITE(V17)
  208. {
  209. triggerLow[2] = param.asInt();
  210. triggerHigh[2] = triggerLow[2] - 700;
  211. }
  212.  
  213. BLYNK_WRITE(V18)
  214. {
  215. triggerLow[3] = param.asInt();
  216. triggerHigh[3] = triggerLow[3] - 700;
  217. }
  218.  
  219.  
  220.  
  221. void loop() {
  222. BlynkEdgent.run();
  223. timer.run();
  224. sensorRead();
  225. }
  226.  
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement