INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Verbindung zwischen BLE Shield und Feather32u4
07.05.2019, 11:53 (Dieser Beitrag wurde zuletzt bearbeitet: 07.05.2019 13:37 von WinTiger.)
Beitrag #1
Verbindung zwischen BLE Shield und Feather32u4
Guten Tag,

ich versuche schon lange die BLE Verbindung zwischen meinem BLE-Shield v1.1 (von Seeed mit einem HM-11 Bluetooth Modul) und meinem Feather 32u4 herzustellen.
Viele verschiedene Beispielsketchs habe ich probiert, aber keiner führt zum Erfolg.
Der Feather soll als Master und das Shield auf dem Arduino soll als Slave fungieren.
Das Problem ist: Sowohl das Shield, als auch die Feather blinken. Das heißt beide suchen nach einem Verbindungspartner, finden sich aber gegenseitig nicht.
Ausserdem: Kann ich mich mit meinem Smartphone mit beiden Komponenten verbinden, aber die Verbindung untereinander funktioniert nicht.

Ich hoffe hier kann das Problem gelöst werden.

Einmal der Sketch für das Shield:

Code:
#include <SoftwareSerial.h>   //Software Serial Port
#define RxD 2
#define TxD 3

#define DEBUG_ENABLED  1

SoftwareSerial BLE(RxD,TxD);

int lightB = 7;
int lightG = 6;
int lightR = 5;
int masterPin = 4;
int isMaster = 0;
int msgToken = 0;
char gBtMsg[256];
int incomingByte = 0;
int gBtKnownMACTotal =1;
char* gBtKnownMAC[1]; //This is set to hold only two MAC adresses

void BtReceive(void){
  bool keepReading = true;
  int index = 0;
  
  gBtMsg[0] = '\0';
  
  while(keepReading)
  {
    keepReading = false;
    
    if (Serial.available() > 0)
    {
      // read the incoming byte:
      incomingByte = Serial.read();
      if(incomingByte != 13)
      {
        gBtMsg[index++] = incomingByte;
        keepReading = true;
      }
    }
  }
  
  gBtMsg[index] = '\0';
}

void BtSend(char* i_pBtCmd, bool i_ln = true)
{

  if(i_ln)
  {
    Serial.println(i_pBtCmd);
  } else
  {
    Serial.print(i_pBtCmd);
  }
  
  delay(100);
  BtReceive();
}


void BtInit(void)
{
  isMaster = digitalRead(masterPin);
  bool btConnect = false;


  gBtKnownMAC[0] = "E4D43839A616"; // Change this to one of your MAC addresses

  BtSend("$$$", false);

  BtInit();
}
void setup()
{
  Serial.begin(9600); //Starten der seriellen Kommunikation mySerial mit der Baudrate 9600
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  setupBleConnection();

}

void loop()
{
    receiveMsg();
  
  String recvChar;
    while(1)
  {
        if(BLE.available()>0)
      {
          //check if there's any data sent from the remote BLE shield
            recvChar = BLE.readStringUntil('\n');
            BLE.print(recvChar);
            Serial.print(recvChar);
      }
  }
}

void receiveMsg()
{  
    if (Serial.available() > 0)
{
      // read the incoming byte:
      incomingByte = Serial.read();
      if(incomingByte == 'R')
{
        digitalWrite(lightB, LOW);
        delay(50);
        digitalWrite(lightB,HIGH);
      }
    }    
    delay(100);
  }
}

void setupBleConnection()
{
    bool btConnect = false;
    gBtKnownMAC[0] = "7C010A6434E4"; // Change this to one of your MAC addresses
    
    BLE.begin(9600); //Set BLE BaudRate to default baud rate 9600
    BtSend(gBtKnownMAC[0]);
    BtSend("SM,0");
    BtSend("---");
    
    while(!btConnect)
    {
      delay(1000);

      BtSend("$$$", false);
      BtSend("GK");
      
      int numVal = 0;
      
      if(strlen(gBtMsg) > 0)
      {
        numVal= atoi(gBtMsg);
      }
      
      if(numVal == 1)
      {                  
        btConnect = true;
      }

      BtSend("---");              
    }
}

    /*Das weitere wird nicht benötigt//
    BLE.print("AT+CLEAR"); //clear all previous setting
    BLE.print("AT+ROLE1"); //set the bluetooth name as a slaver
    BLE.print("AT+SAVE1");  //don't save the connect information
}*/

Und für die Feather:

Code:
#include <Arduino.h>
#include <SPI.h>
#include <SHT1x.h>
#include "Adafruit_BLE.h"
#include "Adafruit_BluefruitLE_SPI.h"
#include "Adafruit_BluefruitLE_UART.h"
#if SOFTWARE_SERIAL_AVAILABLE
  #include <SoftwareSerial.h>
#endif
#include "BluefruitConfig.h"
/////Diese Bibliothek ist notwendig für das Konfigurieren des BLE-Moduls als 'Slave' //////
#include <AltSoftSerial.h>
AltSoftSerial BTserial;

//Specify data and clock connections and instantiate SHT1x object
#define FACTORYRESET_ENABLE      1
#define dataPin  10
#define clockPin 11
//#define TOTAL_BYTES     (1024 * strlen(TEST_STRING))
SHT1x aussensensor(dataPin, clockPin);

int incomingByte = 0;
int isMaster = 0;
int masterPin = 4;
int gBtKnownMACTotal =1;
char* gBtKnownMAC[1]; //This is set to hold only two MAC adresses
char gBtMsg[256];
char gBtCmd[256];
char gBTAdr[13];
int msgToken = 0;

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

// A small helper
  void error(const __FlashStringHelper*err)
  {
//Serial.println(err);
  while (1);
  }
//Für das Umwandeln der Messwerte in Strings//
String inString1 = "";    // string to hold input // Notwendig für das Umwandeln der Messwerte in einen String
String inString2 = "";

void setup()
{
    /*Serial.begin(38400); // Open serial connection to report values to host
    Serial.println("Starting up");
    Serial.begin(115200);//Befehl um den Sensorwert auszulesen
    Serial.println("Starting up");
    Serial.begin(38400); // Open serial connection to report values to host*/
  
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  ble.begin(9600); //Set BLE BaudRate to default baud rate 9600

  if ( !ble.begin(VERBOSE_MODE) )
  {
    error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?"));
  }
  if ( FACTORYRESET_ENABLE )
  {
    /* Perform a factory reset to make sure everything is in a known state */
    if ( ! ble.factoryReset() )
    {
      error(F("Couldn't factory reset"));
    }
  }

  /* Disable command echo from Bluefruit */
  ble.echo(false);

  /* Wait for a connection before starting the test */
  //Serial.println("Waiting for a BLE connection to continue ...");
  ble.setMode(BLUEFRUIT_MODE_DATA);

  ble.verbose(false);  // debug info is a little annoying after this point!

  // Wait for connection to finish
  while (! ble.isConnected())
  {
      delay(5000);
  }
  // Wait for the connection to complete
  delay(1000);
}

void loop()
{
  setupBleConnection();

  // Read values from the sensor
  inString1 = aussensensor.readTemperatureC();
  inString2 = aussensensor.readHumidity();

  //Print the values to the serial port - (Zur Überwachung)
  Serial.print(inString1);
  Serial.print(" °C ");
  Serial.print(inString2);
  Serial.println(" %");
//Dient der Umwandlung der Messwerte in Strings
      Serial.println(inString1.toFloat());
      Serial.println(inString2.toFloat());
      //Send the data in a loop below:
//Damit werden die Strings gesendet!!
ble.print( inString1 );
ble.print("°C  ");
ble.print( inString2 );
ble.println("%  " );


      //clear the string for new input:
      inString1 = "";
      inString2 = "";
      delay(10000);
}

void BtSend(char* i_pBtCmd, bool i_ln = true){

  if(i_ln){
    Serial.println(i_pBtCmd);
  } else{
    Serial.print(i_pBtCmd);
  }
  
  delay(100);
  BtReceive();
  
}

void BtReceive(void){
  bool keepReading = true;
  int index = 0;
  
  gBtMsg[0] = '\0';
  
  while(keepReading){
    keepReading = false;
    
    if (Serial.available() > 0) {
      // read the incoming byte:
      incomingByte = Serial.read();
      if(incomingByte != 13){
        gBtMsg[index++] = incomingByte;
        keepReading = true;
      }
    }
  }
  
  gBtMsg[index] = '\0';
}

void BtInit(void){
  isMaster = digitalRead(masterPin);
  bool btConnect = false;
  Serial.println(masterPin);

  gBtKnownMAC[0] = "7C010A6434E4"; // Change this to one of your MAC addresses
  //gBtKnownMAC[1] = "E4D43839A616"; // Change this to one of your MAC addresses
}
void setupBleConnection()
{
    bool btConnect = false;
    
    BtSend("$$$", false);
    //Weil das unser Master ist//
    BtSend("SM,1");
    BtSend("I,5");
    BtSend("---");

while(!btConnect){
      delay(100);
      BtReceive();
for(int i = 0;i<12; i++)
{
  //Serial.print(gBtMsg[i]);
}
      
      int msgLen = strlen(gBtMsg);
      if(msgLen > 0){
        
        if(msgLen >= 12){
          char* doneMsg = &gBtMsg[msgLen - 12];
          
          gBtMsg[12] = '\0';
          bool foundKnownMAC = false;
          
          for(int i = 0; i < gBtKnownMACTotal && !foundKnownMAC; i++){
            if(!strcmp(gBtMsg, gBtKnownMAC[i])){
              foundKnownMAC = true;
            }
          }
          
          if(!strcmp(doneMsg, "Inquiry Done")){

            Serial.println(gBtCmd[0]);
            if(foundKnownMAC){              
              gBtCmd[0] = 'C';
              gBtCmd[1] = ',';
              
              for(int i = 0; i < 12; i++){
                gBtCmd[i + 2] = gBtMsg[i];
              }
              
              gBtCmd[15] = '\0';
                  
              BtSend("$$$", false);
              BtSend(gBtCmd);
              BtSend("---");      

              delay(2000);
              
              while(!btConnect){
                delay(1000);
                BtSend("$$$", false);
                BtSend("GK");
                
                int numVal = 0;
      
                if(strlen(gBtMsg) > 0) {
                  numVal= atoi(gBtMsg);
                }
                
                if(numVal == 1){
                  btConnect = true;
                }
                BtSend("---");
              }
            }
          }
        }
      }
    }
    msgToken = 1;
  }
    /*Das weitere wird nicht benötigt//
    ble.print("AT+CLEAR"); //clear all previous setting
    ble.print("AT+ROLE1"); //set the bluetooth name as a slaver
    ble.print("AT+SAVE1");  //don't save the connect information*/

Gruß WinTiger


Angehängte Datei(en)
.ino  Sketch_fuer_BLE_Shield.ino (Größe: 2,91 KB / Downloads: 27)
.ino  Sketch_fuer_Feather.ino (Größe: 6,29 KB / Downloads: 29)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2019, 12:30
Beitrag #2
RE: Verbindung zwischen BLE Shield und Feather32u4
Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [*code] davor und [*/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2019, 13:03
Beitrag #3
RE: Verbindung zwischen BLE Shield und Feather32u4
danke für den Hinweis, ich hoffe es ist jetzt so, wie es gemeint war.
Gruß WinTiger
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2019, 13:30
Beitrag #4
RE: Verbindung zwischen BLE Shield und Feather32u4
(07.05.2019 13:03)WinTiger schrieb:  danke für den Hinweis, ich hoffe es ist jetzt so, wie es gemeint war.
Gruß WinTiger
Nö, lies es nochmal genau. Die eckigen Klammern gehören dazu.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2019, 13:38
Beitrag #5
RE: Verbindung zwischen BLE Shield und Feather32u4
Alles klar. Danke. Hab ich gemacht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.05.2019, 08:38
Beitrag #6
RE: Verbindung zwischen BLE Shield und Feather32u4
Zum Feather und BLE kann ich keine Erfahrungen beisteuern. Wenn Du Dich aber mit dem Smartphone mit beiden verbinden kannst, laufen beide wohl im gleichen Modus (Master oder Slave).

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.05.2019, 10:10
Beitrag #7
RE: Verbindung zwischen BLE Shield und Feather32u4
Ich habe versucht, den Sketch von dieser Seite (siehe nachfolgender Link) in mein Programm einzubauen.

https://www.instructables.com/id/BlueToo...t-connect/

Nur habe ich die Große if-Schleife weggelassen und dem Arduino direkt gesagt, dass er der Slave und die Feather der Master sein soll.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.05.2019, 10:14
Beitrag #8
RE: Verbindung zwischen BLE Shield und Feather32u4
Es gibt keine if-Schleife, nur eine if-Bedingung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Lightbulb HC05 Bluetooth auf Verbindung / Empfang überprüfen Beatzler 6 267 Gestern 15:09
Letzter Beitrag: hotsystems
  Bluetooth shield HC06 RCudino 16 438 04.02.2020 22:07
Letzter Beitrag: Tommy56
  Berechnen der Entfernung zwischen 2 GPS Koordinaten louard 3 275 02.02.2020 18:29
Letzter Beitrag: louard
  Zeitmessen zwischen 2 Impulse Lothileinchen 10 344 02.02.2020 16:48
Letzter Beitrag: Lothileinchen
  Mit einen Taster zwischen zwei Ausgängen Toggeln luft-post 6 299 13.01.2020 17:41
Letzter Beitrag: hotsystems
  SD shield / Kein Zugriff auf Karte Ernie70 33 1.242 10.01.2020 18:06
Letzter Beitrag: Tommy56
  Arduino Mega mit Lan Shield und Googlemail Franzel007 8 600 20.12.2019 17:20
Letzter Beitrag: Franzel007
Lightbulb Internet Verbindung Mirkan 1 335 11.11.2019 09:39
Letzter Beitrag: hotsystems
  CAN BUS Shield / Lesen von Nachrichten Gary 0 384 13.10.2019 20:07
Letzter Beitrag: Gary
  Arduino Mega mit CAN-Shield Gary 5 588 09.10.2019 23:38
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste