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
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?
Baudrate richtig gesetzt bei beiden modulen ? Functioniert es ohne BT ?
Funktioniert ohne BT und Baudrate war am Anfang auf 9600 und jetzt auf 38400 aber beides hat nicht funktioniert
//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; }}
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.
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)?
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.
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.
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?
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.
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?
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.
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?
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.
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?"
> 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.
Ü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 -.-
Ist dein handy zufällig eins von Apple? iOS unterstützt das SPP Protokoll nicht - zumindest war das mal so.
Nein habe ein HTC One somit Android
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?
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
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.
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?
> 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 |
> 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?
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 ?
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.
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 :-)
.. 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.
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.
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.