Forum: Mikrocontroller und Digitale Elektronik HC-05 Bluetooth Modul lässt sich im AT-Modus programmieren aber baut keine Kommunikation auf


von Deniz Braun (Gast)


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

von Deniz Braun (Gast)


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?

von RP6conrad (Gast)


Lesenswert?

Baudrate richtig gesetzt bei beiden modulen ? Functioniert es ohne BT ?

von Deniz B. (braun_d)


Lesenswert?

Funktioniert ohne BT und Baudrate war am Anfang auf 9600 und jetzt auf 
38400 aber beides hat nicht funktioniert

von Deniz B. (braun_d)


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;

}}

von Lächler (Gast)


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.

von Deniz B. (braun_d)


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)?

von Jim M. (turboj)


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.

von Stefan F. (Gast)


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.

von Deniz B. (braun_d)


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?

von Stefan F. (Gast)


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.

von Deniz B. (braun_d)


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?

von Stefan F. (Gast)


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.

von Deniz B. (braun_d)


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?

von Stefan F. (Gast)


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.

von Braun Deniz (Gast)


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?"

von Stefan F. (Gast)


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.

von Deniz B. (braun_d)


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 -.-

von Stefan F. (Gast)


Lesenswert?

Ist dein handy zufällig eins von Apple?
iOS unterstützt das SPP Protokoll nicht - zumindest war das mal so.

von Deniz B. (braun_d)


Lesenswert?

Nein habe ein HTC One somit Android

von Deniz B. (braun_d)


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?

von Deniz B. (braun_d)


Lesenswert?

Gerade im AT-Modus wo wahrscheinlich die Antenne(Stromfresser) direkt 
ausgeschaltet ist die Kommunikation noch stabil,vielleicht bricht der 
3.3V Pegel im Pairing mode runter und ich muss das Signal doch über 
einen Logik Konverter jagen

: Bearbeitet durch User
von Rainer U. (r-u)


Lesenswert?

Verbinde auf einem Modul RX und TX direkt, paare es mit Deinem 
Smartphone und sende per Bluetooth ein Zeichen hin. Wenn Du es 
zurückbekommst, ist Dein Modul in Ordnung.

von Deniz B. (braun_d)


Angehängte Dateien:

Lesenswert?

Das ganze sieht bei einem Zeichen so aus :
wenn ich z.B den Befehl read eingebe kommt erst ein r zurück und danach 
ead .
Eher nicht gut oder?

von Stefan F. (Gast)


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

von Stefan F. (Gast)


Lesenswert?

> 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?

von Deniz B. (braun_d)


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 ?

von Deniz B. (braun_d)


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.

von Rainer U. (r-u)


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 :-)

von Rainer U. (r-u)


Lesenswert?

.. und wenn das EIngetippte wieder raus kommt, dann hat die 
kommunikation schon mal bis zu den TTL-Beinchen funktioniert in beide 
Richtungen und das Modul selbst ist in Ordnung.

von Stefan F. (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

"Bluetooth SPP" wäre übrigens auch eine empfehlenswerte APP.

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.