2 HC 05 Module mit 2 Arduinos kommunizieren lassen

Hi Liebe Arduino Community,
ich habe folgendes Problem;
ich möchte 2 Arduinos (Mega2560) mithilfe von 2 HC05 Modulen kommunizieren lassen. Ich möchte nur auf dem seriellen Monitor vom Slave ausgeben lassen „Hello from Master“ während der Master an 5V angeschlossen ist.
Die Module sind richtig eingestellt und angeschlossen, aber mein Programm will nicht. Ich habe schon das Internet durchforstet aber nichts gefunden.

Hoffe ihr könnt ihr mir vielleicht helfen?
Lg Jason

Der Code vom Master:
void setup() {
Serial.begin(9600); // Initialisiere die Hardware-Serielle für die Kommunikation mit dem Computer
Serial1.begin(9600); // Initialisiere die Hardware-Serielle für die Kommunikation mit dem HC-05-Modul
}

void loop() {
// Nachricht senden
Serial1.println("Hello from Master!");

// Warte auf eine Antwort vom Slave
while (Serial1.available()) {
Serial.write(Serial1.read());
}

delay(1000);
}

Code vom Slave:
void setup() {
Serial.begin(9600); // Initialisiere die Hardware-Serielle für die Kommunikation mit dem Computer
Serial1.begin(9600); // Initialisiere die Hardware-Serielle für die Kommunikation mit dem HC-05-Modul
}

void loop() {
// Warte auf Nachricht vom Master
if (Serial1.available()) {
char receivedChar = Serial1.read();
Serial.print("Received from Master: ");
Serial.println(receivedChar);

// Sende eine Antwort an den Master
Serial1.print("Hello from Slave!");

}

delay(1000);
}

Hallo,

von hier kann man das leider nicht prüfen ob alles passt und nur der Code Probleme macht. Gehe das hier bitte nochmal durch. wolles-elektronikkiste.de

Hi danke für die schnelle Rückmeldung.
Ich bin das Script schon mehrere male durchgegangen aber ich bekomme einfach keine Nachricht auf dem Seriellen Monitor. Die Module pairen sich, also die blaue und rote LED blinken beide gleichzeitig auf.

Haben deine beide Arduinos überhaupt je zwei Serielle Schnittstellen und wo sind die HC05 angeschlossen?

Du könntest auch die beiden Serial1 direkt verbinden (jeweils Rx-Tx) und dir Serial in der IDE anzeigen.

Also bei Megas2560, wie der TO schreibt, sollten eigentlich 2 Hardware.Serials bestehen.

Ja dort habe ich die Module auch angeschlossen. Rx - Tx und Tx -Rx.

An welchem der 4:
image

Beide sind an 0 und 1 angeschlossen.
TX0 - RX, RX0 - TX.

Dan geht das nicht, nutze wie im Sketch schreibst Pin D19, D18.

Serial1.begin(9600); // Initialisiere die Hardware-Serielle für die Kommunikation mit dem HC-05-Modul

Die Pins hat dir schon @wwerner gezeigt.

TX0/RX0 ist Serial. Nicht Serial1.

Super, danke euch. Jetzt empfange ich auch etwas, allerdings sehr unkonstant:
"Hello from Master!
Hello from
�� j��ѕ Hj��ѕɅ
Hello fro�j
Hello from
 Master�from M�����j
Hello from @ello from Mast` "

ist das normal beim verschicken von Zeichensätzen über BT oder muss ich noch irgendetwas einstellen?

Hallo,

wahrscheinlich werden paar Bits verstümmelt.
Kannst du ein einzelnes BT Modul ansprechen bzw. verwenden?
BT Module sind alle richtig konfiguriert?
Key Pin ist korrekt angeschlossen?

Das hier ist ein universelles Grundgerüst, hast ja einen Mega2560, aber noch praktisch ungetestet, Baudraten ggf. anpassen. Kannste über die Feiertage rumspielen.

Sketch
#include <Streaming.h>  // https://github.com/janelia-arduino/Streaming
Stream &cout {Serial};
Stream &streamBT_A {Serial1};
Stream &streamBT_B {Serial2};

constexpr uint8_t BUFFER_SIZE {30};

struct ReceiveData {
  char buffer [BUFFER_SIZE + 1]; // + Null-Terminator
  size_t index {0};
};
ReceiveData rxBT_A;
ReceiveData rxBT_B;

void setup() {
  Serial.begin(9600);  // Standard Serieller Monitor
  Serial1.begin(9600); // BT-A
  Serial2.begin(9600); // BT-B
}

void loop() {

  if (readSerial(streamBT_A, rxBT_A, BUFFER_SIZE)) {
    cout << F("eingelesen A: ") << rxBT_A.buffer << endl;
  }

  if (readSerial(streamBT_B, rxBT_B, BUFFER_SIZE)) {
    cout << F("eingelesen B: ") << rxBT_B.buffer << endl;
  }

}  // loop Ende

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

bool readSerial (Stream &stream, ReceiveData &data, const uint8_t LENGTH)
{
  bool status {false};

  char c = stream.read();

  if (c == '\r' || c == '\n') {             // wenn CR oder LF eingelesen
    data.buffer[ data.index] = '\0';        // Terminierung
    stream << F("readSerial: ") << data.index << F(" numbers of character") << endl;
    data.index = 0;
    status = true;                          // Character fertig eingelesen
  }
  else if ( (c >= 32) && ( data.index < LENGTH) ) { // wenn noch Platz im Buffer ist
    data.buffer[data.index++] = c;          // Zeichen speichern und Index inkrementieren
  }

  return status;
}

Verbinde dich mit Handy und Terminal App zu einem BT Modul und übertrage irgendwas. Das sollte im Seriellen Monitor ankommen. Wenn das mit jeden klappt, kannste die Daten zum jeweils anderen BT Modul umleiten oder wie auch immer. Ist schon eine Weile her wo ich solche Experimente gemacht habe.
Überlege dir einen Übertragungsweg der logisch ok ist.
Bsp. über Serial1 etwas senden (streamBT_A.println(...) ) > BT-A sendet > BT-B empfängt > Empfang wird auf Seriellen Monitor ausgegeben.
Daran denken das ein LF oder CR mitgesendet wird in der Terminal App.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.