Daten aus Esp8266

Hallo lieber Arduino Forum!

Hab mit dem Esp8266 Wlan-Modulangeschlossen an den Arduino Uno einen Webserver erstellt und durch Buttons kann ich dann die 2 GPIO Pins ansteuern.
Da ich aber mehr als 2 Pins brauche wollte ich euch fragen ob ihr ein Programm für den Arduino habt der mir Werte aus der Esp auslest und diese je nachdem wie ich sie programmiere, einen Ausgang am Arduino zum Schalten bringt?
Danke schonmal für eure Hilfe!

M4nuel:
Hallo lieber Arduino Forum!

Hab mit dem Esp8266 Wlan-Modulangeschlossen an den Arduino Uno einen Webserver erstellt und durch Buttons kann ich dann die 2 GPIO Pins ansteuern.
Da ich aber mehr als 2 Pins brauche wollte ich euch fragen ob ihr ein Programm für den Arduino habt der mir Werte aus der Esp auslest und diese je nachdem wie ich sie programmiere, einen Ausgang am Arduino zum Schalten bringt?
Danke schonmal für eure Hilfe!

Ich befürchte, du bist hier falsch.
Wir verkaufen hier keine Programme, sondern wir helfen (auch dir) bei der Programmierung.
Dazu stellst du deinen aktuellen Sketch vor und auch deine Frage.

Google mal nach Arduino als Slave am ESP8266 per i2c, oder so ähnlich. Gibt einen ausführlichen Thread darüber. Ein Portexpander wie den 8574 oder mcp23017 wären aber einfacher für dich, wenn es nur um Pins geht.

Ich hatte hier mal eine Studie dazu veröffentlicht.

Gruß Tommy

Danke für die schnelle Hilfe werde ich mir gleich mal anschauen:)

Es gibt auch ESP8266 Module mit mehr Ausgängen. Sogar bei dem ESP8266-01 kann man bis zu 4 verwenden. Von GPIO0 bis GPIO3.

Ich hab das Esp8266 -01 Modul das hat aber nur 2 Ausgänge GPIO0 und GPIO2. Brauche mindestens 4 hab schon gesehen das man das „modden“ kann auf 4 Ausgänge ist aber sehr Riskant das man einen Fehler macht.

Sogar bei dem ESP8266-01 kann man bis zu 4 verwenden. Von GPIO0 bis GPIO3.

Da muss man nix modden, die sind alle da, auf dem vorhandenen 8 Pin-Header. RX und TX sind auch normale GPIO-Pins, wenn man die serielle Schnittstelle im Betrieb nicht verwendet.

Ok Danke!
Das heißt für den Sketch Upload verwende ich die Rx und TX Pins und danach zur Steuerung meiner Relaise.

Genau. Du kannst da mal einen großen Widerstand zwischen ESP und Relais machen, dann must du Relais Platine vielleicht gar nicht abstöpseln, sondern nur den Jumper der Relaisstromversorgung runterziehen

OK Danke für die Hilfe!

GPIO0 ist Pin 0 GPIO2 ist Pin 2 habe Versucht TX als Pin 1 und RX als Pin 3 in der IDE zu Initialisieren hat aber nicht funktioniert wisst ihr wo der Fehler liegt?

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

// wireless network credentials:
const char* ssid = “xyz”;
const char* password = “xyz”;

// hostname for this system:
const char* host = “webcontrol”;

// define GPIO pins:
const int output1 = 0; //GPIO0
const int output2 = 2; //GPIO2
const int output3 = 1; //TX GPIO1
const int output4 = 3; //RX GPIO3

// output status variables:
boolean output1_state = false;
boolean output2_state = false;
boolean output3_state = false;
boolean output4_state = false;

// web server on port 80:
ESP8266WebServer server(80);

void setup()
{
// configure GPIO 0 and GPIO 2 as outputs:
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
// GPIO1 and GPIO3
pinMode(output3, OUTPUT);
pinMode(output4, OUTPUT);

// set outputs to low:
digitalWrite(output1, LOW);
digitalWrite(output2, LOW);
digitalWrite(output3, LOW);
digitalWrite(output4, LOW);

(sind nur Programmausschnitte)

Setze Deine Codeschnipsel bitte in Codetags (</> oben links im Forumseditor), dann sind sie für alle vernünftig lesbar.

Gruß Tommy

Gerne:D

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

// wireless network credentials:
const char* ssid = "xyz";
const char* password = "xyz";

// hostname for this system:
const char* host = "webcontrol";

// define GPIO pins:
const int output1 = 0;    //GPIO0
const int output2 = 2;    //GPIO2
const int output3 = 1;    //TX GPIO1
const int output4 = 3;    //RX GPIO3

// output status variables:
boolean output1_state = false;
boolean output2_state = false;
boolean output3_state = false;
boolean output4_state = false;

// web server on port 80:
ESP8266WebServer server(80);

String getContent()
{
  // create content for the website:
  String content = "<html><head><title>ESP8266 WebControl</title></head><body>";
  content += "Home Control!

";

  if (output1_state)
  {
    content += "Output1: <a href=\"output1\"><button>ON</button></a>
";
    Serial.print("Output1: ON");
    Serial.print('\n');
  }
  else
  {
    content += "Output1: <a href=\"output1\"><button>OFF</button></a>
";
    Serial.print("Output1: OFF");
    Serial.print('\n');
  }

  if (output2_state)
  {
    content += "Output2: <a href=\"output2\"><button>ON</button></a>
";
    Serial.print("Output2: ON");
    Serial.print('\n');
  }
  else
  {
    content += "Output2: <a href=\"output2\"><button>OFF</button></a>
";
    Serial.print("Output2: OFF");
    Serial.print('\n');
  }
  if (output3_state)
  {
    content += "Output3: <a href=\"output3\"><button>ON</button></a>
";
    Serial.print("Output3: ON");
    Serial.print('\n');
  }
  else
  {
    content += "Output3: <a href=\"output3\"><button>OFF</button></a>
";
    Serial.print("Output3: OFF");
    Serial.print('\n');
  }
  if (output4_state)
  {
    content += "Output4: <a href=\"output4\"><button>ON</button></a>
";
    Serial.print("Output4: ON");
    Serial.print('\n');
  }
  else
  {
    content += "Output4: <a href=\"output4\"><button>OFF</button></a>
";
    Serial.print("Output4: OFF");
    Serial.print('\n');
  }
Serial.print('\n');

  

  content += "</body></html>";

  return content;
}

void setup()
{
  // configure GPIO 0 and GPIO 2 as outputs:
  pinMode(output1, OUTPUT);
  pinMode(output2, OUTPUT);
  // GPIO1 and GPIO3
  pinMode(output3, SPECIAL);
  pinMode(output4, OUTPUT);

  // set outputs to low:
  digitalWrite(output1, LOW);
  digitalWrite(output2, LOW);
  digitalWrite(output3, LOW);
  digitalWrite(output4, LOW);

  // initialize serial port for debugging purpose:
  Serial.begin(115200);

  // connect to the wireless network:
  WiFi.begin(ssid, password);

  // wait for wireless network connection and print connection settings:
  Serial.println("");
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("Wireless network connection established.");
  Serial.print("SSID: ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // initialize mDNS:
  if (MDNS.begin(host))
  {
    Serial.println("mDNS responder started");
  }
  MDNS.addService("http", "tcp", 80);

  // start HTTP server:
  server.begin();
  Serial.println("HTTP server started");

  // print start page:
  server.on("/", [](){
    server.send(200, "text/html", getContent());
  });

                                                // control output1:
  server.on("/output1", [](){
    if (output1_state)
    {
      digitalWrite(output1, LOW);
      output1_state = false;
    }
    else
    {
      digitalWrite(output1, HIGH);
      output1_state = true;
    }
    server.send(200, "text/html", getContent());
    delay(1000);
  });

                                                  // control output2:
  server.on("/output2", [](){
    if (output2_state)
    {
      digitalWrite(output2, LOW);
      output2_state = false;
    }
    else
    {
      digitalWrite(output2, HIGH);
      output2_state = true;
    }
    server.send(200, "text/html", getContent());
    delay(1000);
  });

                                                  // control output3:
  server.on("/output3", [](){
    if (output3_state)
    {
      digitalWrite(output3, LOW);
      output3_state = false;
    }
    else
    {
      digitalWrite(output3, HIGH);
      output3_state = true;
    }
    server.send(200, "text/html", getContent());
    delay(1000);
  });

                                                    // control output4:
  server.on("/output4", [](){
    if (output4_state)
    {
      digitalWrite(output4, LOW);
      output4_state = false;
    }
    else
    {
      digitalWrite(output4, HIGH);
      output4_state = true;
    }
    server.send(200, "text/html", getContent());
    delay(1000);
  });
  
}

void loop()
{
  // handle HTTP request:
  server.handleClient();
}

Hi Manuel,
Ist zwar schon etwas laenger her, aber hast Du das mit dem ESP-01 und 4 GPIO ans laufen bekommen?
Ich moechte dieses Teil auch mit einem Relais Modul aufbauen und die RX/TX fuer I2C benutzen um noch ein paar analoge Werte mit einem 4 Kanal ADC einlesen.
Das Ganze, besser die ganzen Module dienen dann als Remote IO fuer ein Raspi Zentralrechner
Danke und mit freundlichem Gruss
Michael

Du kannst auch ein pfc8574 port expander per i2c dran stricken. Was fertiges direkt um die Relaisplatine anzusteuern.
Vielleicht gibt es ja auch fertige Relaisplatinen mit i2c schon drauf. Oder halt so