esp32 wifi en bleutooth en meme temps

Bonjour,
j’ai modifié un programme pour avoir une détection de présence Bluetooth et envoyer le résultat via wifi vers mon serveur domotique ( Domoticz) mais je me suis rendu compte que j’utilise trop de mémoire 93% uniquement pour la partie détection Bluetooth et du coup je ne peux pas ajouter le wifi.
cela m’étonne un peu quand même.

Si quelqu’un a une solution je suis preneur.

Voici mon code sans la partie wifi:

/*
   Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
   Ported to Arduino ESP32 by Evandro Copercini
*/
//#include <WiFi.h>
//#include <PubSubClient.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
static BLEAddress *pServerAddress;
int scanTime = 60; //In seconds
#define LED 22
BLEScan* pBLEScan;
BLEClient*  pClient;






bool deviceFound1 = false;
bool deviceFound2 = false;
bool deviceFound3 = false;



String knownAddresses[] = { "xx:xx:xx:xx:xx:xx", "xx:xx:xx:xx:xx:xx","xx:xx:xx:xx:xx:xx"};













class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      pServerAddress = new BLEAddress(advertisedDevice.getAddress());

      bool presencemoi = false;
      bool presencejennie  = false;
      bool presencetheo = false;
      
      
        if (strcmp(pServerAddress->toString().c_str(), knownAddresses[0].c_str()) == 0) presencemoi = true;
        if (strcmp(pServerAddress->toString().c_str(), knownAddresses[1].c_str()) == 0) presencejennie = true;
        if (strcmp(pServerAddress->toString().c_str(), knownAddresses[2].c_str()) == 0) presencetheo = true;
        
       
      if (presencemoi) {
        
        Serial.println(advertisedDevice.getRSSI());
        if (advertisedDevice.getRSSI() > -96) deviceFound1 = true;
        else deviceFound1 = false;
        Serial.println(pServerAddress->toString().c_str());
        advertisedDevice.getScan()->stop();
      }
      if (presencejennie) {
        Serial.println(advertisedDevice.getRSSI());
        if (advertisedDevice.getRSSI() > -96) deviceFound2 = true;
        else deviceFound2 = false;
        Serial.println(pServerAddress->toString().c_str());
        advertisedDevice.getScan()->stop();
      }
       if (presencetheo) {
        Serial.println(advertisedDevice.getRSSI());
        if (advertisedDevice.getRSSI() > -96) deviceFound3 = true;
        else deviceFound3 = false;
        Serial.println(pServerAddress->toString().c_str());
        advertisedDevice.getScan()->stop();
      }




      

      
    }
    
};

void setup() {
  Serial.begin(115200);
  
  BLEDevice::init("");
  
  Serial.begin(115200);
  Serial.println("Starting Arduino BLE Client application...");
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);

  pClient  = BLEDevice::createClient();
  Serial.println(" - Created client");
  pBLEScan = BLEDevice::getScan();
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true);
   



 
}

void loop() {

  Serial.println();
  //Serial.println("BLE Scan restarted.....");
 deviceFound1 = false;
 deviceFound2 = false;
 deviceFound3 = false;


 
  BLEScanResults scanResults = pBLEScan->start(10); 
  if (deviceFound1) {
    Serial.println("presence moi");
    digitalWrite(LED, LOW);
     Serial.println("Waiting for 10 seconds");
    delay(10000);

  }
  else {
   Serial.println("absence moi");
    digitalWrite(LED, HIGH);
  }

if (deviceFound2) {
    Serial.println("presence jennie");
    digitalWrite(LED, LOW);
     Serial.println("Waiting for 10 seconds");
    delay(10000);

  }
  else {
   Serial.println("absence jennie");
    digitalWrite(LED, HIGH);
  }

if (deviceFound3) {
    Serial.println("presence theo");
    digitalWrite(LED, LOW);
     Serial.println("Waiting for 10 seconds");
    delay(10000);

  }
  else {
   Serial.println("absence theo");
    digitalWrite(LED, HIGH);
  }

 
  
}

Bonjour

solution pour augmenter la part de la mémoire Flash dédiée au code : oui
solution pour une cohabitation sans pb du WiFI et du BT..... attendre que des bugs soient résolus par Espressif

-dans deux fils de discussions récents (avril/mai) j'ai démontré la possibilité de modifier le partitionnement d'un ESP32 pour augmenter fortement (jusqu'à x2) la taille du code. J'ai testé et proposé deux fichiers de partitionnement alternatifs pour l'ESP32 sous IDE Arduino

-d'autres fils tout aussi récents évoquent la difficulté du fonctionnement simultané de WiFi et Bluetooth dans l'état actuel de l'IDF d'Espressif et , par conséquent dans le noyau ESP32 pour Arduino.

NB Il semble que dans l'application envisagée il soit possible d'alterner BT et WiFi, dans ce cas pas de pb de cohabitation, il suffit de switcher les radios !!

Faire une recherche dans ce forum pour retrouver les échanges (loupe en haut à droite)

Merci beaucoup, éffectivement c’est mieux avec un peu plus de place !!!