Wie kann ich eine serielle Brücke mit zwei Bluetooth-Dongles erstellen?

Ich besitze zwei der SparkFun BlueSmirf Bluetooth-Module und möchte sie miteinander verbinden - eines als Master und eines als Slave. Es ist einfach, diese mit einem PC mit Putty als Master zu koppeln, aber einige der Befehle für das Modul erfordern einen Wagenrücklauf, um einen Befehl zu senden.

Wie kann ich diese Bluetooth-Module zwischen zwei Arduinos koppeln, ohne einen PC zu verwenden, um das Wagenbefehlssignal von Putty zu senden, während das Gerät konfiguriert wird?

Ich habe das Datenblatt und das Befehlsblatt für das Modul selbst gründlich durchgesehen, aber es enthält keine Informationen darüber, wie dieses Problem behoben werden kann.

Haben Sie versucht, eine \noder \n\rüber \r\neine zu senden Serial.print()? Je nach verwendetem Protokoll erfordern einige serielle Geräte einen Wagenrücklauf, einen Zeilenvorschub oder ein CR-LF-Paar als Zeilenende-Trennzeichen.
Leider habe ich alle ausprobiert, aber sie sind nicht dasselbe wie das Drücken der Eingabetaste.
@KeeganMcCarthy Dann müssen Sie bestimmen, was PuTTY über die Leitung sendet, wenn Sie die Eingabetaste drücken. Dies ist fast immer \r\n oder etwas Ähnliches, sollte aber in den Einstellungen verfügbar sein.

Antworten (3)

Ich erkläre die Vorgehensweise in diesem Blog-Beitrag oder ausführlich in diesem Instructables . Hier ist vorerst der grundlegende Code, den Sie auf das Master-Gerät und das Slave-Gerät setzen können.

//Master code
void setup() {
  Serial.begin(115200);
  Serial.print("$$$");
  delay(100);
  Serial.println("SM,1");  delay(100);
  Serial.println("C,000666123ABC");
  delay(100);
  Serial.println("---");
}

//Slave code
void setup() {
  Serial.begin(115200);
  Serial.print("$$$");
  delay(100);
  Serial.println("SM,0");
  delay(100);
  Serial.println("---");
}

Und einige Tipps, bevor Sie mit Bluesmirf weitermachen:

  1. Lesen Sie das Benutzerhandbuch
  2. Serielle Geschwindigkeit: Standardmäßig ist BlueSmirf auf 115200 eingestellt, sodass Sie Serial.begin(115200) aufrufen müssen; vor dem Senden des ersten Befehls.
  3. Der "$$$"Befehl ist der einzige, dem kein Carriage Return folgt. Warum? Um die Sache natürlich zu verkomplizieren. Verwenden Sie print() für den "$$$"Befehl und println()für alle anderen Befehle.
  4. Lesen und validieren Sie alle Antworten, die zurückgesendet werden.
  5. Warten Sie nach jedem gesendeten Befehl eine Verzögerung von 100 ms, bevor Sie versuchen, die Antwort zu lesen. Dadurch erhält Bluesmirf die Zeit, den Befehl zu verarbeiten.
  6. Vergessen Sie nicht, den Befehlsmodus zu verlassen (mit “---”). Einige Befehle werden erst wirksam, nachdem Sie den Befehlsmodus verlassen haben (z. B. MS-Befehl).

Sie können einen Wagenrücklauf über die Seriennummer senden, indem Sie Folgendes tun:

Serial.print("\r");

Sie können den Befehl (oder was auch immer Sie senden) und den Wagenrücklauf auch wie folgt in dieselbe Druckzeichenfolge einfügen:

Serial.print("Everybody Dance Now\r");

Leider ist das Senden von "\r" nicht dasselbe wie das Drücken der Eingabetaste bei der Verwendung von PuTTY.
@KeeganMcCarthy Dann muss das Drücken der Eingabetaste mehr sein als das Senden eines Wagenrücklaufs. Versuchen Sie \r\n

Bluetooth verwendet ein Host- und Gerätemodell. Ein Gerät benötigt einen Host, um zu kommunizieren.

Die von Ihnen verwendeten Module sind Geräte, während Ihr PC ein Host ist.

Es ist nicht möglich, zwei Bluetooth-Geräte mit dem Serial Port Profile (SPP) miteinander zu koppeln. Sie können nur mit einem Host gekoppelt werden.

Ich habe sie tatsächlich zusammen gepaart. Aber ich verwende einen USB-UART-Chip, um die Verbindung zwischen ihnen zu initialisieren.