Układ chroniący przed zamarzaniem.
Budowa stron www.
Tak wygląda strona www na ESP8266.
Zasada tworzenia strony www była już omawiana, dlatego utwórz plik NoFreezeWeb.h i wpisz jak poniżej.
/* * NoFreezeWeb.h * * Created on: 22.09.2016 * Author: jant */ #ifndef NOFREEZEWEB_H_ #define NOFREEZEWEB_H_ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPUpdateServer.h> String HTMLHeader(); String HTMLFooter(); String HTMLPage(); String HTMLPage1(); String HTMLPage2(); void setservers(void); #endif /* NOFREEZEWEB_H_ */
Widzisz tu funkcje znane z poprzednich wpisów. Utwórz plik NoFreezeWeb.cpp i wpisz jak poniżej.
/* * NoFreezeWeb.cpp * * Created on: 22.09.2016 * Author: jant */ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPUpdateServer.h> #include <OneWire.h> #include <DallasTemperature.h> #include "NoFreeze.h" extern String version; extern String slocation; // login i hasło do sytemu const char* www_login = "admin"; const char* www_pass = "esp8266"; const int port = 80; // port serwera www ESP8266WebServer server(port); ESP8266HTTPUpdateServer httpUpdate; extern NoFreeze nf; unsigned int ilM=10; unsigned long fminutes( unsigned int ile) { return (millis()+(1000*60*ile)); } String HTMLHeader() { // nagłówek strony String h = "<!DOCTYPE html>\n"; h += "<html>"; h += "<head>"; h += "<title>"+slocation+"</title>"; // h += "<meta http-equiv=\"Refresh\" content=\"30\" />"; //odświerzaj stronę co 30 sek. h += "<meta charset=\"utf-8\">"; h += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"; h += "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\" >"; h += "</head>"; h += "<body style=\"text-align: center;color: white; background: black;font-size: 1.5em;\">\n"; return h; } String HTMLFooter() { // stopka strony www String f = "<p><a href = \"/\"><button class=\"btn btn-info\">Odświerz stronę</button></a></p>"; f += "<p>Jan Trzciński © 2016-2017</p></td></tr>"; f += "</body>\n"; f += "</html>\n"; return f; } String HTMLPage1() { // pierwsza część strony www String t; unsigned long sec = millis() / 1000; unsigned long min = (sec / 60); unsigned long hour = (min / 60); unsigned long days = hour / 24; sec = sec % 60; min = min % 60; hour = hour % 24; t = ""; // t += "<h1><p>The system antifreeze.</p></h1>"; t += "<h2><p>Układ zapobiegający zamarzaniu</p></h2>"; t += "<h1><p>"+slocation+"</p></h1>"; t += "<p> Wersja "; t += (version); t += "</p>"; // t += "<p>The time from the start, days: "; t += "<p>Czas od uruchomienia dni: "; t += (days); // t += " hours:"; t += " godz:" ; t += ((hour<10) ? "0" : ""); t += (hour); t += ":"; t += ((min<10) ? "0" : ""); t += (min); t += ":"; t += ((sec < 10) ? "0" : ""); t += (sec); t += "</p>"; // t += "<p>Outside temperature: "; t += "<p> Temperatura zewnętrzna: "; t += (nf.readTempOut()); t += " ºC</p>"; // t += "<p>The internal temperature: "; t += "<p> Temperatura wewnętrzna: "; t += (nf.readTempIn()); t += " ºC</p>"; t += "<p> Temperatura zew. minimalna: "; t += (nf.tempMiniOut); t += " ºC</p>"; t += "<p> Temperatura wew. minimalna: "; t += (nf.tempMiniIn); t += " ºC</p>"; t += "<p> Suma czasu załączeń grzejnika: "; t += (nf.timeSetOn); t += " minut</p>"; return t; } String HTMLPage2() { // główna strona www String p = ""; if (!nf.bmode) { //gdy ustawiony tryb ręczny p += ( (nf.relay1.read()) ? "<p><a href = \"/relay1/0\"><button class=\"btn btn-danger\">Przekaźnik 1 ON</button></a></p>\n" : "<p><a href = \"/relay1/1\"><button class=\"btn btn-success\">Przekaźnik 1 OFF</button></a></p>\n"); // na jakie piny co podłaczono // stopka strony // p += ( "<p> 1-Wire connected to D2</p>\n"); p += ( "<p>Połączenia: 1-Wire na D2</p>\n"); // p += ( "<p> Relay connected to D1</p>\n"); p += ( "<p> Przekaźnik na D1</p>\n"); p += ( "<p> Adres czujnika zewnętrznego:"); p += ( nf.adr2str(nf.AddrTempOut)); p += ( "</p>\n"); p += ( "<p> Adres czujnika wewnętrznego:"); p += ( nf.adr2str(nf.AddrTempIn)); p += ( "</p>\n"); p += ( "<p> Adres czujnika:"); p += ( nf.adr2str(nf.AddrTemp)); p += ( "</p>\n"); } else { // gdy tryb AUTO p += ( (nf.relay1.read()) ? "<p><button class=\"btn btn-danger\">Przekaźnik 1 ON</button></p>\n" : "<p><button class=\"btn btn-success\">Przekaźnik 1 OFF</button></p>\n"); } // wyświetl jaki tryb wybrany p += ( (nf.bmode) ? "<p><a href = \"/login\"><button class=\"btn btn-success\">tryb AUTO</button></a></p>\n" \ : "<p><a href = \"/auto\"> <button class=\"btn btn-danger\"> tryb MANUAL</button></a></p>\n"); return p; } String WebPage() { // połącz wszystkie części strony www return (HTMLHeader()+HTMLPage1()+ HTMLPage2()+HTMLFooter()); } // funkcja ustawia wszystkie strony www void setservers(){ httpUpdate.setup(&server,"/update", www_login, www_pass); // umożliwia aktualizację poprzez WiFi server.on("/", [](){ // odświerz stronę www server.send(200, "text/html", WebPage()); }); //strona do logowania server.on("/login", [](){ if(!server.authenticate(www_login, www_pass)) return server.requestAuthentication(); nf.setManual(); // = false; nf.led0.setOff(); ////sygnalizacja załączenia trybu MANUAL (LED ESP8266) nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL server.send(200, "text/html", WebPage()); }); server.on("/auto", [](){ // ustaw trybu AUTO nf.setAuto(); //= true; nf.led0.setOff(); server.send(200, "text/html", WebPage()); }); server.on("/relay1/0", [] () // wyłącz przekaźnik 1 { if (!nf.bmode) nf.relay1.setOff(); server.send(200, "text/html", WebPage()); nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL }); server.on("/relay1/1", []() // załącz przekaźnik 1 { if (!nf.bmode) nf.relay1.setOn(); server.send(200, "text/html", WebPage()); nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL }); server.on("/tempminiin", []() // resetuj tempMiniIn { if (!nf.bmode) { nf.tempMiniIn = 30; nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL } server.send(200, "text/html", WebPage()); }); server.on("/tempminiout", []() // resetuj tempMiniOut { if (!nf.bmode) { nf.tempMiniOut = 30; nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL } server.send(200, "text/html", WebPage()); }); server.on("/timeseton", []() // resetuj sumę czasu załączenia grzejnika { if (!nf.bmode) { nf.timeSetOn = 0; nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL } server.send(200, "text/html", WebPage()); }); server.on("/setadrin", []() // ustaw adres czujnika wewnętrznego { if (!nf.bmode) { nf.timeSetOn = 0; nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL nf.setAddressTempIn(); } server.send(200, "text/html", WebPage()); }); server.on("/setadrout", []() // ustaw adres czujnika zewnętrznego { if (!nf.bmode) { nf.timeSetOn = 0; nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL nf.setAddressTempOut(); } server.send(200, "text/html", WebPage()); }); server.on("/setadr", []() // czytaj adres czujnika { if (!nf.bmode) { nf.timeSetOn = 0; nf.timeM = fminutes(ilM); // odnów czas trybu MANUAL nf.readAddressTemp(); } server.send(200, "text/html", WebPage()); }); server.begin(); // Start serwera www }
W opisie widać co poszczególne linki robią i jakich funkcji używają. Wstawek z angielskim tekstem nie musisz wpisywać.