Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- //*********************SERVER***********************
- ESP8266WebServer server(80);
- const char* ssid = "MinhaRede";
- const char* password = "MinhaSenha";
- //*********************server***********************
- //******************** NTP *******************//
- #include <TimeLib.h> //https://github.com/PaulStoffregen/Time
- #include <WiFiUdp.h>
- static const char ntpServerName[] = "a.ntp.br"; //Servidor (pode ser a.ntp.br / b.ntp.br / c.ntp.br )
- const int timeZone = -4; // Fuso horario (-3 Padrão / -2 Horário de Verão)
- WiFiUDP Udp;
- unsigned int localPort = 8888;
- time_t getNtpTime();
- void sendNTPpacket(IPAddress &address);
- const int NTP_PACKET_SIZE = 48;
- byte packetBuffer[NTP_PACKET_SIZE];
- time_t getNtpTime()
- {
- IPAddress ntpServerIP;
- while (Udp.parsePacket() > 0) ;
- Serial.println(F("*WifiRTC: Transmitindo NTP Request"));
- WiFi.hostByName(ntpServerName, ntpServerIP);
- Serial.print(ntpServerName);
- Serial.print(": ");
- Serial.println(ntpServerIP);
- sendNTPpacket(ntpServerIP);
- uint32_t beginWait = millis();
- while (millis() - beginWait < 3000) {
- int size = Udp.parsePacket();
- if (size >= NTP_PACKET_SIZE) {
- Serial.println(F("*WifiRTC: Resposta recebida do NTP"));
- Udp.read(packetBuffer, NTP_PACKET_SIZE);
- unsigned long secsSince1900;
- secsSince1900 = (unsigned long)packetBuffer[40] << 24;
- secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
- secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
- secsSince1900 |= (unsigned long)packetBuffer[43];
- return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
- }
- }
- Serial.println("*WifiRTC: Sem resposta do NTP");
- return 0;
- }
- void sendNTPpacket(IPAddress &address)
- {
- memset(packetBuffer, 0, NTP_PACKET_SIZE);
- packetBuffer[0] = 0b11100011;
- packetBuffer[1] = 0;
- packetBuffer[2] = 6;
- packetBuffer[3] = 0xEC;
- packetBuffer[12] = 49;
- packetBuffer[13] = 0x4E;
- packetBuffer[14] = 49;
- packetBuffer[15] = 52;
- Udp.beginPacket(address, 123);
- Udp.write(packetBuffer, NTP_PACKET_SIZE);
- Udp.endPacket();
- }
- time_t prevDisplay = 0;
- //******************** Verificação das horas *******************//
- String gethora () {//faz a leitura do RTC DS3231
- char hora[30];
- Serial.println("*WifiRTC: Checking all hours");
- sprintf( hora, "%02d:%02d:%02d", hour(), minute(), second());
- //Serial.println (hora);
- return hora;
- }
- //**********************DHT*************************
- #include <DHT.h>// https://github.com/adafruit/DHT-sensor-library
- #define DHTTYPE DHT11// usei o DHT11, recomendo o DHT22
- #define DHTPIN D4
- DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266
- unsigned long previousMillis = 0; // will store last temp was read
- const long interval = 120000; // 2 min interval at which to read sensor
- int humidity;
- int gethumidity() {
- // Values read from sensor
- humidity = dht.readHumidity(); // Read humidity (percent)
- if ((isnan(humidity))||(humidity == 2147483647)) {
- Serial.println("Failed read DHT sensor!");
- humidity = 0;
- }
- return humidity;
- }
- int gettemperature() {
- int temp_C; // Values read from sensor
- temp_C = (dht.readTemperature() - 1); //-1ºC correçao da temp do ESP que aquece o sensor // Read temperature as Celcius
- // Check if any reads failed and exit early (to try again).
- if ((isnan(temp_C))||(temp_C == 2147483647)) {
- Serial.println("Failed read DHT sensor!");
- temp_C = 0;
- }
- return temp_C;
- }
- //**********************dht*************************
- String webSite, javaScript, XML, XMLFromSerial;
- //*******************Ajax*******************
- void buildXML() {
- int humidity = gethumidity();
- int temp_C = gettemperature();
- XML = "<?xml version='1.0'?>";
- XML += "<xml>";
- XML += "<hora>";
- XML += gethora ();
- XML += "</hora>";
- XML += "<humidity>";
- XML += String(humidity);
- XML += "</humidity>";
- XML += "<temp>";
- XML += String(temp_C);
- XML += "</temp>";
- XML += "</xml>";
- }
- void buildJavascript() {
- javaScript = "<SCRIPT>\n";
- javaScript += "xmlHttp=createXmlHttpObject();\n";
- javaScript += "function createXmlHttpObject(){\n";
- javaScript += " if(window.XMLHttpRequest){\n";
- javaScript += " xmlHttp=new XMLHttpRequest();\n";
- javaScript += " }else{\n";
- javaScript += " xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n";
- javaScript += " }\n";
- javaScript += " return xmlHttp;\n";
- javaScript += "}\n";
- javaScript += "function process(){\n";
- javaScript += " if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
- javaScript += " xmlHttp.onreadystatechange=function(){\n";
- javaScript += " if(xmlHttp.readyState==4&&xmlHttp.status==200){\n";
- javaScript += " xmlDoc=xmlHttp.responseXML;\n";
- javaScript += " xmlmsg=xmlDoc.getElementsByTagName('humidity')[0].firstChild.nodeValue;\n"; //le a tag em buildXML()
- javaScript += " document.getElementById('labelhumidity').innerHTML=xmlmsg;\n"; // retorna o valor em builwebsite()
- javaScript += " xmlmsg=xmlDoc.getElementsByTagName('temp')[0].firstChild.nodeValue;\n";//le a tag em buildXML()
- javaScript += " document.getElementById('labeltemp').innerHTML=xmlmsg;\n";
- javaScript += " xmlmsg=xmlDoc.getElementsByTagName('hora')[0].firstChild.nodeValue;\n";le a tag em buildXML()
- javaScript += " document.getElementById('labelhora').innerHTML=xmlmsg;\n";retorna o valor em builwebsite()
- javaScript += " }\n";
- javaScript += " }\n";
- javaScript += " xmlHttp.open('PUT','xml',true);\n";
- javaScript += " xmlHttp.send(null);\n";
- javaScript += " }\n";
- javaScript += " setTimeout('process()',1000);\n";
- javaScript += "}\n";
- javaScript += "</SCRIPT>\n";
- }
- //**********************ajax*************************
- //*********************WEBSITE***********************
- char headerHTML[] = "<!DOCTYPE HTML>\r\n" // monta o cabeçalho da pagina
- "<html lang=\"en\">"
- "<head>"
- "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/>\r\n"
- "<link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css' rel='stylesheet'></link>"
- "<link rel=\"stylesheet\" href=\"http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css\">"
- "<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js'></script>"
- "<title>Webserver ESP8266</title>"
- "<style>.c{text-align: center;} div,input{padding:5px;font-size:1em;} input{width:80%;} body{text-align: center;font-family:verdana;}</style>"
- "<div class=\"panel panel-primary\">"//abre painel
- "<div class=\"panel-heading\"><h3>ESP8266 WebServer</h3></div>"
- "<div class=\"panel-body\">"
- "</div>"//fecha painel
- "<div id=\"txt\" style=\"font-weight:bold;\"></div>"
- "</head>" ;
- char footerHTML[] = "</div></body></html>";//monta rodapé da pagina
- void buildWebsite() {// monta a pagina html
- buildJavascript();// recupera o valor das tags
- webSite += String (headerHTML);// monta o cabeçalho
- webSite += javaScript;
- webSite += "<BODY onload='process()'>\n";
- webSite += "<h3><center><strong><A ID='labelhora'></A></strong></center></h3>";// recupera a hora em Ajax
- //conteiner humidade e temperatura
- webSite += (F("<div class = 'container'>"));//<style>.c{text-align: center;}</style>// abre conteiner
- webSite += (F("<div class = 'well'>"));// abre Well
- webSite += "<h1><strong>\n";// humidade
- webSite += "H = <A ID='labelhumidity'> </A>\n";// recupera a label humidade em Ajax
- webSite += (F(" %</strong></h1>"));;// humidade
- webSite += "<h1><strong>\n";//temp
- webSite += "T= <A ID='labeltemp'></A> °C<BR>\n";// recupera a label temperatura
- webSite += (F("</strong></h1>"));//temp
- webSite += (F("</div>"));//fecha well
- webSite += (F("</div>"));// fecha conteiner
- //conteiner
- webSite += (F("</BODY>"));
- webSite += String (footerHTML);//monta o rodapé
- }
- void handleWebsite() {// carrega a pagina no server on
- buildWebsite();
- server.send(200, "text/html", webSite);
- }
- void handleXML() { // recupera o XML
- buildXML();
- server.send(200, "text/xml", XML);
- }
- //*********************website***********************
- void setup() {
- Serial.begin(115200);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED)delay(500);
- WiFi.mode(WIFI_STA);
- Serial.println("\n\nBOOTING ESP8266 ...");
- Serial.print("Connected to ");
- Serial.println(ssid);
- Serial.print("Station IP address: ");
- Serial.println(WiFi.localIP());
- //*********************SERVER***********************
- server.on("/", handleWebsite);// carrega a pagina
- server.on("/xml", handleXML);// carrega o XML
- server.begin();
- //*********************server***********************
- //**********************NTP*******************
- Serial.println(F("*WifiRTC: Iniciando UDP"));
- Udp.begin(localPort);
- Serial.print(F("*WifiRTC: Porta local: "));
- Serial.println(Udp.localPort());
- Serial.println(F("*WifiRTC: Aguardando sincronia com o servidor NTP"));
- setSyncProvider(getNtpTime);
- setSyncInterval(300); // Intervalo de sincronia com servidor (Padrão: 300)(segundos)
- //**********************ntp*********************
- }
- void loop() {
- server.handleClient();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement