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);
}
}