Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ArduinoJson.h>
- #include <ESP8266WiFi.h>
- #define SensorUmiditate A0
- //Programare in timp
- unsigned long ultimuTimp = 0;
- bool seUda = false;
- //8 ore
- int timpDeAsteptat = 8; //In ore
- long timpDeAsteptatTradus = 0; //Va tine valoare orelor in milisecunde
- unsigned long timpCurent;
- //Connectare la WiFi
- const char* ssid = "ProiectMat";
- const char* password = "12345678";
- //Connectare la serverul de vreme
- String apiKey = "1be7ec81c12edde1bb2327d188da9f1f";
- String locatie = "arad,RO";
- const char* host = "api.openweathermap.org";
- const char* sursa = "/data/2.5/forecast?q=arad,RO&cnt=1&appid=1be7ec81c12edde1bb2327d188da9f1f";
- //Marimea maxima buffer JSON
- const size_t MAX_CONTENT_SIZE = 512;
- //Structura pt date vreme
- struct dateVreme{
- char* temperatura;
- char* umiditate;
- };
- //Copie pentru temperatura/umiditate
- double cTemperatura;
- double cUmiditate;
- //Variabile pentru vreme
- const char* stareVreme;
- String cStareVreme;
- String stareVremeTradusa;
- long presiune;
- //Nr pin pentru electrovalva
- int pinValva = 12;
- bool MAuto = true;
- int value = HIGH;
- //Creare server pe port 1133 si un al doilea client pentru a accesa vremea
- WiFiServer server(1133);
- WiFiClient client2;
- void setup() {
- Serial.begin(115200);
- delay(10);
- pinMode(pinValva, OUTPUT);
- digitalWrite(pinValva, HIGH);
- Serial.println();
- Serial.println();
- Serial.print("Se conecteaza ");
- Serial.println(ssid);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- // Start the server
- server.begin();
- Serial.println("Serverul a pornit");
- // Print the IP address
- Serial.print("Foloseste acest site pentru a intra: ");
- Serial.print("http://");
- Serial.print(WiFi.localIP());
- Serial.println("/");
- acceseazaVreme();
- }
- void loop() {
- WiFiClient client = server.available();
- if (!client) {
- return;
- }
- Serial.println("new client");
- while(!client.available()){
- delay(1);
- }
- String request = client.readStringUntil('\r');
- Serial.println(request);
- client.flush();
- //Mod manual/auto
- if(request.indexOf("/MODE=AUTO") != -1){
- MAuto = true; //Mod automatic
- }
- if(request.indexOf("/MODE=MANUAL") != -1){
- MAuto = false; //Mod manual
- }
- //Control electrovalva
- if (request.indexOf("/EVALVA=ON") != -1) {
- digitalWrite(pinValva, LOW); //Porneste electrovalva
- value = LOW;
- }
- if (request.indexOf("/EVALVA=OFF") != -1) {
- digitalWrite(pinValva, HIGH); //Inchide electrovalva
- value = HIGH;
- }
- //Ore mod manual
- if(request.indexOf("/ORA=2") != -1){
- timpDeAsteptat = 2;
- }
- if(request.indexOf("/ORA=4") != -1){
- timpDeAsteptat =4;
- }
- if(request.indexOf("/ORA=6") != -1){
- timpDeAsteptat = 6;
- }
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println("");
- client.println("<!DOCTYPE HTML>");
- client.println("<html>");
- client.print("Electrovalva este: ");
- if(value == LOW){
- client.print("Pornita");
- }else{
- client.print("Oprita");
- }
- client.println("<br>");
- client.print("Instalatia este in mod: ");
- if(MAuto == true){
- client.print("Automatic");
- }else{
- client.print("Manual");
- }
- client.println("<p>Nivel umiditate sol: " + String(verificaUmiditate()) + "%" + "</p>");
- client.println("<p>Timp de asteptat: "+ String(timpDeAsteptat) + " ore" + "</p>");
- client.println("<p>Temperatura afara: " + String(cTemperatura) + "</p>");
- client.println("<p>Umiditatea afara: " + String(cUmiditate) + "</p>");
- client.println("<p>Pressiunea atmosferica: " + String(presiune) + "</p>");
- client.println("<p>Stare vreme: " + stareVremeTradusa + "</p>");
- client.println("Control electrovalva: ");
- if(MAuto == true){
- client.println("<br>");
- client.println("Instalatia este in modul automatic!");
- }else{
- client.println("<br>");
- client.println("<a href=\"/EVALVA=ON\"\"><button>Porneste</button></a>");
- client.println("<a href=\"/EVALVA=OFF\"\"><button>Opreste</button></a><br/>");
- }
- client.println("<br>");
- client.println("Control mod: ");
- client.println("<br>");
- client.println("<a href=\"/MODE=AUTO\"\"><button>Automatic</button></a>");
- client.println("<a href=\"/MODE=MANUAL\"\"><button>Manual</button></a><br/>");
- if(MAuto == false){
- client.println("Control manual: ");
- client.println("<br>");
- client.println("<a href=\"/ORA=2\"\"><button>2H</button></a>");
- client.println("<a href=\"/ORA=4\"\"><button>4H</button></a><br/>");
- client.println("<a href=\"/ORA=6\"\"><button>6H</button></a>");
- }
- client.println("</html>");
- delay(1);
- Serial.println("Client disonnected");
- Serial.println("");
- }
- void acceseazaVreme() {
- if(conecteazaVreme(host)){
- if(trimiteCerere(host,sursa)){
- dateVreme dateVreme;
- if(citesteJson(&dateVreme)){
- scrieDateVreme(&dateVreme);
- }
- }
- }
- }
- bool citesteJson(struct dateVreme* dateVreme) {
- String line = "";
- line = client2.readStringUntil('\n');
- Serial.println("Se iau valorile JSON!");
- const size_t bufferSize = 2*JSON_ARRAY_SIZE(1) + 2*JSON_OBJECT_SIZE(1) + 2*JSON_OBJECT_SIZE(2) +
- JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(7) + 2*JSON_OBJECT_SIZE(8) + 435;
- DynamicJsonBuffer jsonBuffer(bufferSize);
- JsonObject& root = jsonBuffer.parseObject(line);
- if (!root.success()) {
- Serial.println("JSON esuat!");
- return false;
- }
- Serial.println("Se stocheaza datele!");
- strcpy(dateVreme->temperatura, root["list"][0]["main"]["temp"]);
- strcpy(dateVreme->umiditate, root["list"][0]["main"]["humidity"]);
- cTemperatura = root["list"][0]["main"]["temp"];
- cUmiditate = root["list"][0]["main"]["humidity"];
- presiune = root["list"][0]["main"]["pressure"];
- stareVreme = root["list"][0]["weather"][0]["main"];
- cStareVreme = String(stareVreme);
- if(cStareVreme == "Clouds"){
- stareVremeTradusa = "Innorat";
- }else if(cStareVreme == "Rain"){
- stareVremeTradusa = "Ploaie";
- }
- return true;
- }
- bool trimiteCerere(const char* host,const char* sursa){
- client2.print("GET /data/2.5/forecast?");
- client2.print("q="+locatie);
- client2.print("&appid="+apiKey);
- client2.print("&cnt=1");
- client2.println("&units=metric");
- client2.println("Host: api.openweathermap.org");
- client2.println("Connection: close");
- client2.println();
- return true;
- }
- void scrieDateVreme(const struct dateVreme* dateVreme){
- Serial.print("Temeperatura aerului este: ");
- Serial.println(dateVreme->temperatura);
- Serial.print("Umiditate aerului este: ");
- Serial.println(dateVreme->umiditate);
- }
- bool conecteazaVreme(const char* numeServer){
- Serial.print("Se conecteaza la ");
- Serial.println(numeServer);
- bool ok = client2.connect(numeServer,80);
- Serial.println(ok ? "Connectat la serverul de vreme" : "Nu sa conectat la serverul de vreme!");
- return ok;
- }
- void deconecteazaVreme(){
- Serial.println("Deconectat de la serverul de vreme!");
- client2.stop();
- }
- void asteapta(){
- Serial.println("Se asteapta 30 secunde");
- delay(30000);
- }
- int verificaUmiditate(){
- float valoareSensor;
- valoareSensor = analogRead(SensorUmiditate);
- int procentaj;
- int map_low = 378;
- int map_high = 56;
- procentaj = map(valoareSensor,map_low,map_high,0,100);
- if(procentaj <= 0){
- procentaj = 0;
- }
- if(procentaj >= 100){
- procentaj = 100;
- }
- return procentaj;
- }
- void verificaTimp(){
- timpCurent = millis();
- timpDeAsteptatTradus = timpDeAsteptat * 1000 * 60 *60;
- if(timpCurent - ultimuTimp >= timpDeAsteptatTradus){
- ultimuTimp = timpCurent;
- if(MAuto == false){
- digitalWrite(pinValva,HIGH);
- value = HIGH;
- seUda = true;
- //TODO
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement