Warum kann ich am ESP das Relais nur einmal schalten?

Hallo! Ich möchte von einem ESP8266 über mein Wlan ein Relais schalten. Mit dem angehängten Code schaltet das Relais das erste mal im Setup. in der Loop gibt es keine Reaktion mehr. Bitte helft mir. Was mache ich falsch?

String off = "http://192.168.1.143/relay_off";
String on  = "http://192.168.1.143/relay_on";
String Befehl = on;
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

HTTPClient sender;
WiFiClient wifiClient;

// WLAN-Daten
const char* ssid       = "xyz";
const char* password   = "1234;


void setup() {
  Serial.begin(115200);
  Serial.println();
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
    Serial.print(".");
  }

  Serial.println("Verbunden!");


  if (sender.begin(wifiClient, Befehl)) 
  {
    Serial.println("Befehl=" +Befehl);
    // Optional; Falls Header für Authentifizierung o.ä gesetzt werden sollen
    // sender.addHeader("Authorization", "Bearer dein_token_hier");

    // HTTP-Code der Response speichern
    int httpCode = sender.GET();
   

    if (httpCode > 0) {
      
      // Anfrage wurde gesendet und Server hat geantwortet
      // Info: Der HTTP-Code für 'OK' ist 200
      if (httpCode == HTTP_CODE_OK) {

        // Hier wurden die Daten vom Server empfangen

        // String vom Webseiteninhalt speichern
        String payload = sender.getString();

        // Hier kann mit dem Wert weitergearbeitet werden
				// ist aber nicht unbedingt notwendig
        Serial.println(payload);
        
        
        
      }
      
    }else{
      // Falls HTTP-Error
      Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str());
    }

    // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
   // sender.end();
    
  }else {
    Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!");
  }
  
}


void loop()
 {
 Befehl = "on";
 Serial.println(Befehl);
senden();
delay(1999);
Befehl = "off";
Serial.println(Befehl);
senden();
delay(1000);
}

void senden()
{
  
//  sender.begin;
  if (sender.begin(wifiClient, Befehl)) 
  {
    
    // Optional; Falls Header für Authentifizierung o.ä gesetzt werden sollen
    // sender.addHeader("Authorization", "Bearer dein_token_hier");

    // HTTP-Code der Response speichern
    int httpCode = sender.GET();
   
    //if (httpCode > 0) {
      
      // Anfrage wurde gesendet und Server hat geantwortet
      // Info: Der HTTP-Code für 'OK' ist 200
      if (httpCode == HTTP_CODE_OK) {

        // Hier wurden die Daten vom Server empfangen

        // String vom Webseiteninhalt speichern
        String payload = sender.getString();

        // Hier kann mit dem Wert weitergearbeitet werden
				// ist aber nicht unbedingt notwendig
        Serial.println(payload);
        
        
        
      //}
      
    }else{
      // Falls HTTP-Error
      Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str());
    }

    // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
   // sender.end();
    
   
  }

am besten den Topic löschen und neu öffnen aber ohne private Passwörter und WiFi Namen. das is ein groben Verstoß gegen Privatdaten Schutz

  Befehl = on;
  //Serial.println("ON");
  senden();
  delay(1999);
  Befehl = off;

weil:

wenn ich im setup von on auf off oder umgekehrt wechsle, funktioniert das. Aber im Loop passiert dann nichts mehr.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

ich seh das nicht. gibt es im ESP ein Wichtel dass nach Kinderwünsche Relais schaltet? ich dacht es mus irgendwo digitalWrite(RelaiPin, HIGH); stehen oder so.

1 Like

Der code stammt vom Sender! digitalWrite(RelaiPin, HIGH) kommt dann im Empfänger vor.

cool! zeige mir bitte wie es geht, wenn du es in setup() machst

magst nicht noch mal von vorne anfangen?

Einfach das Beispiel

BasicHTTPClient.ino

und dazu eine Umschaltung ob du eben deinen off String oder on String schickst.

Oder du beschreibst was du genau machen willst.

Das kann schon im Setup funktionieren. Nur muss man zum Schalten immer erst den Sketch umschreiben. Und da der TO das über WiFi machen möchte, braucht er hier kein "digitalWrite" !

@sw1511
Dennoch solltest du deine WLan Zugangsdaten hier löschen.
Oder möchtest du gern "fremde Gäste" in deinem Netz haben.

das war doch entsheidende Frage wo ist diesser setup das schalten kann, im Empfänger Sketch oder in diesem.

in diesem.
habe mich falsch ausgedrückt. Die Befehl Variable wird übertragen, im Loop versuche ich dann das Relais zu toggeln. Das geht nicht.
Wie kann ich diesen Beitrag löschen und neu beginnen?

ersten Post löschen

Du kannst den 1. Post mit dem Bleistift-Symbol bearbeiten.

Und mach es doch mal ganz einfach.
Schreibe einen "einfachen" Sketch, mit dem du im Setup schaltest und zeige den hier.

Der Zustand welcher in Zeile 3 definiert wird, wird auch gesendet. Ob in der Loop etwas drin steht oder nicht. In meinem Fall, wo ich das Relais ständig hin und herschalten lassen will, passiert gar nichts ausser die Ausgabe auf den seriellen Monitor.

Dann zeig uns das doch, mit einer leeren loop.
So wie du es einschaltest und ausschaltest.
Wir brauchen es so, wie es bei dir funktioniert, da wir nicht deine Hardware haben.

Wenn ich in Zeile 3 "String Befehl = off;" habe schaltet Relais aus. Bei"String Befehl = on;" schaltet Relais aus. Egal ob die Loop leer ist oder nicht.

Ok, wir sollen das also für dich zurecht basteln ?
Wenn du Hilfe haben möchtest, solltest du uns schon helfen.

Ich bin einfach zu faul, etwas zu basteln, was dann nicht funktioniert.
Sorry....

Danke!

Gerne...dafür nicht.