RuiViana

Teste_ESP_Delay.ino

Aug 20th, 2018
169
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Extraido e modificado do AutoConnectWithFSParametersAndCustomIP da biblioteca WiFiManager
  2. // Era AutoConnectWithFSParametersAndCustomIP_V03
  3. // Versao V03
  4. // Versao V04  Usar interruptor para detectar reset
  5. /*
  6.   Nesta versao, ao ligar o modulo, se o interruptor estiver ligado,
  7.   isto pode ser verificado porque a lampada esta acessa ao ligar,
  8.   e antes de 5 segundos for desligado o interruptor, o modulo entra em AP mode.
  9.   Em AP mode ele cria uma rede chamada "AP_Configure", com IP 192.168.1.4.
  10.   Acessando este IP configura-se a rede com os novos parametros de:
  11.   SSID. Password, IP, Gateway, e SubNet.
  12.   Mas ao ligar o modulo, se o interruptor estiver desligado,
  13.   isto pode ser verificado porque a lampada esta apagada ao ligar,
  14.   e antes de 5 segundos for ligado o interruptor, o modulo bypass
  15.   o wifi mode indo direto para o loop com  controle normal da lampada
  16.   pelo interruptor.
  17. */
  18. #include <FS.h>                           // This needs to be first, or it all crashes and burns...
  19. #include <ESP8266WiFi.h>                  // https://github.com/esp8266/Arduino
  20. #include <ESP8266WebServer.h>
  21. #include <WiFiManager.h>                  // https://github.com/tzapu/WiFiManager
  22. #include <ArduinoJson.h>                  // https://github.com/bblanchon/ArduinoJson
  23.  
  24. char static_ip[16] = "10.0.1.56";         // Default custom static IP
  25. char static_gw[16] = "10.0.1.1";
  26. char static_sn[16] = "255.255.255.0";
  27. bool shouldSaveConfig = false;            // Flag for saving data
  28.  
  29. // Port em uso
  30. // 0 15   SHT 2 MOC 4 SW 5 LED 13 Rst
  31. #include <SHT1x.h>                                          // https://github.com/practicalarduino/SHT1x
  32. #define dataPin  0                                          // GPIO 0  D3  Port para o Data do SHT10
  33. #define clockPin 15                                         // GPIO 15 D8  Port para o Clock do SHT10
  34. #define Led_Ap_Mode 5                                       // Led indicativo de AP mode
  35. #define Saida1 2                                            // GPIO2 Port para ligar Controle do triac (Pino 2 do MOC3023)
  36. #define Switch1 4                                           // GPIO4 Port para ligar o interruptor
  37. SHT1x sht1x(dataPin, clockPin);                             // Instancia shtx1
  38.  
  39. ESP8266WebServer server(80);                                // Instancia server
  40. //  Strings com HTML
  41. String Q_1 = "<!DOCTYPE HTML><html><head><meta http-equiv='refresh' content='1;URL=/Controle'/></head><h1><center>Controle de luz, Temperatura e Umidade</center>";
  42. String Q_2 = "</p></center><h3><BR></h3><html>\r\n";
  43. String Ql = "";                                             // Quarto ligado
  44. String Qd = "";                                             // Quarto desligado
  45. String Qil = "";                                            // Quarto intermediario ligado
  46. String Qid = "";                                            // Quarto intermediario desligado
  47. String LuzQuarto;                                           // String para controle
  48. float temp_c;                                               // Variavel para temperatura
  49. int humidity;                                               // Variavel para umidade
  50.  
  51. byte Switch1_atual = 0;                                     // Variavel para staus de GPIO5 (Status do interruptor)
  52. unsigned long previousMillis = 0;                           // Variavel para medir periodos
  53. const long interval = 2000;                                 // Periodo de leitura da temperatura e umidade
  54. bool flagRst = LOW;                                           // Flag para permitir reset dos parametros SSID e PW
  55. bool bypass = LOW;                                          // Controle do automatico
  56. //---------------------------------------
  57. void gettemperature()                                       // Funcoa para ler temperatura e umidade
  58. {
  59.   if (millis() - previousMillis >= interval)                // Se passou o intervalo
  60.   {
  61.     previousMillis = millis();                              // Restaura valor de previousMillis
  62.     humidity = sht1x.readHumidity();                        // Le umidade em SHT10
  63.     temp_c = sht1x.readTemperatureC();                      // Le temperatura em SHT10
  64.   }
  65. }
  66. //-------------------------------
  67. void saveConfigCallback ()                                  // Callback notifying us of the need to save config
  68. {
  69.   Serial.println("Should save config");
  70.   shouldSaveConfig = true;
  71. }
  72. //-------------------------------
  73. void setup()
  74. {
  75.   Serial.begin(115200);                                       // Inicializa Serial
  76.   Serial.println(" ");                                           // Pint
  77.   pinMode(Led_Ap_Mode, OUTPUT);                               // Led_Ap_Mode como saida
  78.   pinMode(Saida1, OUTPUT);                                    // Saida1 como saida
  79.   pinMode(Switch1, INPUT_PULLUP);                             // Switch1 como entrada e liga o resistor de pullup
  80.  //   yield();
  81.   delay(100);
  82.   // Reset da rede wifi
  83. /*  if (digitalRead(Switch1) == LOW)                            // Se interruptor esta pressionado
  84.   {
  85.     digitalWrite(Saida1, HIGH);                               // Liga saída1
  86. //    yield();
  87.     delay(5000);                                              // Aguarda 5 segundos
  88.     digitalWrite(Saida1, LOW);                                // Desliga saída1
  89.     if (digitalRead(Switch1) == HIGH)                         // Se interruptor esta liberado
  90.     {
  91.       //      Serial.println("reset SSID e IP  ");
  92.       flagRst = HIGH;                                         // Indica reset de parametros
  93.     }
  94.   }
  95.   // Bypass da rede wifi
  96.   if (flagRst == LOW)                                          // Se não foi reseted
  97.   {
  98.     if (digitalRead(Switch1) == HIGH)                         // Se interruptor está liberado
  99.     {
  100.       digitalWrite(Saida1, LOW);                              // desliga saída1
  101. //      yield();
  102.       delay(1000);                                            // Aguarda 5 segundos
  103.       digitalWrite(Saida1, HIGH);                             // Liga saída1
  104.       if (digitalRead(Switch1) == LOW)                        // Se interruptor esta pressionado
  105.       {
  106.         Serial.println("bypassed  ");
  107.         bypass = HIGH;                                        // Desabilita o sistema de wifi
  108.       }
  109.     }
  110.   }
  111. */
  112.   digitalWrite(Led_Ap_Mode, HIGH);                            // Apaga o Led indicativo de AP
  113.   delay(20);                                                  // Delay para estabilizar o port
  114.   Switch1_atual = digitalRead(Switch1);                       // Atualiza status de Switch1_atual
  115.   digitalWrite(Saida1, LOW);                                  // Liga saída
  116.  
  117.   Ql += Q_1;                                                // Monta tela pra informar que a luz
  118.   Ql += "<p><center>Luz</p><p><a href=\"/Controle?LuzQuarto=off \"><button style=\"background-color: rgb(255, 0,   0);height: 100px; width: 200px;\"><h1> Acesa</h1></button></a>";
  119.   Qd += Q_1;                                                // Monta tela pra informar que a luz
  120.   Qd += "<p><center>Luz</p><p><a href=\"/Controle?LuzQuarto=on \"><button style=\"background-color: rgb(0, 255,   0);height: 100px; width: 200px;\"><h1> Apagada</h1></button></a>";
  121.  
  122.   if (bypass == LOW)                                          // Se bypass esta desabilitado
  123.   {
  124.     //      digitalWrite(Saida1, LOW);                                // Se não deliga saida1
  125.     //else digitalWrite(Saida1, LOW);
  126.  
  127.     //SPIFFS.format();                                        // Clean FS, for testing
  128.     Serial.println("mounting FS...");                         // Read configuration from FS json
  129.     if (SPIFFS.begin())
  130.     {
  131.       Serial.println("mounted file system");
  132.       if (SPIFFS.exists("/config.json"))                      // If file exists, reading and loading
  133.       {
  134.         Serial.println("reading config file");
  135.         File configFile = SPIFFS.open("/config.json", "r");
  136.         if (configFile) {
  137.           Serial.println("opened config file");
  138.           size_t size = configFile.size();
  139.           std::unique_ptr<char[]> buf(new char[size]);        // Allocate a buffer to store contents of the file.
  140.           configFile.readBytes(buf.get(), size);
  141.           DynamicJsonBuffer jsonBuffer;
  142.           JsonObject& json = jsonBuffer.parseObject(buf.get());
  143.           json.printTo(Serial);
  144.           if (json.success())
  145.           {
  146.             Serial.println("\nparsed json");
  147.             if (json["ip"])
  148.             {
  149.               Serial.println("setting custom ip from config");
  150.               strcpy(static_ip, json["ip"]);
  151.               strcpy(static_gw, json["gateway"]);
  152.               strcpy(static_sn, json["subnet"]);
  153.               Serial.println(static_ip);
  154.             }
  155.             else
  156.             {
  157.               Serial.println("no custom ip in config");
  158.             }
  159.           }
  160.           else
  161.           {
  162.             Serial.println("failed to load json config");
  163.           }
  164.         }
  165.       }
  166.     }
  167.     else
  168.     {
  169.       Serial.println("failed to mount FS");
  170.     }
  171.     Serial.println(static_ip);                                  // end read
  172.     WiFiManager wifiManager;
  173.  
  174.     if (flagRst == HIGH)                                        // Se reset foi habilitado
  175.     {
  176.       flagRst = LOW;                                            // Desabilita reset
  177.       wifiManager.resetSettings();                              // Reseta SSID e PW
  178.     }
  179.     digitalWrite(Led_Ap_Mode, HIGH);                            // Acende o Led indicativo de AP
  180.  
  181.     wifiManager.setSaveConfigCallback(saveConfigCallback);      // Set config save notify callback
  182.     IPAddress _ip, _gw, _sn;                                    // Set static ip
  183.     _ip.fromString(static_ip);
  184.     _gw.fromString(static_gw);
  185.     _sn.fromString(static_sn);
  186.     wifiManager.setSTAStaticIPConfig(_ip, _gw, _sn);
  187.     // wifiManager.resetSettings();                               // Reset settings - for testing
  188.  
  189.     wifiManager.setMinimumSignalQuality();                        // Set minimu quality of signal so it ignores AP's under that quality    //defaults to 8%
  190.     if (!wifiManager.autoConnect("AP_Configure", "password"))
  191.     {
  192.       Serial.println("failed to connect and hit timeout");
  193.       delay(3000);
  194.  
  195.       ESP.reset();                                                // Reset and try again, or maybe put it to deep sleep
  196.       delay(5000);
  197.     }
  198.     //  Serial.println("connected...yeey :)");                    // If you get here you have connected to the WiFi
  199.     digitalWrite(Led_Ap_Mode, LOW);                               // Apaga o Led indicativo de AP
  200.     if (shouldSaveConfig)                                         // Save the custom parameters to FS
  201.     {
  202.       Serial.println("saving config");
  203.       DynamicJsonBuffer jsonBuffer;
  204.       JsonObject& json = jsonBuffer.createObject();
  205.       json["ip"] = WiFi.localIP().toString();
  206.       json["gateway"] = WiFi.gatewayIP().toString();
  207.       json["subnet"] = WiFi.subnetMask().toString();
  208.       File configFile = SPIFFS.open("/config.json", "w");
  209.       if (!configFile)
  210.       {
  211.         Serial.println("failed to open config file for writing");
  212.       }
  213.       json.prettyPrintTo(Serial);
  214.       json.printTo(configFile);
  215.       configFile.close();    //end save
  216.     }
  217.     Serial.println("local ip");
  218.     Serial.println(WiFi.localIP());
  219.     Serial.println(WiFi.gatewayIP());
  220.     Serial.println(WiFi.subnetMask());
  221.  
  222.     server.on("/", []()                                       // Ao request
  223.     {
  224.       server.send(200, "text/html", Ql);                      // Executa o HTML Ql (Quarto ligado)
  225.     });
  226.     server.on("/Controle", []()                               // Ao requeste
  227.     {
  228.       //    gettemperature();                                       // Le temperatura e umidade. Comentar se tiver sem sensor pois fica lento
  229.       LuzQuarto = server.arg("LuzQuarto");                    // Recupera o valor do parametro luz enviado
  230.       if (LuzQuarto == "off") digitalWrite(Saida1, LOW);      // Se o valor de luz e off desliga a saida
  231.       if (LuzQuarto == "on") digitalWrite(Saida1, HIGH);      // Se o valor de luz e on liga a saida
  232.  
  233.       if (digitalRead(Saida1) == HIGH)                        // Se a saida esta ligada, carrega a pagina "ligada"
  234.       {
  235.         Qil += Ql;                                            // Monta tela nova quarto ligado
  236.         Qil +=  "<p><center>Temperatura: " + String((float)temp_c) + "C </p>";
  237.         Qil +=  "<p><center>Umidade: " + String((int)humidity) + "% </p>";
  238.         Qil += Q_2;
  239.         server.send(200, "text/html", Qil);                   // Mostra Quarto ligado
  240.         Qil = "";                                             // Limpa valor de temperatura e umidade
  241.       }
  242.       if (digitalRead(Saida1) == LOW)                         // Se a saida esta desligada, carrega a pagina "desligada"
  243.       {
  244.         Qid += Qd;                                            // Monta tela nova quarto desligado
  245.         Qid += "<p><center>Temperatura: " + String((float)temp_c) + "C </p>";
  246.         Qid += "<p><center>Umidade: " + String((int)humidity) + "% </p>";
  247.         Qid += Q_2;
  248.         server.send(200, "text/html", Qid);                   // Mostra Quarto desligado
  249.         Qid = "";                                             // Limpa valor de temperatura e umidade
  250.       }
  251.       delay(100);                                             // Delay
  252.     });
  253.     server.begin();                                           // Inicaliza servidor
  254.     Serial.println("HTTP server started");                    // Imprime
  255.   }
  256. }
  257. //-------------------------------
  258. void loop()
  259. {
  260.   server.handleClient();                                    // Executa instancia
  261.  
  262.   if (digitalRead(Switch1) !=  Switch1_atual)               // Se o valor do SW alterou
  263.   {
  264.     delay(40);                                              // Delay
  265.     if (digitalRead(Switch1) !=  Switch1_atual)             // Se o valor do SW alterou
  266.     {
  267.       digitalWrite(Saida1, !digitalRead(Saida1));           // Inverte a saida lamp1
  268.       Switch1_atual = digitalRead(Switch1);                 // Atualisa o Gpio5 atual
  269.     }
  270.   }
  271. }
RAW Paste Data