Bluetooth kommandos

Hallo alle miteinander,

Ich hab mir ein Bluetoothmodul zugelegt undzwar den RN52.
Mir ist allerdings unklar, inwiefern ich ihm die Kommandos sende.
Ich verbinde diesen ja mit UART und softwareSerial.
reicht es, indem ich einfach serialprintln(„A+„) in meinem Code schreibe und führt es, diesen Kommando dann aus?

Liebe Grüße

raetselandy:
Ich verbinde diesen ja mit UART und softwareSerial.
reicht es, indem ich einfach serialprintln(„A+„) in meinem Code schreibe und führt es, diesen Kommando dann aus?

Nein, das reicht noch nicht.
Du musst den RN-52 erst in den Konfigurationsmodus versetzen.
Wenn Du das auf einem Breakoutboard, gibt es ggf. einen Schalter. Ansonsten musst Du den PIN 9 am Modul auf GND ziehen.
Dann ist es möglich per Serial.println() die Kommandos zu übertragen.
Ansonsten verschickst Du per println() die Daten direkt weiter an den verbundenen Empfänger.
Sinnvoll wäre es auf den UART einen Sketch aufzuspielen, der einfach den Harware Serial (USB) an den Software Serial (RN-52) durchschleift. Dann kannst Du am PC die Kommandos tippen und die Ergebnisse sehen.
Wie z.B. hier erklärt:
https://learn.sparkfun.com/tutorials/rn-52-bluetooth-hookup-guide/all

@TriB
Danke dir für die Hilfe!
Hast du denn bereits mit dem Modul gearbeitet?

Nein, bisher habe ich nur die HC´s in den verschiedensten Varianten im Einsatz.
Das reicht mir schon vollkommen aus, dass diese unterschiedlich funktionieren.
Manche brauchen einen Zeilenumbruch, andere 1 Sekunde Zeit um ein Kommando abzuschließen.
Andere erwarten die Baudrate so AT+BAUD7 oder auch so AT+UART=57600,0,0
mal mit, mal ohne “ln” nach dem print. Habe ausreichend Zeit investiert, jede Variante automatisch zu erkennen und entsprechend zu konfigurieren…

Eins ist mir noch unklar.
Wenn ich „rn52.println(„H\r“)“ in mein Code schreibt, so sollten alle Kommandos aufgelistet werden. Das ist die Hilfe-Funktion.
Allerdings kommt auf mein seriellen Monitor vom Arduino nichts an.
Woran liegt es? Kann es sein, dass das Modul dies dann an dem verbundenen Gerät ausgibt?

Dein println() sendet bereits einen CarriageReturn & Linefeed ('\n' & '\r').
Ensprechend solltest Du das \r weglassen.

Nur bei print() ohne "ln" müsste man den Zeilenumbruch mitsenden.

Dankeschön
Allerdings passiert trotzdem nichts.
Also mein Bluetoothmodul ist mit meinem Smartphone verbunden. In ner App seh ich auch, dass das Modul bspweise ein „H“ empfangen hat. Aber die Infos sind auf meinem Laptop nicht ersichtlich, also da tut sich nichts.

Das funktioniert nicht!

Sobald ein Gerät mit dem Modul verbunden ist, werden die AT Befehle nicht akzeptiert.
Zumindest ist das so bei den HC Modulen.
Wie sollte es sonst zwischen Daten zur Übermittlung und AT-Befehlen unterscheiden? Gibt ja auch Module ohne PIN oder Button um ihn in den Programmiermodus zu versetzen.
Man konfiguriert ja auch das Modul i.d.R. nur einmalig.

Hmm okay, tut sich allerdings trotzdem nichts. Selbst wenn’s nicht verbunden ist

Dann zeig mal bitte ein Bild von dem Aufbau.
Und am besten Deinen Code, damit man sich ein Bild davon machen kann, wie Du den Config-Modus aktivierst und dann die AT-Befehle übergibst.

GPIO9 – Pin 5
UART_TX - 11
UART_RX - 10
PWREN - 3,3V bzw. Pin 6
VDD - 3,3V
GND - GND

#include <SoftwareSerial.h>

int TX = 11;
int RX = 10;
int mode = 5;
int power = 6;

SoftwareSerial rn52(RX,TX);

void setup() {​​​​
  pinMode(power,LOW);
  pinMode(mode,LOW);     //data mode
  rn52.begin(115200);
  Serial.begin(115200);
  rn52.println("H");      //hilfe
}​​​​

void loop() {​​​​
  pinMode(power, HIGH);     //anschalten
  pinMode(mode,LOW);        //command mode
//  rn52.println("@,1");        //erkennbar
  rn52.println("V");              //
  rn52.println("G");              //
  rn52.println("SK,08");       //HFP
//  rn52.println("B");           //mit letztem Gerät verbinden
}

Könntest Du bitte die ganzen unnötigen Leerzeilen aus Deinem Sketch entfernen. So ist der kaum lesbar.

Gruß Tommy

UI!
Also da ist so einiges schief, würde ich sagen!
Du möchtest das Modul über einen PIN (6) mit 3,3V versorgen? Sicher, dass der die Versorgung ausreichend gewährleisten kann?

Dann startest Du erst die Serielle Verbindung, sendest wieder ein "H" mit zwei Zeilenumbrüchen (println und '\r').
Erst danach aktivierst Du Pin 6 (power) und haust 3 Kommandos in Dauerschleife raus. Immer wieder und wieder. Vermutlich ein paar Duzend mal pro Sekunde.
Nirgendwo ist nun erkennbar, wo Du den Rückgabewert des Moduls ausliest.
Entweder machst Du das überhaupt nicht, oder es fehlt der Teil des Sketches (was die fehlende letzte Klammer vermuten lässt).

Bring im setup() mal etwas Reihenfolge rein und dann probier einmal ein Kommando abzusenden und warte im loop() auf eine Rückgabe, die Du an den Serial übergibst.
Dafür findest Du ein einfaches Beispiel in der IDE (Serial Passthrough).

Also sollte es so funktionieren?

include <SoftwareSerial.h>

int TX = 11;
int RX = 10;
int mode = 5;
int power = 6;

SoftwareSerial rn52(RX,TX);

void setup() {​​​​
  pinMode(power,HIGH);
  pinMode(mode,HIGH);     //COMMAND mode
  rn52.begin(115200);
  Serial.begin(115200);
  rn52.println("H");      //hilfe
}​​​​

void loop() {​​​​
if (serial.available() =! 0) {
    Serial.println(rn52.read());
}

Jetzt hab ich die Schaltung nicht ganz verstanden.
Willst Du das BT-Modul direkt mit einen Arduino Ausgang mit Strom versorgen?
Grüße Uwe

Nein, ich versorg ihn mit dem 3,3V-Pin vom Arduino.
Der PWREN-Pin am Modul wird ebenfalls an 3,3V angeschlossen, eine Option wäre es diesen an einen Pin zu legen, um ihn kontrolliert an und aus zu schalten.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.