ESP8266 Serial (RX,TX) zu Arduino Mega 2560

Hi Leute,
ich bekomme es einfach nicht hin, dass die beiden mit einander Daten über RX-TX austauschen… :frowning:

Folgendes Setup:
ESP TX(D8/ IDE 13) zu Arduino Mega RX( IDE 0) über Level shifter (Signal 3V3 auf 5V)
Arduino IDE = 1.8.9

Über das Oszilloskop sehe ich, dass der ESp8266 sendet (Datenpaket ist zu sehen).
Der Arduino Mega zeigt immer nur “-1”.

Ich weiß nicht mehr weiter.
Bitte um Hilfe…

Meine Code (quick and dirty):

ESP8266 Code :

// Esp8266 code

#include <SoftwareSerial.h>

SoftwareSerial swSer(13,15); // (RX, TX)
void setup() {
swSer.begin(9600);
Serial.begin(9600);
}

void loop()
 {

  swSer.write(34);
  delay(1000);

}

Arduino Mega 2560 Code:

// Arduino Mega code
#include <SoftwareSerial.h>
SoftwareSerial softSerial(0, 1); / (RX, TX)
int zeichen;


void setup()
{ 
  Serial.begin(9600);
  softSerial.begin(9600); 
}

void loop()
{


zeichen = softSerial.read();

Serial.println(zeichen);

Serial.println("test");

delay(1000);

 }

Danke schon mal für eure Hilfe
Lieben Gruß

Hi

0 und 1 dürften sind beim MEGA die Hardware-Serielle sein.
Denke, so kümmert sich bereits die Serielle um die empfangenen Daten.

Der RX-Pin muß interruptfähig sein - Näheres dazu schreibt aber die
'Reference'.

MfG

Du hast auf dem Mega 4 UART, also zu den RX und TX 3 weitere Serial1 bis Serial3.

Warum verwendest du die nicht.
Du setzt zudem SoftwareSerial auf den D0 und D1, was total falsch und mit Problemen begleitet wird, da hier rüber der Mega geflasht wird.

Fakt ist, du brauchst kein SoftwareSerial. Nimm eine Hardware Schnittstelle.

HotSystems:
Fakt ist, du brauchst kein SoftwareSerial. Nimm eine Hardware Schnittstelle.

Danke für die Infos
habe gleich HW und SW auf RX3 und TX3 gewechselt (beim Mega)… gleiches Spiel … bekomme nur “-1” angezeigt im Monitor schade

Welche wären das ? IDE 14/15 ?
Und was muss ich dann in der SW beachten ?

wenn ich jetzt z.B. RX1, TX1 (18,19) haben möchte brauche ich in der SW nur

Serial1.begin(9600);
Serial1.write(data);
Serial1.read();

zu schreiben ??

ich probiere das gleich mal aus :o

Du musst natürlich auch die Strippen umklemmen an TX1 und RX1.

Gruß Tommy

Habe mich für Serial3. entschieden. (Leitungen auch da angeschlossen)

Leider immer noch nicht ... wieder "-1"

Mit diesem code:

// Arduino Mega code

int zeichen;

void setup()
{ 
  Serial.begin(9600);
  Serial3.begin(9600); 
}

void loop()
{

zeichen = Serial3.read();

Serial.println(zeichen);

Serial.println("test");

delay(1000);

 }

Tommy56:
Du musst natürlich auch die Strippen umklemmen an TX1 und RX1.

Gruß Tommy

habe ich gemacht :slight_smile: Danke.

Schau Dir mal available() an. Wenn Du liest und es ist nichts zum Lesen da, kommt -1 raus. Das ist so definiert.

Gruß Tommy

Was bedeutet eigentlich genau die -1 ??
könnte es ein HW Fehler sein ??

Fakt ist doch, dass ich die Daten auf RX3 mit dem Oszilloskop sehe.

Die -1 bei read sagt: Da war nix zum Lesen da. Hast Du RX3 auf TX-Gerät und TX3 auf RX-Gerät geklemmt?

Gruß Tommy

Tommy56:
Die -1 bei read sagt: Da war nix zum Lesen da. Hast Du RX3 auf TX-Gerät und TX3 auf RX-Gerät geklemmt?

Gruß Tommy

Hi Tommy, danke für den Tip.
Ja habe ich... sonst würde ich ja keine Daten auf RX3(Mega) mit dem Oszilloskop sehen.

Ich kann nicht auf Deinen Basteltisch sehen, deshalb bleibt mangels besserer Infos von Deiner Seite nur das Raten nach bekannten Fehlerquellen.
Ich würde beide bei geringem Abstand sowieso eher über I2C koppeln.

Gruß Tommy

Tommy56:
Ich kann nicht auf Deinen Basteltisch sehen, deshalb bleibt mangels besserer Infos von Deiner Seite nur das Raten nach bekannten Fehlerquellen.
Ich würde beide bei geringem Abstand sowieso eher über I2C koppeln.

Gruß Tommy

Hi Tommy, war ja auch nicht böse gemeint :-).
Soweit ich weiß, mag der esp8266 kein "slave mode" im I2C, deswegen wollte ich ja RX/TX ausprobieren...
Und ich möchte/will Ihn im Slave mode haben.

Hallo,

*Serial.available * eingebaut?
Hast du Tx und Rx gekreuzt?

Den ESP8266 als Slave am MEGA zu nutzen würde ja auch bedeuten, einen Porsche als Notfahrzeug auf dem Hänger eines Käfers zu transportieren :wink:

Der ESP8266 ist um Größenordnungen leistungsfähiger, als der MEGA oder der UNO. Die beiden kann man höchstens als halbintelligente Porterweiterung am ESP8266 betrachten und da muss der ESP8266 Master sein.

Ich habe hier mal sowas als Prinzipstudie gebaut.

Gruß Tommy

Doc_Arduino:
Hallo,

Serial.available eingebaut?
Hast du Tx und Rx gekreuzt?

Hi Doc_Arduino,
Serial.available muss das eingebaut sein ? :o

Hast du Tx und Rx gekreuzt? Ja -> ich sehe Daten auf RX (Mega Seite) mit dem Oszilloskop.

Tommy56:
Den ESP8266 als Slave am MEGA zu nutzen würde ja auch bedeuten, einen Porsche als Notfahrzeug auf dem Hänger eines Käfers zu transportieren :wink:

Der ESP8266 ist um Größenordnungen leistungsfähiger, als der MEGA oder der UNO. Die beiden kann man höchstens als halbintelligente Porterweiterung am ESP8266 betrachten und da muss der ESP8266 Master sein.

Ich habe hier mal sowas als Prinzipstudie gebaut.

Gruß Tommy

ja ... du hast ja recht... dann muss ich ja alles umstricken (keine lust ) :smiley:

Das ist doch der normale Lauf in der Softwareentwicklung. Wenn sich die grundlegenden Prämisen ändern, muss man umstricken.
Wenn Du gut in klar abgegrenzten Funktionen programmiert hast, ist das garnicht so aufwändig. Wenn nicht, ist es die Gelegenheit, das jetzt nachzuholen.

Gruß Tommy

Hi Tommy,
recht hast du mal wieder. Das werde ich dann wohl so angehen.

Jetzt will ich aber verstehen, was da nicht so richtig laufen will... sowas wurmt mich total und das kann ich dann nicht einfach so abschließen :frowning:

ardouino:
Hi Doc_Arduino,
Serial.available muss das eingebaut sein ? :o

Hast du Tx und Rx gekreuzt? Ja → ich sehe Daten auf RX (Mega Seite) mit dem Oszilloskop.

Wenn du nur deine Daten und nicht sämtliche “Debugwerte” sehen willst, dann ja.
Was sendet der ESP überhaupt? Wie setzt sich das zusammen?
Angabe der Baudraten stimmen auch?
Im Forum hat sich das als gute Grundlage bewährt. Liest von Serial2 und gibt es nach LF/CR Zeichen auf der Serial aus.

const byte BUFFERSIZE = 20;
char serialBuffer2[BUFFERSIZE+1];


void setup()  {
  Serial.begin(9600);
  Serial2.begin(9600);
}


void loop(void) {

  if ( readSerial2() )  {
    showSerialData();
  }

}   


// ------------------------------------------------------

bool readSerial2()
{
  static byte index = 0;
  bool state = false;
  
  if (Serial2.available() > 0)  {
    char c = Serial2.read();
    if (c >= 32 && index < BUFFERSIZE)
    {
      serialBuffer2[index++] = c;
    }
    else if (c == '\n' || '\r')
    {
      serialBuffer2[index] = '\0';
      index = 0;
      state = true;
    }
  }
  return state;
}


void showSerialData ()
{
  Serial.println(serialBuffer2);
}