2
respostas

DetectorBLE

Copiei o código do DetectorBLE, conforme foi baixado. Tentei compilar, deu a seguinte mensagem de erro: Variáveis globais usam 54700 bytes (16%) de memória dinâmica, deixando 272980 bytes para variáveis locais. O máximo são 327680 bytes. Sketch muito grande; veja http://www.arduino.cc/en/Guide/Troubleshooting#size para dicas de como reduzi-lo. Erro compilando para a placa ESP32 Dev Module

2 respostas

E aí, Eduardo, tudo certo?

Então, dei uma olhada na mensagem de erro que apareceu e parece que teu código tá estourando a memória do ESP32 Dev Module. Tipo, as variáveis globais tão mamando 54.700 bytes de memória dinâmica, o que é uns 16% do espaço disponível. Mas o bagulho é que o tamanho total do teu código tá chegando bem perto do limite máximo, que é de 327.680 bytes.

Mas não se preocupa, a gente pode resolver isso! Dá uma sacada nas dicas aqui:

  1. Otimização de Código:

    • Dá uma revisada no código, veja se tem partes que dá pra simplificar.
    • Se der, usa estruturas de dados mais de boa e evita usar bibliotecas ou funções que não tão fazendo falta.
  2. Desativa Paradas Não Essenciais:

    • Se teu código tiver uns bagulhos que não são cruciais, desativa por enquanto pra diminuir o tamanho.
    • Tipo, se tiver uns debugs ou logs extensos, pode deixar eles de lado na compilação final.
  3. Divide o Código em Módulos:

    • Se teu código for grandinho, considera dividir em partes menores. Isso facilita a manutenção e alivia a memória.
    • Usa funções e classes de um jeito que fique mais organizado.
  4. Manda um F-Macros:

    • Usa F-macros pra guardar strings constantes na flash em vez de na RAM. É só jogar a macro F() quando for imprimir mensagens ou usar strings constantes.

Exemplo:

Serial.println(F("Mensagem na flash, economizando RAM"));

Essas dicas são mais genéricas, mas dependendo do que tu tem no código, pode ser que funcione. E se der, manda uns trechos do código pra eu dar uma olhada mais específica.

Segue o código, fornecido pelo professor, sem alteração: /* 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 */

// --- WIFI --- #include <WiFi.h>

const char* ssid = "laboratorio"; const char* password = "laboratorio01";

// --- Bluetooth --- #include <BLEDevice.h> #include <BLEUtils.h> #include <BLEScan.h> #include <BLEAdvertisedDevice.h>

int scanTime = 5; //In seconds int nivelRSSI = -78; String dispositivosAutorizados = "c2:6b:f6:62:fa:3f";

// --- Setup --- void setup() { Serial.begin(115200); conectaWifi(); Serial.println("Scanning..."); BLEDevice::init("");

}

// -- Funções Auxiliares ---

class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice advertisedDevice) { String dispositivosEncontrados = advertisedDevice.getAddress().toString().c_str(); if ( dispositivosEncontrados == dispositivosAutorizados && advertisedDevice.getRSSI() > nivelRSSI) { Serial.println("Identificador DETECTADO!"); Serial.print("RSSI: "); Serial.println(advertisedDevice.getRSSI()); }

  //Serial.printf("Advertised Device: %s \n", advertisedDevice.getAddress().toString().c_str());
}

};

// --- Scan Bluetooth LE --- void scanBLE(){ BLEScan* pBLEScan = BLEDevice::getScan(); //create new scan pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster BLEScanResults foundDevices = pBLEScan->start(scanTime); }

// --- Conecta ao WIFI ---

void conectaWifi(){ WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); }

void loop() { scanBLE(); delay(2000); }