Forum: Mikrocontroller und Digitale Elektronik Arduino + Bluetooth LE HM-10


von Valentin H. (valentin_4711)


Lesenswert?

Liebe User,

ich habe folgendes Prolem:
Ich möchte zwei HM-10 Bluetooth Module kommunizieren lassen. Ich weiß 
schon die ganzen AT Kommandos. Nur halt nicht wie ich den Arduino Code 
schreibe.
Ich hatte folgende Idee aber sie funktioniert nur nicht.
Mein  Code

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2,3);

void setup(){
  pinMode(9,OUTPUT);
  digitalWrite(9,HIGH);
  Serial.begin(9600);
  Serial.println("AT+MODE2");
  Serial.println("AT+IMME1");
  Serial.println("AT+NOTI1");
  Serial.println("AT+PIO11");
  Serial.println("AT+PWRM1");
  Serial.println("AT+ROLE0");
  Serial.println("AT+START");
  BTSerial.begin(38400);
}

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

  if(Serial.available())
    BTSerial.write(Serial.read());
}

Pin 2 und Pin 3 sind die TX und RX Pins des Arduino UNO
Die Befehle werden nur ans Terminal gesendet. Aber nicht vom Modul 
ausgeführt.

Ich bitte um Hilfe. Danke im Voraus.

von Cihan B. (ciqan)


Lesenswert?

Ich möchte die Frage ergänzen:

Wir haben auf beiden Seiten einen HM-10 Soft Bluetooth Modul mit jeweils 
einem Arduino µC und möchten, dass sie automatisch miteinander 
kommunizieren nachdem wir sie mit Strom versorgen (benötigen wir für 
unser Diplomprojekt).

Wenn wir die AT-Commands wie oben im Code angeführt durchführen, nimmt 
der Serial Monitor die AT-Commands als Text und erkennt nicht das wir 
Befehle einschicken (--> haben wir beschlossen, weil wir nach den 
AT-Commands keine Rückmeldung bekommen).

Bitte um Hilfe. Danke im Voraus!

von Kai S. (zigzeg)


Lesenswert?

Valentin Huber schrieb:
> Serial.println("AT+MODE2");

Ihr printet die AT Kommandos auf die Serielle Console. Und wie sollen 
sie zu eurem Bluetooth Modul kommen ? Indem ein Mensch sie an der 
Konsole abtippt ?

Ihr müsstet schon BTserial.println() verwenden, natürlich nachdem ihr 
BTSerial initializiert habt.

Was passiert denn, wenn man "von Hand" Kommandos in das Seriell Window 
eintippt ?

ZigZeg

von Cihan B. (ciqan)


Lesenswert?

Wenn man von Hand die AT-Commands im Serial Monitor eintippt, 
funktioniert alles einwandfrei. Wir können alle Voreinstellungen 
eintippen und sogar untereinander verbinden.

Der oben angeführte Code vom Valentin ist für den Slave gedacht. Beim 
Master werden 2-3 Commands anders eingetippt wie z.B. AT+MODE1 = Master.

von Kai S. (zigzeg)


Lesenswert?

Cihan Bayrak schrieb:
> Wenn man von Hand die AT-Commands im Serial Monitor eintippt,
> funktioniert alles einwandfrei.

Na dann ist doch alles Paletti. Wenn ihr jetzt noch die Kommandos zum BT 
Modul schickt statt sie einfach nur in der seriellen Konsole auszugeben 
sollte es klappen:
1
#include <SoftwareSerial.h>
2
3
SoftwareSerial BTSerial(2,3);
4
5
void setup(){
6
  pinMode(9,OUTPUT);
7
  digitalWrite(9,HIGH);
8
  Serial.begin(9600);
9
  BTSerial.begin(38400);
10
  BTSerial.println("AT+MODE2");
11
  BTSerial.println("AT+IMME1");
12
  BTSerial.println("AT+NOTI1");
13
  BTSerial.println("AT+PIO11");
14
  BTSerial.println("AT+PWRM1");
15
  BTSerial.println("AT+ROLE0");
16
  BTSerial.println("AT+START");
17
}
18
19
void loop(){
20
  if(BTSerial.available())
21
    Serial.write(BTSerial.read());
22
23
  if(Serial.available())
24
    BTSerial.write(Serial.read());
25
}

ZigZeg

von Cihan B. (ciqan)


Lesenswert?

Vielen Dank für die schnellen Antworten.
Wir werden heute den Code umschreiben und ausprobieren.
Feedback folgt.

CiQan.

von Cihan B. (ciqan)


Lesenswert?

Funktioniert leider nicht. Wie wichtig ist die Baud Rate (von Serial und 
Bluetooth)? Sollte man da auf besonderes achten?

CiQan.

von Cihan B. (ciqan)


Lesenswert?

Vergessen wir daweil mal das connecten. Ich kann daweil "händisch" über 
den Serial Monitor mit den AT-Befehlen untereinander eine Verbindung 
herstellen. Wie funktioniert das wenn ich vom Master aus über Tx und Rx 
die Pins vom Slave abfragen möchte. Wir möchten nämlich den Slave 
kabellos steuern (d.h. wir wollen am Master eine Tasterabfrage 
erstellen, wodurch dann am Slave eine LED leuchten soll).

Wir kommen nicht mehr weiter und wissen auch nicht wo wir weiter machen 
sollen.
Vielen Dank im Voraus

CiQan.

von Kai S. (zigzeg)


Lesenswert?

Cihan Bayrak schrieb:
> Wie wichtig ist die Baud Rate

Wenn sie falsch ist kommt keine Uebertragung zustande. Oft werden 
Zufalls/Schrott-Zeichen uebertragen. Aber das es manuell funktioniert 
kann das eigentlich nicht das Problem sein.

Vielleicht ist das Problem das die AT Kommandos "zu frueh" geschickt 
werden, d.h. das Bluetooth module ist noch in der Reset Phase. Ihr 
koenntet versuchen ein Delay einzubauen, bevor ihr die Kommandos 
schickt. Ist natuerlich spekulation.
Man koennte auch versuchen ein Oszilloskop oder, falls nicht vorhanden, 
ein paar LEDs an die Tx/Rx Leitungen vom Bluetooth (mit) anzuklemmen um 
ein bischen mehr Einblick (Debugging Moeglichkeit) zu haben.

Cihan Bayrak schrieb:
> Wie funktioniert das wenn ich vom Master aus über Tx und Rx
> die Pins vom Slave abfragen möchte.

Ihr muesst euch ein Protokoll ausdenken, mit dem die Kommunikation 
ablaufen soll. Kann ja am Anfang ganz einfach sein, z.B. eine '0' 
schicken, wenn keine Taste gedrueckt, eine '1' schicken, wenn die Taste 
gedrueckt ist.

Die andere Seite liest das ein, und macht entsprechend die LED an.

Wenn die Initializierung nicht automatisch erfolgt muss man dann z.B. 
zwei Phasen haben: In der ersten kann man interaktiv Befehle eingeben. 
Wenn das Kommando "AT+START" erkannt wird schaltet man in die zweite 
Phase, in der dann das Protokoll wie oben beschrieben verwirklicht wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.