Új hozzászólás Aktív témák

  • Janos250

    őstag

    Ismét előkerült egy fűtésszabályozási dolog ESP32-vel.
    Mivel a jómúltkor megtanítottatok a range slider használatára, átvariáltam egy kicsit, hogy demónak (talán) alkalmas legyen, és felteszem ide. Nem Githubra, vagy egyébre, mert a változók neveit átírtam magyarra. Miért szeretem a kezdőknek szánt demót így csinálni? Azért, mert ha magyar az azonosító, azonnal tudja első rápillantásra is, aki a kezébe veszi, hogy azt a nevet szabadon adhatjuk neki.
    Jobbat írni szabad!!!!! :)
    Kicsit hosszú, de - mivel szöveg - talán nem terheli nagyon a memóriát.

    # define IPharmadikSzama 0  // router fuggo
    # define IPnegyedikSzama 30 // olyat, ami nem utkozik massal
    #include <string>
    #include <WiFi.h>
    using namespace std;
    // PWM minta leddel
    const int ledPin = 2;  
    const int freq = 5000;
    const int ledChannel = 0;
    const int resolution = 8 ;
    const char* ssid     = "*********";
    const char* password = "*********";
    IPAddress ip(192, 168, IPharmadikSzama, IPnegyedikSzama);
    IPAddress dns(192, 168, IPharmadikSzama, 1);
    IPAddress gateway(192, 168, IPharmadikSzama, 1);
    IPAddress subnet(255, 255, IPharmadikSzama, 0);
    IPAddress primaryDNS(8, 8, 8, 8); //optional
    IPAddress secondaryDNS(8, 8, 4, 4); //optional
    char inputCode ;
    WiFiServer myServer(80);
    uint8_t futesSzazalek ;
    const char httpHeaderNull[] PROGMEM = R"=====(
    HTTP/1.1 200 OK
    Connection: close
    )=====";
    const char httpHeader[] PROGMEM = R"=====(
    HTTP/1.1 200 OK
    Content-type:text/html
    Connection: close
    )=====";
     char htmlHeader[] PROGMEM = R"=====(
    <!DOCTYPE html>
    <html lang = hu >
    <head>
      <meta charset="UTF-8">
      <title>Minta csuszkára</title>
    <style>
    .futesContainer {
      text-align: center;
    }
    </style>
    </head>
    )=====";
     char body[] PROGMEM = R"=====(
    <body>
      <div class="futesContainer">
        fűtés százalék: <span id="FutesSzazalek"></span>
        <br> 
        <input type="range" 
               id="FutesSlider" 
               min="1" max="99" value="50" 
               oninput="FutesSzazalek.innerText = this.value"
               onchange="servernekElkuld('F',this.value)"
        >
      </div>
      <script>
        /*megallas utan az ertek kuldese a szervernek: */
        servernekElkuld= function(keszulekKod,mitKuldErtek) {
          var futesXML = new XMLHttpRequest();
          futesXML.open("GET", keszulekKod+"="+mitKuldErtek, true);
          futesXML.send();
        }
        /*kezdoertek kiiras: */
        document.getElementById("FutesSzazalek").innerHTML = document.getElementById("FutesSlider").value;
    </script>
     
    </body></html>
    )=====";
    void setup(void) {
      Serial.begin(115200);
      delay(2000);
      WiFi.begin(ssid, password);
      if(!WiFi.config(ip, gateway, subnet, dns, secondaryDNS)) {
        Serial.println("STA Failed to configure");
      }
      Serial.print("Connecting to ");
      Serial.println(ssid);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      // Print local IP address and start web server
      Serial.println("");
      Serial.println("WiFi connected.");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());// this will display the Ip address of the Pi which should be entered into your browser
      myServer.begin();
    //  PWM minta leddel  
      ledcSetup(ledChannel, freq, resolution);
      ledcAttachPin(ledPin, ledChannel);
      Serial.println("setup lefutott");
    } ;  //  end setup
    void loop(void) {
      string aktualisSor = "";
      char elsoSor[50];  
      uint16_t karakterszam = 0 ;
      uint16_t sorokSzama = 0 ;  
      unsigned long elozoIdoMilliSec= 0;
      const long timeoutIdoMilliSec = 1000; //in milliseconds (example: 2000ms = 2s)
      IPAddress tavoliIP ;  // = uint8_t tavoliIP[4]
      WiFiClient myClient = myServer.available();   // Listen for incoming clients
      if (myClient) {
        tavoliIP = myClient.remoteIP() ;      
    //    printf("tavoli IP: %d.%d.%d.%d\n",tavoliIP[0],    
    //            tavoliIP[1],tavoliIP[2],tavoliIP[3]);    
        elozoIdoMilliSec= millis();
        aktualisSor = "";
    //    printf ("aktualisSor1 = %s\n",aktualisSor.c_str());   
        while (!myClient.available()){
          if ( (millis()- elozoIdoMilliSec) > 100 ) { 
            tavoliIP = myClient.remoteIP() ;      
            Serial.println(tavoliIP) ;
            myClient.flush() ;             
            myClient.stop() ;
            printf ("megszakitva\n");
            return;
          } ;  // if ( (millis()- elozoIdo) > 100 )
        } ;  // while (!myClient.available())
           
        while (myClient.connected() 
              && ( (millis() - elozoIdoMilliSec) <= timeoutIdoMilliSec) ) {
           
            if (myClient.available()) {
                karakterszam++ ;
                char c = myClient.read();
    //                      Serial.print(c);            
                aktualisSor  += c;
                
                if (c == '\n') {
                    if (aktualisSor.length() == 0) {
                        break;
                        printf (" ures sor  \n");     
                    }
                    else {
                      sorokSzama++ ;
                      
                      if ( sorokSzama == 1){ 
                        aktualisSor.copy (elsoSor, aktualisSor.length(), 0); 
                        elsoSor[aktualisSor.length()] = 0 ;                   
                      };
                    aktualisSor = "" ;
                    } ; // end else  (if(c == '\n'))
                } ; //end if (c == '\n')
                
            } ;   // if (myClient.available())
        } ;   //  while (myClient.connected()

      inputCode = elsoSor[5];
      switch (inputCode) {
        case ' ':
          printf("IP: %d.%d.%d.%d bejelentkezett, vagy frissített\n",tavoliIP[0],    
                  tavoliIP[1],tavoliIP[2],tavoliIP[3]);      
          myClient.println(httpHeader);  
          myClient.println(htmlHeader);  
          myClient.println(body);  
        break;
        case 'F':
          char futesSzazalekChar[2] ;
          futesSzazalekChar[0] = elsoSor[7];
          futesSzazalekChar[1] = elsoSor[8];
          futesSzazalekChar[2] = 0; //  terminator
          futesSzazalek = stoi(futesSzazalekChar);
          myClient.println(httpHeaderNull);
          printf("kuldo IP: %d.%d.%d.%d\n",tavoliIP[0],    
                  tavoliIP[1],tavoliIP[2],tavoliIP[3]);  
          printf (" F=%d\n",futesSzazalek);
    // PWM minta leddel
    futesszabalyozasMinta () ;
                
        break;
        
        default:
          printf (" ismeretlen jott, valami hiba van\n");
        break;      
      };  // end switch (inputCode)
      myClient.flush();        
      myClient.stop(); 
      while (myClient.available()){
        delay(1) ;
      }; //  while (myClient.available())
      } ;  // if (myClient)
      
      delay(50);
    } ; // end loop
    void futesszabalyozasMinta (){
    // PWM minta leddel
          ledcWrite(ledChannel, futesSzazalek/100.0*255);  
    } ;

Új hozzászólás Aktív témák

Hirdetés