ESP8266 NoFreeze cz. 2

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 &copy; 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ć.

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *