Advertisement
Guest User

ESP32-Chicken-Door

a guest
Oct 1st, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.88 KB | None | 0 0
  1. #include <ArduinoWebsockets.h>
  2. #include <WiFi.h>
  3.  
  4. #define CLOSE_STATE     0
  5. #define CLOSING_STATE   1
  6. #define OPENNING_STATE  2
  7. #define OPEN_STATE      3
  8.  
  9. #define TOP_SWITCH      12
  10. #define BOTTOM_SWITCH   13
  11. #define RELAY_1         14
  12. #define RELAY_2         15
  13. #define LED_BUILTIN     4
  14.  
  15. const char *ssid =      "";
  16. const char *password =  "";
  17. volatile int DOOR_STATE = CLOSE_STATE;
  18. volatile bool NOTIFIED = true;
  19.  
  20. using namespace websockets;
  21. WebsocketsServer server;
  22. WebsocketsClient client;
  23.  
  24. void    setup()
  25. {
  26.     Serial.begin(115200);
  27.     pinMode(RELAY_1, OUTPUT);
  28.     pinMode(RELAY_2, OUTPUT);
  29.     pinMode(LED_BUILTIN, OUTPUT);
  30.  
  31.     pinMode(TOP_SWITCH, INPUT);
  32.     pinMode(BOTTOM_SWITCH, INPUT);
  33.     attachInterrupt(TOP_SWITCH, openned_event, RISING);
  34.     attachInterrupt(BOTTOM_SWITCH, closed_event, RISING);
  35.  
  36.     digitalWrite(RELAY_1, HIGH);
  37.     digitalWrite(RELAY_2, HIGH);
  38.     // Start LED for debugging
  39.     digitalWrite(LED_BUILTIN, HIGH);
  40.  
  41.     // Connect to wifi
  42.     WiFi.begin(ssid, password);
  43.  
  44.     // Wait some time to connect to wifi
  45.     for (int i = 0; i < 15 && WiFi.status() != WL_CONNECTED; i++)
  46.     {
  47.         Serial.print(".");
  48.         delay(1000);
  49.     }
  50.  
  51.     Serial.println("");
  52.     Serial.println("WiFi connected");
  53.     Serial.println("IP address: ");
  54.     Serial.println(WiFi.localIP());
  55.  
  56.     server.listen(80);
  57.     Serial.print("Is server live? ");
  58.     Serial.println(server.available());
  59.  
  60.     // All done so LED is off now
  61.     digitalWrite(LED_BUILTIN, LOW);
  62. }
  63.  
  64. void    loop()
  65. {
  66.     if (!client.available())
  67.         client = server.accept();
  68.     else if (DOOR_STATE == OPEN_STATE || DOOR_STATE == CLOSE_STATE)
  69.     {
  70.         if (!NOTIFIED) notify_client();
  71.         WebsocketsMessage msg = client.readBlocking();
  72.         Serial.print("Got Message: ");
  73.         Serial.println(msg.data());
  74.  
  75.         if (msg.data() == "OPEN_DOOR")
  76.             client.send(open_door());
  77.         else if (msg.data() == "CLOSE_DOOR")
  78.             client.send(close_door());
  79.         else if (msg.data())
  80.             client.send("NOT_UNDERSTOOD");
  81.     }
  82.     delay(1000);
  83. }
  84.  
  85. void    notify_client()
  86. {
  87.     if (DOOR_STATE == OPEN_STATE)
  88.         client.send("DOOR_OPENED");
  89.     else if (DOOR_STATE == CLOSE_STATE)
  90.         client.send("DOOR_CLOSED");
  91.     NOTIFIED = true;
  92. }
  93.  
  94. char    *close_door()
  95. {
  96.     if (DOOR_STATE != OPEN_STATE)
  97.         return "STATE_ERROR";
  98.     DOOR_STATE = CLOSING_STATE;
  99.     digitalWrite(RELAY_1, LOW);
  100.     digitalWrite(RELAY_2, HIGH);
  101.     return "CLOSING_DOOR";
  102. }
  103.  
  104. char    *open_door()
  105. {
  106.     if (DOOR_STATE != CLOSE_STATE)
  107.         return "STATE_ERROR";
  108.     DOOR_STATE = OPENNING_STATE;
  109.     digitalWrite(RELAY_2, LOW);
  110.     digitalWrite(RELAY_1, HIGH);
  111.     return "OPENNING_DOOR";
  112. }
  113.  
  114. void    openned_event()
  115. {
  116.     if (DOOR_STATE != OPENNING_STATE)
  117.         return
  118.     digitalWrite(RELAY_2, HIGH);
  119.     digitalWrite(RELAY_1, HIGH);
  120.     NOTIFIED = false;
  121.     DOOR_STATE = OPEN_STATE;
  122.     Serial.println("DOOR_OPENNED");
  123. }
  124.  
  125. void    closed_event()
  126. {
  127.     if (DOOR_STATE != CLOSING_STATE)
  128.         return
  129.     digitalWrite(RELAY_1, HIGH);
  130.     digitalWrite(RELAY_2, HIGH);
  131.     NOTIFIED = false;
  132.     DOOR_STATE = CLOSE_STATE;
  133.     Serial.println("DOOR_CLOSE");
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement