• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ESP 32 BLE - odczyt danych z dwóch urządzeń
#1
Question 
Witam,

Za pomocą poniższego kodu łączę się z licznikami energii w zależności od podanego adresu MAC.
Kod:
#include "BLEDevice.h"

static BLEUUID srvUUID("0000ffe0-0000-1000-8000-00805f9b34fb");
static BLEUUID chrUUID("0000FFE1-0000-1000-8000-00805F9B34FB");
String BLE_Address1 = "47:71:f7:a7:25:93"; // adresy MAC
String BLE_Address2 = "47:71:f7:a7:14:f2";
static BLEAddress *Server_BLE_Address;
static BLEAdvertisedDevice* scale;
static BLERemoteCharacteristic* remoteChr;
static boolean doConnect = false;
static boolean connected = false;
static int year = 0;

static void chrCB(BLERemoteCharacteristic* remoteChr, uint8_t* pData, size_t length, bool isNotify) {
   
double spr = 0;   
spr  = (pData[0]);
if (spr == 255) {
   
  Serial.print("Data bytes: ");
  for(int i =0; i< length; i++){
      Serial.print(pData[i]);
      Serial.print("  ");
    }
    Serial.println(" ");
    
double dana1 = 0;
dana1 = (((pData[5]*256) + pData[6]+ pData[7]) ) ;
dana1 = dana1/10;
double dana2 = 0;
dana2  = (((pData[8]*256) + pData[9]+ pData[10]) ) ;
dana2 = dana2/1000;
double dana3 = 0;
    dana3  = (((pData[11]*256) + pData[12]+ pData[13]) ) ;
    dana3 = dana3/10;
Serial.println("Wartości pobrane: ");
Serial.print(" - ");
Serial.print("Napięcie : ");
    Serial.println(dana1,1);
    Serial.print(" - ");
    Serial.print("Natężenie : ");
//Serial.print("dana2: ");
    Serial.println(dana2,3);
    Serial.print(" - ");
    Serial.print("Moc : ");
//Serial.print("dana3: ");
    Serial.println(dana3,1);
    Serial.println(" ... ");

}

class deviceCB: public BLEAdvertisedDeviceCallbacks {
 
  void onResult(BLEAdvertisedDevice advertisedDevice) {
   
if (advertisedDevice.haveServiceUUID() && advertisedDevice.isAdvertisingService(srvUUID)) {
     String adres = (advertisedDevice.getAddress().toString().c_str());
      if((advertisedDevice.getName() == "AT24CB-BLE") && (adres == BLE_Address1)){
       Serial.println("  Wykryto");
        BLEDevice::getScan()->stop();
        Serial.print("Zatrzymano skanowanie i podłączono do AT24CB-BLE: ");
        Serial.println(adres);
        scale = new BLEAdvertisedDevice(advertisedDevice);
        doConnect = true; 
      } else {
        Serial.print(".");
      }
    } else {
      Serial.print(".");
    }
  }
};

class ClientCB : public BLEClientCallbacks {
  void onConnect(BLEClient* pclient) {
  }
  void onDisconnect(BLEClient* pclient) {
    Serial.println("Disconnected. Reconnecting...");
    connected = false;
  }
};
bool connectToScale() {
    Serial.println("Stablishing communications with scale:");
    BLEClient*  pClient  = BLEDevice::createClient();
    Serial.println("    BLE client created");
    pClient->setClientCallbacks(new ClientCB());
    pClient->connect(scale);
    Serial.println("    Connected to scale");
    BLERemoteService* pRemoteService = pClient->getService(srvUUID);
    if (pRemoteService == nullptr) {
      Serial.println("    Error: Failed to find service");
      pClient->disconnect();
      return false;
    }
    Serial.println("    Service found");
    remoteChr = pRemoteService->getCharacteristic(chrUUID);
    if (remoteChr == nullptr) {
      Serial.print("    Failed to find characteristic");
      pClient->disconnect();
      return false;
    }
    Serial.println("    Characteristic found");
    Serial.println("    Setting callback for notify / indicate");
    remoteChr->registerForNotify(chrCB);
    return true;
}
void setup() {
  Serial.begin(115200);
  Serial.println("Searching for AT24CB-BLE device");

  delay(1000);
  BLEDevice::init("");
  BLEScan* pBLEScan = BLEDevice::getScan();
  pBLEScan->setAdvertisedDeviceCallbacks(new deviceCB());
  pBLEScan->setInterval(1349);
  pBLEScan->setWindow(449);
  pBLEScan->setActiveScan(true);
  pBLEScan->start(5, false);
}
void loop() {
  if(doConnect && !connected){
    connected = connectToScale();
  }
  delay(1000);
}
Łączę się bez problemu po zmianie 

Cytat:BLE_Address1 na BLE_Address2
w tym miejscu

Kod:
if((advertisedDevice.getName() == "AT24CB-BLE") && (adres == BLE_Address1)){
Nie wiem jak połączyć się z dwoma licznikami i otrzymać z nich dane.
Z góry dziękuję za podpowiedź.
 
Odpowiedź
  


Wiadomości w tym wątku
ESP 32 BLE - odczyt danych z dwóch urządzeń - przez globalinfo - 12-03-2021, 12:22

Skocz do:


Przeglądający: 1 gości