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!");
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.
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?
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.