HC-05 Bluetooth Modul lässt sich im AT-Modus programmieren aber baut keine Kommunikation auf

Gast #4892369
Lesenswert?

Meine 2 Bluetooth Module lassen sich beide im AT-Modus programmieren 
(Master,Slave,Adresse etc. ) bekomme auch Rückmeldung bloß bei der 
Kommunikation sieht es anderst aus.
Habe alle möglichen Programme ausprobiert und auch alle Fehlerquellen 
meiner Meinung nach beseitigt,das Einzige was das problem sein könnte 
dass ich für die TX leitung von meinem Mikrocontroller einen 
Spannungsteiler dranhänge damit das Signal auf 3,3 V geteilt wird und 
die RX Leitung vom µC geht direkt auf TXD von den Bluetooth Modulen.
Es lassen sich weder LED's anschalten noch Werte aus dem µC auslesen.
Programme wurden davor noch am seriellen Monitor(Ardunio IDE) getestet 
und haben funktionert bezüglich LED's ansteuern und Sensorwerte 
auslesen.
Würde mich über eine Antwort euerseits freuen
MfG Deniz
Gast #4892377
Lesenswert?

Zusatzinfos: Die BT-Module verbinden übrigens(Status-LED) und 
BT-Terminal bzw Smartphone geben Rückmeldung(HC-05 connected).
Kann es möglich sein,dass die Datenpins nicht richtig funktionieren? 
Wieso lässt es sich dann aber im AT-Modus programmieren?
#4892833
Lesenswert?

//SKetch funktioniert super am seriellen Monitor nur über das Bluetooth 
Modul keine Funktion obwohl es sich verbindet und alles korrekt 
verdrahtet ist habe die Baudrate mit AT+UART=9600,0,0 gesetzt(mit 
Rückmeldung OK,ich verzweifle hier und denke echt darüber nach es 
zurückzuschicken ich möchte aber nicht aufgeben :) )
//http://www.youtube.com/user/greatscottlab

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(9, 10); // CONNECT BT RX PIN TO ARDUINO 10 PIN | 
CONNECT BT TX PIN TO ARDUINO 9 PIN

int ledred=7;
int ledgreen=8;
int ledblue=9;
int tx=1;
int rx=0;
char inSerial[15];


void setup(){
  //Serial.begin(9600);
  BTSerial.begin(9600);
  pinMode(ledred, OUTPUT);
  pinMode(ledgreen, OUTPUT);
  pinMode(ledblue, OUTPUT);
  pinMode(tx, OUTPUT);
  pinMode(rx, INPUT);
  allpinslow();
}

void loop(){
    int i=0;
    int m=0;
    delay(500);
    if (BTSerial.available() > 0) {
       while (BTSerial.available() > 0) {
         inSerial[i]=BTSerial.read();
         i++;
       }
       inSerial[i]='\0';
      Check_Protocol(inSerial);
     }}

void allpinslow()
{
digitalWrite(ledred, LOW);
digitalWrite(ledgreen, HIGH);
digitalWrite(ledblue, HIGH);
}

void Check_Protocol(char inStr[]){
  int i=0;
  int m=0;
  Serial.println(inStr);

  if(!strcmp(inStr,"red")){      //Ledred ON
    allpinslow();
    digitalWrite(ledred, HIGH);
    Serial.println("Red ON");
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}

  if(!strcmp(inStr,"redoff")){      //Ledgreen ON
    allpinslow();
    digitalWrite(ledred, LOW);
    Serial.println("Red OFF");
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}

   if(!strcmp(inStr,"blue")){      //Ledblue ON
    allpinslow();
    digitalWrite(ledblue, HIGH);
    Serial.println("Blue ON");
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}

    else{
    for(m=0;m<11;m++){
      inStr[m]=0;
    }
    i=0;

}}
Gast #4893079
Lesenswert?

Deniz Braun schrieb:
> Zusatzinfos: Die BT-Module verbinden übrigens(Status-LED) und
> BT-Terminal bzw Smartphone geben Rückmeldung(HC-05 connected).
> Kann es möglich sein,dass die Datenpins nicht richtig funktionieren?
> Wieso lässt es sich dann aber im AT-Modus programmieren?

Die Pinbelegung scheint richtig zu sein, da die AT Commands 
funktionieren. Für die Kommunikation via BT müssen die Module jedoch mit 
der Gegenstelle das Pairing durchlaufen. Dafür ist die Eingabe des 
Passwords erforderlich - abfragbar mit AT+PSWD (default meist "1234").

Wie das mit dem Pairing funktioniert, kannst du im Netz erfahren. Dazu 
gibt es z.B. bei instructables.com gute Anleitungen.
#4893247
Lesenswert?

Das mit dem PW bei 2 Modulen habe ich ja echt nicht bedacht .. :D
Ich hab aber erstmal ein Modul mit dem Smartphone verbunden und dass 
dann dort über ein BT terminal versucht abzufragen(weiss jemand mit 
wieviel baud ein BT-Terminal standardmässig läuft wenn man keine 
Baudraten einstellen kanns? (38400)?
#4893287
Lesenswert?

Deniz B. schrieb:
> Ich hab aber erstmal ein Modul mit dem Smartphone verbunden und dass
> dann dort über ein BT terminal versucht abzufragen(weiss jemand mit
> wieviel baud ein BT-Terminal standardmässig läuft wenn man keine
> Baudraten einstellen kanns? (38400)?

Die Baudrate spielt da IIRC keine Rolle, denn die stellt man mit den 
o.g. AT Kommandos fest ein.
Gast #4893607
Lesenswert?

An seriellen ÜPort haben die Module einstel bestimmte einstellbare 
Baudrate. Für die drahtlose kommunikation unterinander ist die Baudrate 
egal. Du kannst zwe Module miteinander per Funk verbinden, auch wenn sie 
zu ihren Computern hin am seriellen Port nicht die gleiche Baudrate 
haben.
#4893619
Lesenswert?

Stefan U. schrieb:
> An seriellen ÜPort haben die Module einstel bestimmte einstellbare
> Baudrate. Für die drahtlose kommunikation unterinander ist die Baudrate
> egal. Du kannst zwe Module miteinander per Funk verbinden, auch wenn sie
> zu ihren Computern hin am seriellen Port nicht die gleiche Baudrate
> haben.

Danke Stefan,
wie sieht es mit einer Modul-Smartphone Verbindung aus? Welche Baudrate 
muss am Modul eingestellt werden damit ich am BT-Terminal meines 
Smartphones die Daten empfange?
Gast #4893650
Lesenswert?

Auch da spielt die Baudrate keine Rolle.

Wichtig ist nur, dass das Terminal auf die gleiche Baudrate konfiguriert 
ist, wie das damit verbundene Bluetooth Modul.

Wie schnell das Smartphone (intern) mit seinem Bluetooth Chip 
kommuniziert, spielt keine Rolle. Möglicherweise ist das nicht einmal 
seriell - könnte auch irgendein andere Protokoll sein, zum Beispiel USB 
oder SPI.
#4893659
Lesenswert?

Stefan U. schrieb:
> Auch da spielt die Baudrate keine Rolle.
>
> Wichtig ist nur, dass das Terminal auf die gleiche Baudrate konfiguriert
> ist, wie das damit verbundene Bluetooth Modul.
>
> Wie schnell das Smartphone (intern) mit seinem Bluetooth Chip
> kommuniziert, spielt keine Rolle. Möglicherweise ist das nicht einmal
> seriell - könnte auch irgendein andere Protokoll sein, zum Beispiel USB
> oder SPI.

Kennst du ein BT-Terminal für Android bei dem man die Baudrate 
einstellen kann?
Habe mehrere getestet und bei denen war die Baudrate nicht einstellbar 
:(
Was aber aber auch einen Grund haben müsste( Smartphone-Terminal default 
Baudrate 9600 oder 38400? Ich habe echt so langsam den Anschein dass 
meine BT Module kaputt sind aber gleich 2 Stück?
Gast #4893834
Lesenswert?

Reden wir aneinander vorbei?
Das Android Programm braucht keine Baudrate weil die Kommunikation zum 
internen BT Modul durch den Treiber geregelt wird. Eventuell 
kommuniziert die CPU sogar gar nicht über Uart sonder über ISP oder USB 
oder irgendeine andere Schnittstelle wo es gar keine Baudrate gibt.

Eine Baudrate hast du nur an den Rxd und Txd Leitungen deines Bluetooth 
Moduls. Womit sind die denn verbunden? Sicher nicht mit dem Smartphone.
#4893863
Lesenswert?

Stefan U. schrieb:
> Reden wir aneinander vorbei?
> Das Android Programm braucht keine Baudrate weil die Kommunikation zum
> internen BT Modul durch den Treiber geregelt wird. Eventuell
> kommuniziert die CPU sogar gar nicht über Uart sonder über ISP oder USB
> oder irgendeine andere Schnittstelle wo es gar keine Baudrate gibt.
>
> Eine Baudrate hast du nur an den Rxd und Txd Leitungen deines Bluetooth
> Moduls. Womit sind die denn verbunden? Sicher nicht mit dem Smartphone.

Ich verstehe auf jeden Fall was du meinst,was ich mich nur frage 
(vielleicht weil ich mich bei BT nicht so gut auskenne) ob es denn kein 
Unterschied macht ob ich jetzt die Daten von meinem Mikrocontroller mit 
9600 oder mit 38400 Baud an mein Smartphone schicke weil wenn man z.b 
bei einem seriellen Terminal(z.B Putty) die falsche Baudrate einstellt 
kann es ja die empfangenen Daten auch nicht gescheit anzeigen oder?
Gast #4893870
Lesenswert?

Das spielt keine Rolle

Dein yC kann "hallo" mit 115200 Baud senden und das Smartphone kann den 
Text so schnell oder langsam auslesen wie es will. Gilt auch umgekehrt.

Die Bluetooth Module puffen die Daten und sie übetragen per Funk so 
schnell es die Signalqualität gerade zulässt.

Die Baudrate beeinflusst nicht die Geschwindigkeit det Funkstrecke.
Gast #4895330
Lesenswert?

Vielen Dank, somit wird mir einiges klar.
Ist ja aber auch logisch dass die über die serielle Verbindung 
gesendeten Daten im BT-Modul gepuffert werden und dann auf 2.4 GHz 
hochmoduliert werden.

Jetzt nochmal zu der zentralen Frage:

"Kann man davon ausgehen dass,das BT-Modul einwandfrei funktioniert wenn 
es sich im AT-Modus programmieren lässt und auch Rückmeldung gibt?"
Gast #4895410
Lesenswert?

> Kann man davon ausgehen dass...

Nein, kann man nicht. Das sagt nur aus, dass das serielle Interface und 
der Befehlsinterpreter funktionieren.

Wenn z.B, die Antenne abgebrochen ist, tut sich auf der Funkstrecke 
nichts.
#4895599
Lesenswert?

Über mein Handy finde ich aber meine BT-Module einwandfrei und kann sie 
auch pairen.
Die status LED zeigt auch eine Veränderung(dass das Modul verbunden ist)
somit kann es ja theoretisch nicht an der Antenne an sich liegen oder?
Vorallem gehen gleich 2 Module nicht und die lassen sich beide verbinden 
und im AT-Modus beschreiben und auslesen.
Irgendwie denke ich der Fehler liegt bei mir ... Auch wenn ich die 
Schaltung ,das Programm und das BT-Terminal gewechselt bzw geändert 
habe,habe auch die Programme im Seriellen Monitor auf meinem PC getestet 
also Schaltung und Programm müssten stimmen.. fällt dir nochwas anderen 
ein außer dass ich vielleicht so ein Glück habe dass gerade 2 Module 
sich verbinden lassen Strom ziehen aber keine Kommunikation aufbauen -.-
#4895614
Lesenswert?

Habe mir gerade überlegt da ich keinen Logik Konverter besitze habe ich 
ja die TXD von meinem µC an einen Spannungsteiler angeschlossen und dann 
2/3 der Spannung an RXD vom Modul abgegriffen.
Nur der 3.3V Pegel vom BT-Modul geht direkt auf den µC ,kann das unter 
Umstände Probleme verursachen?
Gast #4895638
Lesenswert?

> kann das unter Umstände Probleme verursachen?

Ich verwende gerne 2,2k Ohm und 1,5k Ohm Widerstände bei bis zu 115200 
Baud.

Mit zehmal höheren Werten hatte ich jedoch Probleme.
1
AVR         1,5k                Bluetooth Modul
2
5V Tx o----[===]-----+--------o Rx 3,3V
3
                     |
4
                    |~|
5
                    |_|  2,2k
6
                     |
7
                    GND

Ich habe auch schon öfters nur einen Widerstand benutzt, klappte bisher 
auch zuverlässig:
1
AVR         2,2k                Bluetooth Modul
2
5V Tx o----[===]--------------o Rx 3,3V
#4895645
Lesenswert?

Stefan U. schrieb:
>> wenn ich z.B den Befehl read eingebe kommt erst ein r zurück und
>> danach ead .
>
> Also hast du letztendlich "read" empfangen. Ist doch gut, was hast du
> denn erwartet?

Also erwartet habe ich, dass (siehe Bild : bei dem ersten Befehl q kommt 
erstmal garnichts zurück nur CR,dann CR+LF zurück und erst beim zweiten 
Befehl kommt das zurück was ich gesendet habe) und bei read erwarte ich 
doch normalerweise dass es in einem "Stück" zurückkommt oder ?
#4895649
Lesenswert?

Stefan U. schrieb:
>> kann das unter Umstände Probleme verursachen?
>
> Ich verwende gerne 2,2k Ohm und 1,5k Ohm Widerstände bei bis zu 115200
> Baud.
>
> Mit zehmal höheren Werten hatte ich jedoch Probleme.
>
>
1
> 
2
> AVR         1,5k                Bluetooth Modul
3
> 5V Tx o----[===]-----+--------o Rx 3,3V
4
>                      |
5
>                     |~|
6
>                     |_|  2,2k
7
>                      |
8
>                     GND
9
> 
10
>
>
> Ich habe auch schon öfters nur einen Widerstand benutzt, klappte bisher
> auch zuverlässig:
>
>
1
> 
2
> AVR         2,2k                Bluetooth Modul
3
> 5V Tx o----[===]--------------o Rx 3,3V
4
>



Benutze bei 9600 und 38400 Baud 3 mal 1k in Reihe und greife dann am 
ersten Widerstand ab somit würde das ja ungefähr dem entsprechen was du 
oben aufgzeichnet hast.
Danke dir und auch allen anderen für ihre Mühe.
#4895724
Lesenswert?

Deniz B. schrieb:
> wenn ich z.B den Befehl read eingebe kommt erst ein r zurück und danach
> ead .
> Eher nicht gut oder?

Das hängt davon ab, wie Deine App das liest und anzeigt, was 
zurückkommt.

Wenn Du "Gurkensalat" eintippst sollte der auch wieder rauskommen. wenn 
Deine App sich denkt, alle 4 Zeichen ein line feed sieht schön aus, dann 
kommt eben

Gurk
ensa
lat


raus :-)
Gast #4895741
Lesenswert?

Deine Bluetooth Übertragung wird nichts garantiert am Stück übermitteln.

An den seriellen Anschlüssen werden einzelne Zeichen eins nach dem 
anderen Übertragen. Dazwischen können zeitlich beliebig große Lücken 
sein.

Auf der Funk-Schnittstelle sieht es noch komplexer aus. Dort werden 
möglicherweise kleine Pakete geschnürt und übertragen. Aber wo genau ein 
Paket beginnt und wo eins endet, hast du nicht unter Kontrolle.

Bei Modemen ist das auch nicht anders.

Das Programm auf dem Smartphone hat (warum auch immer) einige Zeichen zu 
einem String aneinander gekettet. Die Darstellung durch die App steht 
aber mit Sicherheit nicht in einem 1:1 Zusammenhang zur tatsächlichen 
Übertragung.

Anscheinend bist du mit dem Verhalten deiner App nicht vertraut. Du 
weisst nicht, welche Eigenarten von der App und welche von dem BT Modul 
verursacht wurden.

Ich habe mal eine ähnliche App programmiert. Sie sammelt solange alle 
empfangenen Zeichen ein, bis für ca 200ms nichts mehr kommt. Was bis 
dahin gesammelt wurde, wird als zusammenhängende Logmeldung angezeigt.

Ich würde Dir dazu raten, das Android SDK von Google herunter zu laden 
und dann das Beispielprogramm "Bluetooth Chat" (siehe 
https://developer.android.com/samples/index.html) zu verwenden. Das ist 
nämlich ganz primitiv und hat keine überraschenden Eigenarten. Es 
verhält sich mehr wie ein gewöhnliches Terminalprogramm.

Du musst allerings im Quelltext die UUID auf 
"00001101-0000-1000-8000-00805F9B34FB" ändern, damit das Programm 
Verbindung zu den üblichen Bluetooth-zu-seriell Modulen aufbauen kann. 
Ich habe das mit einem BTM-22 und mit dem HC-05 erfolgreich ausprobiert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren