Command Mode von Digilent Pmod BLE nicht erreichbar

Hallo

in meinem Projekt möchte ich mit einer smarten Leuchte, die mit Bluetooth LE ausgesattet ist, über einen Arduino Due, der mit einem Bluetooth LE Modul ausgestattet ist, kommunizieren. Allerdings habe ich Probleme das Modul mit der Lampe zu verbinden.

Ich benutze einen Arduino Due und einen Pmod BLE von Digilent. Hier findet man einen Button (Reference Manual) zur Dokumentation des Moduls und unten auf der Seite befindet sich ein Link zur Arduino Library inklusive Beispielcode.

Verbunden habe ich den Arduino Due mit dem Modul folgendermaßen:
Pmod BLE - Ardunio:
Gnd - Gnd
Gnd - Gnd
Vcc - 3,3 V Power Pin
Rx - Tx1 (Pin 18)
Tx - Rx1 (Pin 19)

Das ist mein bisheriger Code:

#include <BLE.h>

BLE bt;

void setup()
{
  // Initialize Serial to print to Serial Monitor
  Serial.begin(115200);
  Serial.println("Begin program...");
  
  // Initialize PmodBLE. Serial1 is the serial port used to commuinicate with PmodBLE
  bt.begin(Serial1, 115200); 

    Serial1.print("$$");
    Serial.println("0");
    while(Serial1.available() >0){
      Serial.println(bt.readSentence(Serial1));
    }
   
    Serial.println("1");
    Serial1.print("C,0,3402860F051D");
    while(Serial1.available() >0){
      Serial.println(bt.readSentence(Serial1));
    }  
 
    Serial.println("2");
    Serial1.print("---");
    while(Serial1.available() >0){
      Serial.println(bt.readSentence(Serial1));
    }   
    Serial.println("3");
}


void loop()
{
  
  // Send string to PmodBLE
  bt.send(Serial1, "A0010105");
}

Die Initialisierung von Serial und Serial1 habe ich aus dem Beispielcode übernommen.
Der Pmod BLE kann mit ASCII Befehlen gesteuert werden. Um ihn in den Command Mode zu versetzen wird der Befehl "$$$" benötigt. Der Befehl "C,0,xxxxxxxxxxxx" soll die Verbindung mit der angegebenen Bluetoothadresse herstellen. Mit "---" verlässt man den Command Mode wieder.
Mit Serial.println("0") etc. habe ich kontrolliert, ob das Programm überhaupt zu diesen Punkten kommt und das tut es auch. Mir werden alle Zahlen ausgegeben.
Eigentlich soll das Pmod BLE Modul, sobald es im Command Mode ist, zurück geben, dass es geklappt hat oder auch nicht. Diese Ausgabe sollte mit Serial.println(bt.readSentence(Serial1)) auf dem Seriellen Monitor ausgegeben werden. Das passiert allerdings nicht. Da der Befehl readSentence(Serial1) so lange wartet, bis das Pmod BLE Modul etwas auszugeben hat, habe ich Serial1.available() benutzt. Wenn ich dies nicht getan habe, dann ging das Programm nicht weiter und mir wurde nur die "0" auf dem Seriellen Monitor angezeigt.

Die Ausgabe auf dem Seriellen Monitor sieht also momentan folgendermaßen aus:

Begin program...
0
1
2
3

Mit dem Code im Loop wird einfach nur der angegebene Text über Bluetooth versendet. Wenn ich mich mit einer Bluetooth LE Terminal App auf meinem Smartphone mit dem Pmod BLE Modul verbinde wird mir dieser Text angezeigt.

Das Pmod BLE Modul wird in den Beispielen, die ich gefunden habe, ohne Arduino verwendet und kann so meist direkt über beispielsweise den Seriellen Monitor von der Arduino IDE gesteuert werden. Es wird also einfach "$$$" in den Seriellen Monitor eingegeben und das Modul antwortet. Da dies bei mir nicht funktioniert hat, habe ich versucht die Befehle direkt an Serial1 zu übergeben.
Leider kommt keine Verbindung zustande.
Da ich noch nicht so viel Erfahrung mit Arduino und insbesondere den seriellen Schnittstellen habe, kann ich mir sehr gut vorstellen, dass ich bei der Verwendung der Schnittstellen einen Fehler mache.

Für Tipps und Ideen bin ich sehr dankbar!

Lightbulb:
Für Tipps und Ideen bin ich sehr dankbar!

Bist Du sicher, dass alle beteiligten Komponenten tatsächlich funktionieren? Hast Du einen „Bluetooth-Sniffer“ (wenn es so etwas überhaupt gibt) und wird in diesem irgendetwas angezeigt?

Ich kenne mich mit dem Kram, mit dem Du es zu tun hast, halt überhaupt nicht aus.

Gruß

Gregor

Der Arduino Due müsste funktionieren. Ich habe testweise Serial1 mit Serial2 kommunizieren lassen, also einfach "Hallo" hin und her geschickt und das hat funktioniert.

Bei dem Pmod BLE bin ich mir leider nicht sicher. Ich habe den Beispielcode getestet und die Ausgabe im Seriellen Monitor sieht sehr merkwürdig aus.
Das hier ist der Code des Beispiels:

#include "BLE.h"
BLE bt;


void setup()
{
  // Initialize Serial to print to Serial Monitor
  Serial.begin(115200);
  Serial.println("Begin program...");
 
  // Initialize PmodBLE. Serial1 is the serial port used to commuinicate with PmodBLE
  bt.begin(Serial1, 115200);
}


void loop()
{
  // Read data from PmodBLE, then print it to Serial Monitor
  Serial.println(bt.readSentence(Serial1));
 
  // Send string to PmodBLE
  bt.send(Serial1,"Hi! I was sent using PmodBLE! :)");
 
}

Wenn ich ein BLE Terminal auf meinem Smartphone mit dem Pmod BLE verbinde, dann bekomme ich den String "Hi! I was sent using PmodBLE! :)" auch angezeigt. Wenn ich die Verbindung dann trenne wird auf den Seriellen Monitor geschrieben. Die Ausgabe habe ich als Screenshot angefügt.
Ich finde es merkwürdig, dass der Anfang der Ausgabe noch sinnvoll aussieht, aber dann werden merkwürdige Zeichen ausgegeben.
Ich verstehe nicht warum das passiert.

Danke für den Hinweis mit dem Bluetooth-Sniffer. Ich weiß noch nicht genau, ob mir das beim Fehler finden hilft, aber ich kann dadurch auch mehr über meine Smarte Leuchte erfahren.

Lightbulb:
... die Ausgabe im Seriellen Monitor sieht sehr merkwürdig aus.

Die Ausgabe sieht aus, als wäre die Übertragungsgeschwindigkeit falsch. Probiere mal andere. „Arduino-Standard“ ist 9600 Baud.

Gruß

Gregor