Ovladani LED pres web - nahodne zapinani

Odpovědět
cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Ovladani LED pres web - nahodne zapinani

Příspěvek od cz_marek » 20 kvě 2020, 15:42

Ahoj, mam problem s ovladanim lLED lampicky pres webove rozhrani. Už to hodne dlouho zkoušim odhalit sam ale jesm na to kratky.

Je to jednoducha lampicka ktera se ovlada bud kapacitnim tlacitkem nebo pres web stranku. Jeden dotyk tlacitka lampicku rozsvítí nebo zhasne, delší přidržení nastavuje intenzitu. Ovladani tlacitkem je v poho a funguje spolehlive (otestovano tak ze jsem odstranil kod ktery řeší ovladni pres web).

Na web strance je
- tlacitko vypnout
- tlacitko zapnout
- nastaveni nekolika stupnu intenzity pomoci samostatnych tlacikek
- tlačítko pro refresh (nacteni aktualně nastavené intenzity pokud se změní manualne
- tlacitko pro stažení nové verze programu z webu

Problem je že se lampička v nahodnych intervalech sama zapina, meí se intenzita - občas se zapne, probehne par cyklu od min po max intenzitu pak sviti vypne se apod. Je to jako by ji ridil duch :-) Delal jsem podobnych lampicek vic a vsechny trpeli stejnym neduhem - vetsinou jsem vyresil odstranenm weboveho ovladani ale zrovna u jedne se to dost hodi.

Mohl by se prosim nekdo mrknout na kod a poradit?

Diky...

Kód: Vybrat vše


#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#include "OTAweb.h"
#include <ESP8266WiFiMulti.h>
#include <Wire.h>

ESP8266WiFiMulti wifiMulti;
// inicializace WiFi v módu klienta
WiFiClient client;
WiFiServer server(80); 
int WiFiStrength = 0;



int buttonPIN = 14;
int ledPIN = 15;
int ButtonValue; 
int Old_ButtonValue; 

int LightOn = 0; 
int Brightness = 0; 
unsigned long startTime = 0; 
int intenzita = 0;


void setup() {
  Serial.begin(115200);
  pinMode(ledPIN, OUTPUT);
  pinMode(buttonPIN, INPUT);
  StartWiFi();

  StartSERVER();
}

void loop() {
 
  
  WiFiStrength = WiFi.RSSI(); 

  unsigned long currentLCDMillis = millis();

  ledControl();
  showWEB();

}


//#########################################################################################
void ledControl(){
  ButtonValue = digitalRead(buttonPIN); //precteni stavu tlacitka a nastaveni stavu pinu - HIGH nebo LOW
                                        //pokud je stisknuto stav vystupu je  HIGH

    if((ButtonValue == HIGH) && (Old_ButtonValue == LOW)) { //podminka která řídí že pokud je předchozí stav LOW tak se nastavi HIGH
                                                            
      LightOn = 1 - LightOn; // nastavení stavu svetla 1 - svetlo svítí , 0 je vypnuto)
      startTime = millis(); // sledovani času jak dlouho je stisknuto tlačítko
      
      delay(10); 
    }

    

    if((ButtonValue == HIGH) && (Old_ButtonValue == HIGH)){ // sledovani jestli je tlacitko stisknuto
        if(LightOn == 1 && (millis() - startTime) > 20){ //pokud je tlacitko stisknuto dele nez 20ms
//            Brightness ++; //zvyseni intenzity
            Brightness = Brightness + 10; //nastaveni přírustku intenzity
            delay(35); 

              if(Brightness > 1023){ //pokud intenzita dosahne maxima 1023
                   Brightness = 0; // reset intenzity na 0
               }
          }
      }
  
Old_ButtonValue = ButtonValue; 

    if(LightOn == 1) { //pokud svetlo svítí
         analogWrite(ledPIN, Brightness); //nastavi se puvodní intenzita
    } else {
         analogWrite(ledPIN, 0); // nebo se svetlo vypne
    }
    intenzita = map(Brightness, 0, 1023, 0, 100); 
    Serial.println(Brightness);
}


//#########################################################################################
void StartWiFi(){

  WiFi.mode(WIFI_STA);
  wifiMulti.addAP("jmeno", "heslo");   
  wifiMulti.addAP("jmeno", "heslo");
  wifiMulti.addAP("jmeno", "heslo");
  wifiMulti.addAP("jmeno", "heslo");
 
  Serial.println("Connecting ...");
  while (wifiMulti.run() != WL_CONNECTED) { 
    delay(1000);    

    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  
}
//#########################################################################################
void StartSERVER(){
  server.begin();                  //Start server
  Serial.println("HTTP server started");

  delay(1500);
}

//#########################################################################################
void showWEB(){

 WiFiClient client = server.available();
 if (!client) {
 return;
 } 

  Serial.println("new client");
 

  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  if (request.indexOf("/ZapnoutSvetlo") != -1)  {
    LightOn = 1;
    analogWrite(ledPIN, Brightness);
  }
  if (request.indexOf("/VypnoutSvetlo") != -1)  {
    analogWrite(ledPIN, 0);
    LightOn = 0;
  }

  if (request.indexOf("/10") != -1)  {
    Brightness = 100;
  }
  if (request.indexOf("/25") != -1)  {
    Brightness = 250;
  }
  if (request.indexOf("/50") != -1)  {
    Brightness = 500;
  }
  if (request.indexOf("/75") != -1)  {
    Brightness = 750;
  }
  if (request.indexOf("/100") != -1)  {
    Brightness = 1023;
  }
  
  if (request.indexOf("/OTAupdate") != -1)  {
    checkForUpdates();
  }


  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");

  client.println("<html>");
  client.println(" <head>");
  client.println(" <title>Lampicka</title>");
  client.println("  </head>");
  client.println("  <body>");

  client.print("<h1 style=\"position: absolute; left: 275px; top: 0px\">Lampicka</h1><br>");

      if(LightOn == 1) { 
  client.print("<div style=\"position: absolute; left: 50px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_switch.png\" style=\"width: 250px; height: 250px\"></div>");
  client.print("<a href=\"/VypnoutSvetlo\"><div style=\"position: absolute; left: 425px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_off.png\" style=\"width: 250px; height: 250px\"></div></a>");
    } else {
  client.print("<a href=\"/ZapnoutSvetlo\"><div style=\"position: absolute; left: 50px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_on.png\" style=\"width: 250px; height: 250px\"></div></a>");
  client.print("<div style=\"position: absolute; left: 425px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_switch.png\" style=\"width: 250px; height: 250px\"></div>");
    }

  client.print("<div style=\"position: absolute; left: 325px; top: 180px; font-size:40px; color:grey; font-weight: bold\">");
  client.println(intenzita);
  client.print("%");
  client.print("</div>");

  client.println("<a href=\"/10\"\"><div style=\"position: absolute; left: 50px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">10%</div></a>");
  client.println("<a href=\"/25\"\"><div style=\"position: absolute; left: 165px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">25%</div></a>");
  client.println("<a href=\"/50\"\"><div style=\"position: absolute; left: 280px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">50%</div></a>");
  client.println("<a href=\"/75\"\"><div style=\"position: absolute; left: 395px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">75%</div></a>");
  client.println("<a href=\"/100\"\"><div style=\"position: absolute; left: 510px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">100%</div></a>");

  client.print("<p>");

  client.print("<div style=\"position: absolute; left: 12px; top: 700px; font-size:12px\"");
  client.print("Pripojeno do WiFi: ");
  client.println("<b>");
  client.println(WiFi.SSID());
  client.println("</b>"); 
  client.print("<br>");
  client.print("Sila WiFi signalu ");
  client.println(WiFiStrength);
  client.println("dBm<br>");
  client.println("<p><a href=\"/REFRESH\"\"><button>Refresh</button></a></p>");
  client.print("<p>Verze Firmware: 00");
  client.print(FW_VERSION); 
  client.print("<br>Dostupna verze na serveru: ");
  client.print(newOTAFW); 
  client.println("<p><a href=\"/OTAupdate\"\"><button>Firmware update</button></a></p>");
  client.print("</p>");
  client.println("</div>");
  
  client.println("<body>");
  client.println("</html>");
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}


KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Ovladani LED pres web - nahodne zapinani

Příspěvek od KamilV » 20 kvě 2020, 16:57

Není tam lampička na veřejné IP? To skoro vypadá, jakoby se po ní toulal nějaký clawler bot, např. google, a zkoušel "ťukat" do všech adres, aby si zaindexoval jejich obsah...

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Ovladani LED pres web - nahodne zapinani

Příspěvek od cz_marek » 20 kvě 2020, 21:56

Ne je to na interni adrese. Neni tam pristup z venku. Jedine ze by neco z routeru...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Ovladani LED pres web - nahodne zapinani

Příspěvek od KamilV » 21 kvě 2020, 08:29

Sledoval bych na Serialu, jaký client (z jaké IP) volá requesty. Abys lokalizoval, kde k tomu dochází. Zda se vůbec jedná o instrukce z requestů.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Ovladani LED pres web - nahodne zapinani

Příspěvek od cz_marek » 21 kvě 2020, 08:56

Dobrý napad jen nevim jak to sledovat dlouhodobě - nekdy je tyden klid a jindy se to deje 10x za den. Nejaky napad na "logovani" bez SD karty?

frm77
Příspěvky: 6
Registrován: 02 čer 2020, 19:16
Reputation: 0

Re: Ovladani LED pres web - nahodne zapinani

Příspěvek od frm77 » 20 čer 2020, 11:34

Ahoj, nevím, jestli jsi to vyřešil, ale zkusil jsi změřit jaké napětí máš na tom ESP? Já jsem řešil podobné chování a zajistil jsem, že mi to dělal úbytek napětí na ESP. jednou to fungovalo ok, pak somovolně se zapínalo rele atd. Použil jsem extra měnič napětí jen pro ESP a od té doby to jede na 100%.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů