Wie kann ich ein 2. Relais mit dem D1 Mini anteuern?



  • Hey, ich versuche aktuell 2 Relais mit dem D1 Mini zu schalten. Der 1. funktioniert auch ohne probleme.
    Jetzt ist aber noch die frage wie ich den 2. unter einer anderen Port dazu bekomme.

    Hier der aktueller Code:

    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    #include <WiFiClient.h>
    ESP8266WebServer server(80);
    const char* ssid = "INTERNETNAME";
    const char* password = "INTERNETPASSWORT";
    //Signal-Pin des Relais: D1
    int relay_pin = 5;
    
    void setup()
    {
      pinMode(relay_pin, OUTPUT);
      Serial.begin(115200);
      Serial.println("ESP Gestartet");
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      Serial.print("Verbindung wird hergestellt ...");
      while (WiFi.status() != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println();
      Serial.print("Verbunden! IP-Adresse: ");
      Serial.println(WiFi.localIP());
      server.onNotFound([](){
        server.send(404, "text/plain", "Link wurde nicht gefunden!");  
      });
      server.on("/", []() {
        server.send(200, "text/plain", "Hello World");
      });
      server.on("/relay_on", []() {
        server.send(200, "text/plain", "Relais wurde angeschaltet.");
        relay_on();
      });
      server.on("/relay_off", []() {
        server.send(200, "text/plain", "Relais wurde ausgeschalten.");
        relay_off();
      });
      server.on("/state", []() {
        server.send(200, "text/plain", String(digitalRead(relay_pin)));
      });
      server.begin();
      Serial.println("Webserver gestartet.");
    }
    void loop() {
      server.handleClient();  
    }
    void relay_on(){
      digitalWrite(relay_pin, HIGH);  
    }
    void relay_off(){
      digitalWrite(relay_pin, LOW);    
    }r


  • Hey willkommen im Forum erstmal 🙂

    Zuerst wollte ich anmerken, dass wenn du einen Code postest, kannst du die Sprache definieren - dann wird alles schön formatiert. 😍 Dazu einfach die Sprache mit in die erste Zeile schreiben, also in dem Fall

    ```arduino
    dein Code
    ```


    Zuerst musst du zusätzlich das zweite Relais definieren, also an welchem Pin das Relais angeschlossen ist. In dem Fall ist es Pin D8. Die Definitionen kannst du aus dem Datenblatt vom D1 Mini entnehmen.

    Pin D8 wird mit 15 in der Software definiert - du nimmst in der Software immer die GPIO-Bezeichnungen. Nicht die Pin-Bezeichnungen.

    //Signal-Pin des Relais: D1
    int relay_pin = 5;
    //Signal-Pin des Relais 2: D8
    int relay2_pin = 15;
    

    Dann im Setup natürlich auch definieren, dass der Pin ebenfalls ein Output ist:

    pinMode(relay2_pin, OUTPUT);
    

    Dann brauchst du auch noch die beiden Funktionen, die dein zweites Relais betätigen. Kannst du eigentlich 1:1 aus deinem Code kopieren und anpassen:

    void relay_on(){
      digitalWrite(relay_pin, HIGH);  
    }
    void relay_off(){
      digitalWrite(relay_pin, LOW);    
    }
    
    void relay2_on(){
      digitalWrite(relay2_pin, HIGH);  
    }
    void relay2_off(){
      digitalWrite(relay2_pin, LOW);    
    }
    

    Und zu guter Letzt halt nur noch deine beiden Pfade vom zweiten Relais vom Webserver definieren:

    server.on("/relay2_on", []() {
        server.send(200, "text/plain", "Relais 2 wurde angeschaltet.");
        relay2_on();
      });
      server.on("/relay2_off", []() {
        server.send(200, "text/plain", "Relais 2 wurde ausgeschalten.");
        relay2_off();
      });
    

    Das Relais kannst du jetzt mit den beiden Links schalten:


    Joa, und das wars eigentlich schon. 🙂