Zwei HC-06 als Master und Slave und Android Telefon über Bluetooth

Hallo zusammen...

Ich habe mir auf Steckbrett zwei Nanos Kabelloss mit zwei HC-06 Bluetooth verbunden. Der Aufbau auf beiden Seiten ist identisch. Ein Nano, ein HC-06, ein Taster und eine Led .
Der Code für beide Seiten ist auch sehr ähnlich miteinander. Ein Aufbau arbeitet als Master der andere als Slave.
Die Idee darinter ist das bei drücken der Taste auf der Master Seite die Led auf der Slave Seite angeht und oder auch umgekehrt.
Mit Android Telefon als Master und ein Aufbau als Slave, habe ich das ein und auschalten der LED auch am Laufen.
Soweit habe ich das halles am Arbeiten und am Funktionieren.

Nun zu meiner Frage und zum Punkt wo ich Hilfestellung brauche.
Ich würde gerne halle drei miteinander über Bluetooth verbinden.Das Android Telefon würde zugriff auf beide oder eine der Aufbauten haben und die zwei Aufbauten würden sich gegenseitig zugreifen.
Mein Problem ist das ich mich nicht mit den Android an einer der HC-06 anschliessen kann wenn die zwei Aubauten mieinader verbunden sind.

Folgt der Code für den Master Aufbau wenn mit Slave verbunden.

//Das ist der Meister

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3);

int state = 0;
const int masterled = 12;
const int masterbutton = 5;

//--------------------------------------------
void setup() {
  BTSerial.begin(38400);
  pinMode(masterled, OUTPUT);
  digitalWrite(masterled, LOW);
  pinMode(masterbutton, INPUT_PULLUP);
}

//--------------------------------------------
void loop(){
  
 int masterbuttonState = digitalRead(masterbutton);
  
 if(BTSerial.available() > 0){ 
    state = BTSerial.read(); 
 }
 if (masterbuttonState == LOW){
  BTSerial.write('1');
 }
 else{
  BTSerial.write('0');
 } 
 if (state == '1') {
  digitalWrite(masterled, HIGH); 
  state = 0;
 }
 else if (state == '0') {
  digitalWrite(masterled, LOW); 
  state = 0;
 }
}

Folgt der Code für den Slave Aufbau wenn mit Master verbunden.

//Das ist der Sklave

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3);

int state = 0;
const int slaveled = 12;
const int slavebutton = 5;
//--------------------------------------
void setup() {
  BTSerial.begin(38400);
  pinMode(slaveled, OUTPUT);
  digitalWrite(slaveled, LOW);
  pinMode(slavebutton, INPUT_PULLUP);
}
//--------------------------------------
void loop() {
  
 int slavebuttonState = digitalRead(slavebutton);
  
 if(BTSerial.available() > 0){ 
    state = BTSerial.read(); 
 }
  if (slavebuttonState == LOW ){
   BTSerial.write('1'); 
 }
 else{
   BTSerial.write('0');
 }  
  if (state == '1') {
  digitalWrite(slaveled, HIGH); 
  state = 0;
 }
 else if (state == '0') {
  digitalWrite(slaveled, LOW);
  state = 0;
 }
}

Folgt der Code des Slaves wenn mit Android verbunden

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);
int LED_1 = 11;
int LED_2 = 12;
char ch;

//-------------------------------------------------
void setup() {
  BTSerial.begin(9600);
  pinMode(LED_1,OUTPUT);
  pinMode(LED_2,OUTPUT);
}
//--------------------------------------------------
void loop() {
  
if(BTSerial.available()){
    ch = BTSerial.read();
    BTSerial.write(ch);
    doWork(ch);
  }
}
//-------------------------------------------------
void doWork(char ch){
  switch(ch){
    case 'A': 
              digitalWrite(LED_1,HIGH);
              break;
    case 'a': 
              digitalWrite(LED_1,LOW);
              break;
    case 'B': 
              digitalWrite(LED_2,HIGH);
              break;
    case 'b': 
              digitalWrite(LED_2,LOW);
              break;
  }
}

Meines bescheidenen Wissens nach, geht das auch nicht.

Nach dem pairing ist der HC taub für alle anderen.

Das ist mir klar... Nur bekomme ich die Idee nicht weg das es irgendwie möglich sein müsste den HC zu sagen, "guck mal ir rüber und hor ir zu".....!!!! :slightly_smiling_face:

So so .....

Jaja.... Bei mir, bei dir und bei jedem z. B im Smartphone, oder Auto hast du auch verschiedene Geräte miteinander über Bluetooth gekoppelt. Zwar können nur zwei miteinander momentan sprechen und zuhören haber jederzeit kannst du zwischen anderen Geräten über Befehl umschalten. Meines Wissens

Bei Bluetooth halte ich mich besser zurück, aber möglicherweise würde ja Wifi funktionieren. Ein Access Point und mehrere Station funktioniert. Aber ob das sinnvoll ist, hängt von der Anwendung ab.

@agmue. Über Wiffi ist komplett Neuland für mich. OK, über Bluetooth ist auch Neuland. Hab mir zwei HC-06 Bluetooth module bestellt nur um auszuprobieren und um zu lernen. Hab erst später festgestellt das eigentlich die HC-06 nur als Slaves funktionierwn. Also musste ich mir jede menge Sachen durchlesen um sie als Master Slave funktionsfähig zu machen. Dabei bin ich immer wieder über das nRF24L01+ Wiffi Modul gestolpert. Hab haber immer nur schnell durchgelesen. Haber was ich mitbekommen habe, würde dieser mehre Verbindung besser bewältigen als Bluetooth. Und nRF24L01+ ist preislich mit HC-06 verglichen fast gleich. Ganz sicherlich werde ich mich haber auch mit diesem Thema beschäftigen.

In mehreren Themen ging es um die Anzeige der Rundenzeiten einer Modellautorennbahn und deren Übertragung per Funk vom Renn-PC zu den Anzeigen. Realisiert wird nRF24 in der Konstellation ein Sender an mehrere Empfänger. Als nicht realisierte Variante habe ich das auch mit WLAN gemacht mit zusätzlicher Anzeige einer Webseite. Wenn Du Dich da durchwühlen möchtest:
Anleitung: ESP32 mit ESP-NOW als Sender und Webserver als Access Point

Hab nur kurz reingeschaut. Sehr sehr gute Infos.
Werde mir das auf jeden Fall als Hilfestellung benutzen.
Vielen Dank @agmue

Freut mich, wenn es Dir gefällt.

Eventuell magst Du auch meine Anleitung: Einführung zu fipsok.de

Was hindert Dich daran einem Nano zu sagen er ist Master und tauscht die PairingKeys.

So als Ablaufplan:
1:
Master startet mit PairingKey 1
Jetzt wartet der Master xxx Sekunden ob es ein Pairing gibt.
Wenn Pairing mit Slave 1 (Nano) - werden die Daten ausgetauscht
Wenn Austausch erledigt, oder Zeit abgelaufen, dann Pairing beenden
Master startet mit PairingKey 2
Der Master wartet jetzt xx Sekunden auf den nächsten Slave (Handy)
Gibt es nen Pairing wird ausgetauscht; wenn nicht oder ist der Austausch abgeschlossen Fange an bei 1:

Hab zwar seit etlichen Jahren nicht mehr mit den BT Teilen gespielt aber ich meine noch zu wissen dass die HC05 als Master arbeiten können und auch selbstständig pairen können ohne dass ein Mikrokontroller angeschlossen sein muss.

Die HC05 sind weiter entwickelt als die 06er.
Da gehört dann auch ne eigene Firmware dazu...

Jepp, vielleicht lässt sich daraus was basteln. Aber da BT eine Punkt-zu-Punkt Verbindung ist wäre der Umstieg auf was anderes wohl einfacher

Jaja....Werde es auch durchlesen :slightly_smiling_face:

Hi @my_xy_projekt . Ich denke ich hab dich verstanden.... Dass heisst ich müsste die AT Befehle für das HC-06 im Code einbinden anstatt es manuel über Serial Monitor?

Würden folgende Befehle kein Problem im Code sein?

BTserial.write("AT+RMAAD\r\n");
BTserial.write("AT+DISC\r\n");
BTserial.write("AT+INQC\r\n");
usw.

Jepp - aber weiter kann ich Dir momentan auch nicht helfen.
Mir ging es nur darum zu zeigen, was aus der Logik heraus möglich wäre.

Beim HC-06 wenn ich die AT Befehle manuel eingeben will, muss ich zuerst auf den Pin34 3,3V anlegen damit das Modul auf AT Modus umschaltet. Muss ich das im Code berüksichtigen oder z,B "BTserial.write("AT+RMAAD\r\n");" würde ausreichen?!?!?

Muss ich ausprobieren und gucken was passiert.

Hallo,

konfiguriere es am besten im Terminal statt mit Sketch. Die Baudrate ist üblicherweise standardmäßig 38400 im AT Mode.

Im normalen Übertragungsmodus ist default 9600.

Mittels der speziellen Pinbelegung wechselt es nach Reset in den AT Mode zum konfigurieren.

https://www.instructables.com/AT-command-mode-of-HC-05-Bluetooth-module/

http://stefanfrings.de/bluetooth/

info-rf hc-06.pdf (897,4 KB)