-         
Ergebnis 1 bis 4 von 4

Thema: NodeMCU mit WebSchalter und lokalem Schalter

  1. #1
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78

    NodeMCU mit WebSchalter und lokalem Schalter

    Anzeige

    Hallo liebe Forum- Mitglieder,

    Ich will mit einem NodeMCU eine Steuerung aufbauen, mit folgenden Funktionen:

    - über Webserver Button betätigen zum Schalten eines Ausgangs
    - Vorort Eingang (Taster) betätigen zum Schalten des gleichen Ausgangs
    - Am Ausgang befindet sich ein Relais
    - Wird Ausgang nicht händisch abgeschaltet, geht es nach Zeit x selbst aus.

    Alle Handlungen lassen sich einzeln ausführen und funktionieren.

    Zusammengebaut bekomme ich nur den Web-Server zum Laufen, der Taster wird nicht beachtet.

    Ich vermute, dass da irgendwo noch ein Problem mit der richtigen Abfrage an der richtigen Stelle ist, ich weiß nur nicht wo.

    Kann sich das Listing ggf. mal jemand ansehen und mir einen kleinen Tipp geben, wo vielleicht ein Denkfehler steckt?

    Vielen Dank im Voraus.
    Geändert von HPM (02.03.2021 um 14:12 Uhr)
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.12.2010
    Ort
    NRW
    Beiträge
    223
    Hi,


    nur so auf die Schnelle den Code mal gelesen, was mir auffällt du wo hast du den die Variable "Taster" definiert ?


    if (Taster == HIGH) {TasterStatus ==1 ;} else if (TasterStatus ==0) ;

    zB.

    Code:
    #defineTASTER D3
    
    
    int taste = digitalRead(TASTER);
      if (digitalRead(TASTER)== LOW) 
      {
      USE_SERIAL.println();
      USE_SERIAL.printf("Taste gedrückt");
    
    
    
    
    usw.
    
    
    cYa pig

  3. #3
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78
    Hallo piggituX,

    vielen Dank für die schnelle Reaktion.
    ... Verdammt... das ist die verkehrte Version. Die mit dem eingebundnen Taster habe ich vermutlich überschrieben!
    Aber der Sinn sollte doch noch aus dem Script zu erkennen sein?

    Code:
    //                           Einstellung Arduino Software
    //siehe "NodeMCU-Boardeinstellung.jpg"
    //zusätzliche BoarVerwalter-URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
    
    //                           Boot- Bereich - Variablen deklarieren
      #include <ESP8266WiFi.h>
    
    //                           Parameter Festlegungen Zgänge für Netzwerk
      WiFiServer server(80);   // Webserver auf Port 80
      String header;           // Eine Variable um den HTTP Request zu speichern
    
      const char* ssid     = "xxxxxxx";                 //SSID eintragen
      const char* password = "xxxxxxx"; //Passwort eintragen
      
      String OutputState = "AUS"; // Status "EIN"/"AUS" des Relais (Anzeige für WebSite)
    
    //                            IOs deklarieren
      #define AusZeit 60000;      // 60 s (60000ms) Zeit für Timer
      long AutoAus;               // Automatische AusZeit
      bool Taster = 0;            // Variable für (Taster)
      bool Relais = 0;            // Variable für (Relais)
      
    //████████████████████████████  SETUP  ████████████████████████████
    void setup() {
    
      pinMode(5, INPUT_PULLUP);     // PIN5 (Taster) mit PullUp
      
      //pinMode(LED_BUILTIN, OUTPUT); // internet Board-LED  
      //digitalWrite(LED_BUILTIN, LOW);
      pinMode(12, OUTPUT);        // PIN12 (Relais)
      digitalWrite(12, LOW);        // PIN12 auf AUS
        
    //                                        Initialisierung und Einwahl ins Netzwerk
      WiFi.setAutoConnect(false);
      WiFi.mode(WIFI_STA);        // AP-Mode (IP:4.1) im ESP abzuschalten
      Serial.begin(9600);
      Serial.println("Starten");
      delay(10);
      IPAddress ip(xxx, xxx, xxx, xxx);      // IP-Adresse eintragen
      IPAddress dns(xxx, xxx, xxx, xxx);      //DNS-Server eintragen
      IPAddress gateway(xxx, xxx, xxx, xxx);  //Gateway eintragen
      IPAddress subnet(255, 255, 255, 0);  //SubNetMask eintragen
      WiFi.config(ip, dns, gateway, subnet);
      WiFi.begin(ssid, password);
    
      Serial.print("Connecting to ");
      Serial.println(ssid);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WLAN verbunden.");
      Serial.println("IP Adresse: ");
      Serial.println(WiFi.localIP());
      server.begin();
    }
    
    //████████████████████████████  LOOP  ████████████████████████████
    void loop() {
    
    //                                       Webseiten-Zeugs
    
      WiFiClient client = server.available(); // Hört auf Anfragen von Clients
      if (client) {                           // Falls sich ein neuer Client verbindet,
        Serial.println("Neuer Client.");      // Ausgabe auf den seriellen Monitor
        String currentLine = "";              // erstelle einen String mit den eingehenden Daten vom Client
        while (client.connected()) {          // wiederholen so lange der Client verbunden ist
          if (client.available()) {           // Fall ein Byte zum lesen da ist,
            char c = client.read();           // lese das Byte, und dann
    //        Serial.write(c);                  // gebe es auf dem seriellen Monitor aus
            header += c;
            if (c == '\n') {                  // wenn das Byte eine Neue-Zeile Char ist
            // wenn die aktuelle Zeile leer ist, kamen 2 in folge.
            // dies ist das Ende der HTTP-Anfrage vom Client, also senden wir eine Antwort:
            if (currentLine.length() == 0)
    
    //                                         Hier wird die HTML Seite angezeigt:
              {
                client.println("HTTP/1.1 200 OK");
                client.println("Content-type:text/html");
                client.println("Connection: close");
                client.println();
                client.println("<!DOCTYPE html><html>");
                // client.println("<meta http-equiv=\"refresh\" content=\"10; URL=http://xxx.xxx.xxx.xxx\">");
                client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
                client.println("<link rel=\"icon\" href=\"data:,\">");
                // Es folgen der CSS-Code um die Ein/Aus Buttons zu gestalten
                // Hier Hintergrundfarge (background-color) und Schriftgröße (font-size) anpassen
                client.println("<style>html { font-family: Verdana; display: inline-block; margin: 0px auto; text-align: center;}");
                client.println(".button { background-color: #888899; border: 3; color: black; padding: 50px 50px;");
                client.println("text-decoration: none; font-size: 35px; margin: 4px; cursor: pointer;}");
                client.println(".button2 {background-color: #00FF00;}</style></head>");
    
                // Webseiten-Überschrift
                client.println("<body><u><h2>SiSi Server-Schalter</h2></u>");
    
                //  WebSite aktueller Relais Status, und AN/AUS Button
                client.println("<p><h1>Momentaner Status " + OutputState + "</p></h1>"); // ◄◄◄◄
                if (OutputState == "AUS") {
                  client.println("<p><a href=\"/5/on\"><button class=\"button\">EIN</button></a></p>");
                } else {
                  client.println("<p><a href=\"/5/off\"><button class=\"button button2\">AUS</button></a></p>");
                }
                client.println("</body></html>");
                client.println();
                break;  // und wir verlassen mit einem break die Schleife
              } else { // falls eine neue Zeile kommt, lösche die aktuelle Zeile
                currentLine = "";
              }
            } else if (c != '\r') {   // wenn etwas kommt was kein Zeilenumbruch ist,
              currentLine += c;       // füge es am Ende von currentLine an
            }
          }
        }
    
    //                                         Relais ein- oder ausgeschaltet usw.
    LokalTaster:
       /* pinMode(1, INPUT); >> Setzt den Digital-Pin 1 als Eingang
           pinMode(1, INPUT_PULLUP); >> setzt Pin1 als Eingang und aktiviert Pullup
           digitalWrite(LED, HIGH;  >> LED nach +UB leuchtet nicht >> LED nach GND leuchtet
           digitalWrite(LED, LOW);  >> LED nach +UB leuchtet  >> LED nach GND leuchtet nicht */
    
    // Variablen initialisieren/ verarbeiten
      if (digitalRead(5) == LOW) { Taster == 1; } else { Taster == 0; }; //Var Taster (PIN5)
      if (Relais == 1) { digitalWrite(12, HIGH); } else { digitalWrite(12, LOW); }; //Var Relais (PIN12)
    
    //Relais automatisch abschalten, wenn Zeit "AutoAus" abgelaufen ist
        if (Taster == 1 || Relais == 1)
        {
          OutputState = "EIN";
          Serial.println("Relais EIN 133");
          Relais == 1;
        }
    
        if (millis() > (AutoAus))            // Wenn AusZeit abgelaufen ist,
        {
          OutputState = "AUS";
          Relais == 1;
        }
    
        if (Relais == 0) 
        { 
          AutoAus = millis() + AusZeit; 
          OutputState = "AUS";
          Serial.println("Relais AUS 147");
        }
    
        if (header.indexOf("GET /5/on") >= 0)
        {
          Serial.println("Relais AN 152");
          OutputState = "EIN";
          Relais == 1;
        }
         else if (header.indexOf("GET /5/off") >= 0)
        {
          Serial.println("Relais AUS 158");
          OutputState = "AUS";
          Relais == 0;
        }
    
    //                                         Debugger
    /* Serial.print("millis() ");
        Serial.println(millis());
        Serial.print("AutoAus ");
        Serial.println(AutoAus);
        Serial.print("OutputState ");
        Serial.println(OutputState);
        Serial.print("Var.Taster ");
        Serial.println(Taster);
        Serial.print("Var.Relais ");
        Serial.println(Relais);
    */
    
        //  Die Header-Variable für den nächsten Durchlauf löschen
        header = "";
    
        //  Die Verbindung schließen
        client.stop();
        Serial.println("Client getrennt.");
        Serial.println("");
      }
    }
    Geändert von HPM (02.03.2021 um 14:18 Uhr)
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  4. #4
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78
    Vielen Dank für die Unterstützung, hab ne Lösung gefunden.
    Der Beitrag hat sich somit erledigt.
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

Ähnliche Themen

  1. GUI für nodeMCU
    Von Moppi im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 67
    Letzter Beitrag: 06.12.2020, 09:30
  2. NodeMCU 1.0 e-ink und si7021
    Von Neuton23 im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 3
    Letzter Beitrag: 29.12.2018, 10:13
  3. Ultraschallsensor am nodeMCU
    Von Moppi im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 41
    Letzter Beitrag: 15.10.2018, 17:31
  4. nodeMCU an Arduino
    Von Moppi im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 16
    Letzter Beitrag: 14.10.2018, 09:30
  5. nodeMCU zu nodeMCU: keine Kommunikations-Verbindung mehr nach wenigen Minuten
    Von HaWe im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 02.10.2017, 14:01

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •