Forum: Mikrocontroller und Digitale Elektronik Arduino Uno und Seeed BLE Shield v1.1


von Alex (Gast)


Lesenswert?

Hallo,

ich möchte mich mit Bluetooth beschäftigen und habe mir hierzu zwei 
Arduino Uno sowie zwei Seeed BLE Shield v1.1 
(http://www.exp-tech.de/seeed-studio-ble-bluetooth-low-energie-shield?___SID=U) 
zugelegt.

Als erstes habe ich das Beispiel von 
http://www.seeedstudio.com/wiki/Seeed_BLE_Shield_v1 aufgespielt, womit 
von einem Board zum anderen Zeichen über den Seriellen Monitor geschickt 
werden sollen. Leider tut sich nix...
Die Status-LEDs beider Boards blinken.

Meine zweite Idee war nun, dass ich dauerhaft von einem BLE-Shield an 
den PC Zeichen schicke, welche ich mit HTERM (0.8.1beta) angezeigt 
bekomme. Als Bluetooth Adapter für den PC verwende ich den Asus 
USB-BT400.
Hierzu habe das Programm von 
http://www.seeedstudio.com/wiki/Seeed_BLE_Shield_v1 folgendermaßen 
abgeändert:
1
#include <SoftwareSerial.h>   //Software Serial Port
2
#define RxD 2
3
#define TxD 3
4
#define DEBUG_ENABLED  1
5
 
6
SoftwareSerial BLE(RxD,TxD);
7
 
8
void setup() { 
9
  Serial.begin(9600);
10
  pinMode(RxD, INPUT);
11
  pinMode(TxD, OUTPUT);
12
  setupBleConnection();
13
 
14
} 
15
 
16
void loop() { 
17
  char recvChar;
18
  while(1){
19
    BLE.write("Hallo");
20
    delay(500);
21
  }
22
} 
23
 
24
void setupBleConnection(){
25
  BLE.begin(9600);        //Set BLE BaudRate to default baud rate 9600
26
  BLE.print("AT+CLEAR");  //clear all previous setting
27
  BLE.print("AT+ROLE0");  //set the bluetooth name as a master
28
  BLE.print("AT+SAVE1");  //don't save the connect information

Mir ist nicht ganz klar, was für einen COM-Port ich für HTERM benötige.
Ich habe über die Systemsteuerung unter 
Bluetooth-Einstellungen/COM-Anschlüsse einen hinzugefügt (Richtung: 
Eigehend) doch leider hat das alles wieder nichts gebracht...

Kann mir jemand weiterhelfen, wie ich eine "einfache" Kommunikation 
hinbekomme, um die Funktion mal zu testen?

Die Variation der Baud-Rate hat nichts gebracht, dies hatte ich anderen 
Foren als mögliche Lösung entnommen.


Vielen Dank für eure Hilfe
Alex

von Jim M. (turboj)


Lesenswert?

COM Ports gibt i.d.R. nur für Bluetooth Classic und nicht für BLE 
Geräte.
BLE Geräte werden unter Win8 und 10 über ein eigenes API angesprochen,
mit HTerm keine Chance IMHO.

von Alex (Gast)


Lesenswert?

Danke turboj, dann kann ich das wohl mit dem Adapter vergessen. :-/

Hat jemand dieses Shield im Einsatz und kann mir zur ersten 
"Versuchsbeschreibung" bei der Kommunikation mit zwei Boards 
weiterhelfen, warum keine Daten ankommen?

von Jim M. (turboj)


Lesenswert?

Bei BLE muss einer das Central (die Rolle vom PC/Android) und einer das 
Periperial sein. Das og. BLE Shield kann wohl beide Rollen, dann muss 
einer Central und einer Peripherial sein.

von Student94 (Gast)


Lesenswert?

Ich habe das gleiche Problem: ich möchte Daten vom einen Arduino zum 
anderen senden über das BLE shield v1.1 von Seeed.

Ich finde keine brauchbaren Beispiele zu diesem Problem. Wie kann ich 
den einen als Periperal und den anderen als Central definieren?

Habe zwei Arten gefunden wie man die Verbindung herstellen kann, aber 
beide funktionieren nicht!!!

void setupBlueToothConnection()
{
    blueToothSerial.begin(38400);                               // Set 
BluetoothBee BaudRate to default baud rate 38400
    blueToothSerial.print("\r\n+STWMOD=1\r\n");                 // set 
the bluetooth work in master mode
    blueToothSerial.print("\r\n+STNA=SeeedBTMaster\r\n");       // set 
the bluetooth name as "SeeedBTMaster"
    blueToothSerial.print("\r\n+STAUTO=0\r\n");                 // 
Auto-connection is forbidden here
    delay(2000);                                                // This 
delay is required.
    blueToothSerial.flush();
    blueToothSerial.print("\r\n+INQ=1\r\n");                    //make 
the master inquire
    Serial.println("Master is inquiring!");
    delay(2000); // This delay is required.

    //find the target slave
    char recvChar;
    while(1)
    {
        if(blueToothSerial.available())
        {
            recvChar = blueToothSerial.read();
            recvBuf += recvChar;
            nameIndex = recvBuf.indexOf(slaveName);             //get 
the position of slave name

                                                                //nameIndex 
-= 1;
                                                                //decrease 
the ';' in front of the slave name, to get the position of the end of 
the slave address
            if ( nameIndex != -1 )
            {
                //Serial.print(recvBuf);
                addrIndex = (recvBuf.indexOf(retSymb,(nameIndex - 
retSymb.length()- 18) ) + retSymb.length());//get the start position of 
slave address
                slaveAddr = recvBuf.substring(addrIndex, 
nameIndex);//get the string of slave address
                break;
            }
        }
    }

    //form the full connection command
    connectCmd += slaveAddr;
    connectCmd += "\r\n";
    int connectOK = 0;
    Serial.print("Connecting to slave:");
    Serial.print(slaveAddr);
    Serial.println(slaveName);
    //connecting the slave till they are connected
    do
    {
        blueToothSerial.print(connectCmd);//send connection command
        recvBuf = "";
        while(1)
        {
            if(blueToothSerial.available()){
                recvChar = blueToothSerial.read();
                recvBuf += recvChar;
                if(recvBuf.indexOf("CONNECT:OK") != -1)
                {
                    connectOK = 1;
                    Serial.println("Connected!");
                    blueToothSerial.print("Connected!");
                    break;
                }
                else if(recvBuf.indexOf("CONNECT:FAIL") != -1)
                {
                    Serial.println("Connect again!");
                    break;
                }
            }
        }
    }while(0 == connectOK);
}


und


 BLE.begin(9600); //Set BLE BaudRate to default baud rate 9600
  BLE.print("AT+CLEAR"); //clear all previous setting
  BLE.print("AT+ROLE1"); //set the bluetooth name as a master
  BLE.print("AT+SAVE1");  //don't save the connect information

Vielen Dank für eure Hilfe

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.