safwan092

ESP32_Blynk_Temp_Timer_Flame_Buzzer_Project_9945

Nov 2nd, 2022
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1.  
  2. #define OvenRelayPin 21
  3. #define TempDO 19
  4. #define TempCS 23
  5. #define TempCLK 5
  6. #define FlamePin 18
  7. #define buzzerPin 22
  8.  
  9. #define BLYNK_TEMPLATE_ID "TMPLY0JjXp3H"
  10. #define BLYNK_DEVICE_NAME "IOTOven"
  11. #define BLYNK_AUTH_TOKEN "Lz1WZTaGaiTvRg9EDSpRBQvJbaTVQZJB"
  12. #define BLYNK_FIRMWARE_VERSION "0.1.0"
  13.  
  14. #define BLYNK_PRINT Serial
  15. #define APP_DEBUG
  16.  
  17. #include "max6675.h"
  18. #include "BlynkEdgent.h"
  19. #include <TimeLib.h>
  20.  
  21. int thermoDO = TempDO;
  22. int thermoCS = TempCS;
  23. int thermoCLK = TempCLK;
  24. int setTemp;
  25. int Temp = 0;
  26. int FlameStatus = 0;
  27.  
  28. MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
  29.  
  30. BlynkTimer timer;
  31. BlynkTimer timer2;
  32.  
  33. bool led_set;
  34. long timer_start_set = 0xFFFF;
  35. long timer_stop_set = 0xFFFF;
  36. unsigned char weekday_set;
  37.  
  38. long rtc_sec;
  39. unsigned char day_of_week;
  40.  
  41. bool led_status;
  42. bool update_blynk_status;
  43. bool led_timer_on_set;
  44. // #########################################################################################################
  45. // LED 1
  46. BLYNK_WRITE(V0)
  47. {
  48. int val = param.asInt();
  49.  
  50. if ( led_timer_on_set == 0 )
  51. led_set = val;
  52. else
  53. update_blynk_status = 1;
  54. }
  55. // setTemp
  56. BLYNK_WRITE(V1)
  57. {
  58. int SsetTemp = param.asInt();
  59. setTemp = SsetTemp;
  60. Serial.print("setTemp = ");
  61. Serial.println(setTemp);
  62. }
  63. // Timer 1
  64. BLYNK_WRITE(V2)
  65. {
  66. unsigned char week_day;
  67.  
  68. TimeInputParam t(param);
  69.  
  70. if (t.hasStartTime() && t.hasStopTime() )
  71. {
  72. timer_start_set = (t.getStartHour() * 60 * 60) + (t.getStartMinute() * 60) + t.getStartSecond();
  73. timer_stop_set = (t.getStopHour() * 60 * 60) + (t.getStopMinute() * 60) + t.getStopSecond();
  74.  
  75. Serial.println(String("Start Time: ") +
  76. t.getStartHour() + ":" +
  77. t.getStartMinute() + ":" +
  78. t.getStartSecond());
  79.  
  80. Serial.println(String("Stop Time: ") +
  81. t.getStopHour() + ":" +
  82. t.getStopMinute() + ":" +
  83. t.getStopSecond());
  84.  
  85. for (int i = 1; i <= 7; i++)
  86. {
  87. if (t.isWeekdaySelected(i))
  88. {
  89. week_day |= (0x01 << (i - 1));
  90. Serial.println(String("Day ") + i + " is selected");
  91. }
  92. else
  93. {
  94. week_day &= (~(0x01 << (i - 1)));
  95. }
  96. }
  97.  
  98. weekday_set = week_day;
  99. }
  100. else
  101. {
  102. timer_start_set = 0xFFFF;
  103. timer_stop_set = 0xFFFF;
  104. }
  105. }
  106. BLYNK_WRITE(InternalPinRTC)
  107. {
  108. const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
  109. unsigned long blynkTime = param.asLong();
  110.  
  111. if (blynkTime >= DEFAULT_TIME)
  112. {
  113. setTime(blynkTime);
  114.  
  115. day_of_week = weekday();
  116.  
  117. if ( day_of_week == 1 )
  118. day_of_week = 7;
  119. else
  120. day_of_week -= 1;
  121.  
  122. rtc_sec = (hour() * 60 * 60) + (minute() * 60) + second();
  123.  
  124. Serial.println(blynkTime);
  125. Serial.println(String("RTC Server: ") + hour() + ":" + minute() + ":" + second());
  126. Serial.println(String("Day of Week: ") + weekday());
  127. }
  128. }
  129.  
  130. // #########################################################################################################
  131. BLYNK_CONNECTED()
  132. {
  133. Blynk.sendInternal("rtc", "sync");
  134. }
  135.  
  136. // #########################################################################################################
  137. void checkFlame() {
  138. FlameStatus = !digitalRead(FlamePin);
  139.  
  140. if (FlameStatus > 0) {
  141. Serial.print("Flame Status:");
  142. Serial.println(FlameStatus);
  143. Serial.println("ALERT!!!!!");
  144. Blynk.logEvent("fire");
  145. Blynk.virtualWrite(V3, FlameStatus);
  146. }
  147.  
  148. Blynk.virtualWrite(V3, FlameStatus);
  149. }
  150. void checkTime() {
  151. Blynk.sendInternal("rtc", "sync");
  152. Temp = thermocouple.readCelsius();
  153. Serial.print("C = ");
  154. Serial.println(Temp);
  155.  
  156. }
  157.  
  158. // #########################################################################################################
  159. void led_mng()
  160. {
  161. bool time_set_overflow;
  162. bool led_status_buf;
  163.  
  164. led_status_buf = led_status;
  165. time_set_overflow = 0;
  166.  
  167. if ( timer_start_set != 0xFFFF && timer_stop_set != 0xFFFF)
  168. {
  169. if ( timer_stop_set < timer_start_set ) time_set_overflow = 1;
  170.  
  171. if ((((time_set_overflow == 0 && (rtc_sec >= timer_start_set) && (rtc_sec < timer_stop_set)) ||
  172. (time_set_overflow && ((rtc_sec >= timer_start_set) || (rtc_sec < timer_stop_set)))) &&
  173. (weekday_set == 0x00 || (weekday_set & (0x01 << (day_of_week - 1) )))) )
  174. {
  175. led_timer_on_set = 1;
  176. }
  177. else
  178. led_timer_on_set = 0;
  179. }
  180. else
  181. led_timer_on_set = 0;
  182.  
  183. if ( led_timer_on_set )
  184. {
  185. led_status = 1;
  186. led_set = 0;
  187. }
  188. else
  189. {
  190. led_status = led_set;
  191. }
  192.  
  193. if ( led_status_buf != led_status ) {
  194. update_blynk_status = 1;
  195. }
  196. // HARDWARE CONTROL
  197. //digitalWrite(OvenRelayPin, led_status);
  198. if (setTemp > Temp && led_set == 1) {
  199. digitalWrite(OvenRelayPin, led_status);
  200. }
  201. else if(setTemp < Temp && led_set == 1){
  202. digitalWrite(OvenRelayPin, 0);
  203. }
  204. else{
  205. digitalWrite(OvenRelayPin, led_status);
  206. }
  207.  
  208. }
  209.  
  210. // #########################################################################################################
  211. void blynk_update()
  212. {
  213. if ( update_blynk_status )
  214. {
  215. update_blynk_status = 0;
  216. Blynk.virtualWrite(V0, led_status);
  217.  
  218. }
  219.  
  220. }
  221.  
  222. // #########################################################################################################
  223.  
  224. void setup()
  225. {
  226. Serial.begin(115200);
  227. delay(100);
  228. pinMode(OvenRelayPin, OUTPUT);
  229. pinMode(buzzerPin, OUTPUT);
  230. pinMode(FlamePin, INPUT);
  231. digitalWrite(buzzerPin, 0);
  232. digitalWrite(OvenRelayPin, 0);
  233. BlynkEdgent.begin();
  234. timer.setInterval(10000L, checkTime);
  235. timer2.setInterval(100L, checkFlame);
  236.  
  237. }
  238.  
  239. void loop() {
  240. BlynkEdgent.run();
  241. timer.run();
  242. timer2.run();
  243. led_mng();
  244. blynk_update();
  245. }
Advertisement
Add Comment
Please, Sign In to add comment