ESP8266 kommunikation mit dem Arduino

Einen schönen guten Tag,

da ich nun schon ein paar Abende an diesem Problem sitze und noch keine Lösung gefunden habe, möchte ich gern um eure Hilfe bitten.

Ich habe eine originalen Arduino 2560 und ein ESP8266 01S Modul. Ich habe das ESP Modul über die RX und TX Pins angeschlossen sowie Reset und GRD verbunden und kann dieses darüber Programmieren. Grundlegend möchte ich eine Seite von einem Server aufrufen, die ein JSON String ausgibt und möchte diesen gesamten JSON String über der ESP8266 an den Arduino übergeben. Das Abrufen klappt Problemlos, jedoch bekomme ich die Daten nicht an den Arduino gesendet.

Eventuell habe ich hier ein paar Fehler gemacht, ich schreibe aber folgend mal den aktuellen Stand (nur von dem Kommunikationstests):

  1. Verkabelung für Programmierung
  2. ESP 8266 in der IDE wählen
  3. Sketch auf ESP schieben:

void setup() {
Serial.begin(112500);
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
digitalWrite(LED_BUILTIN, LOW);
Serial.println(1);
delay(1000);
Serial.println(2);
digitalWrite(LED_BUILTIN, HIGH);
}

  1. Reset und GRD Kabel raus und von RX / TX auf Pin 1 und 2
  2. Adruino im IDE wählen
  3. Sketch auf Arduino schieben:

#include <SoftwareSerial.h>
SoftwareSerial ESPserial(2, 3); // RX | TX

void setup()
{
Serial.begin(115200); // communication with the host computer
//while (!Serial) { ; }

// Start the software serial for communication with the ESP8266
ESPserial.begin(115200);

Serial.println("");
Serial.println(“Remember to to set Both NL & CR in the serial monitor.”);
Serial.println(“Ready”);
Serial.println("");
}

void loop()
{
// listen for communication from the ESP8266 and then write it to the serial monitor
if ( ESPserial.available() ) { Serial.write( ESPserial.read() ); }

// listen for user input and send it to the ESP8266
if ( Serial.available() ) { ESPserial.write( Serial.read() ); }
}

  1. Seriellen Monitor öffnen und sehen dass nichts passiert :smiley:

Könnte mir jemand einen Lösungsansatz geben?

Danke sehr.

Erstens: Die Serielle ist kein Bus! 3 Partner gehen nicht.

Zweitens: Der Mega hat noch mehr Serielle. Nimm Serial1 oder so. Softserial ist nicht nötig.

Drittens: I2C wäre noch ein Alternative.

Hallo,

muss noch mal nachfragen ? Du hast den Blink-sketch uber den Arduino auf den ESP hochgeladen ?

der Blink-Sketch lauf auch , d.h die interne LED blinkt im s Takt. ?

Im Schaltplan hast du TXD mit TXD verbunden und RXD mit RXD das muss gekreuzt sein.

der ESP läuft mit 3,V auf den leitungen TXD und RXD der Adruino mit 5V das ist schon mal suboptimal. an TX des Arduino kommen 5V raus da sollte dann ein Spannungsteiler rein damit der ESP keinen Schaden nimmt. Bei der RXD des Arduino ist es egal der erkennt auch den 3,3V Pegel als H.

dann sollte das eigendlich gehen wenn alles richtig angeschlossen ist.

schau dir mal die Seite an und da Kapitel 5

ESP 8266 Startanleitung

Heinz

@combie danke für die Antwort.

Habe ich das richtig verstanden, ich muss auf dem ESP8266 auf Serial1 ausgeben, dann auf dem Arduino auf Serial1 lauschen und über Serial ausgeben? SoftwareSerial würde ich dann einfach entfernen?

@Rentner auch an dich vielen Dank.

Denn Blink Sketch habe ich hoch geladen und die LED Blinkt auch. Das funktioniert, somit bin ich sicher, dass der ESP auch die Ausgabe erzeugt.
Die Kommunikation funktioniert also nur, wenn ich RX und TX Kreuze und einen entsprechenden Wiederstand einbaue?

Den Link habe ich mir angesehen, danke.

Es gibt im Netz viele Beispiele, aber bei den vielen verschiedenen Anwendungsmöglichkeiten und Modulen ist es für mich schwer den Überblick zu bewahren.

Habe ich das richtig verstanden, ich muss auf dem ESP8266 auf Serial1 ausgeben, dann auf dem Arduino auf Serial1 lauschen und über Serial ausgeben? SoftwareSerial würde ich dann einfach entfernen?

Serial des ESP an Serial1 des Mega Serial des Mega, an den PC (Sowie es schon fertig gebaut ist)

SoftwareSerial ist da flüssiger als Wasser. Überflüssig

Es hat funktioniert, vielen Dank!

ESP8266:

void setup() {
Serial.begin(112500);
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
digitalWrite(LED_BUILTIN, LOW);
Serial.println(1);
delay(1000);
Serial.println(2);
digitalWrite(LED_BUILTIN, HIGH);
}

Arduino 2560:

void setup()
{
Serial.begin(115200); // communication with the host computer
Serial1.begin(115200);

Serial.println("");
Serial.println(“Remember to to set Both NL & CR in the serial monitor.”);
Serial.println(“Ready”);
Serial.println("");
}

void loop()
{
if ( Serial1.available() ) { Serial.write( Serial1.read() ); }
}

Die Bezeichnung des Bilder ist falsch, dass ist der Anschluss nach aufspielen.