Ir ao conteúdo

Outro erro de memória insuficiente esp32


Ir à solução Resolvido por Adriano carlos,

Posts recomendados

Postado

estou tentando implementar o seguinte:  o esp32 vai se conectar no wifi para fazer as verificações do Beacon ID, quando enviar faz uma requisição na WEB mas caso não tenha WIFI conectado, ele cria um servidor web HTTP para configurar o WIFI sem mexer no código, aqui esá o código que estou usando:

#include <WiFi.h>

#include <BLEDevice.h>

#include <Preferences.h>

#include <HTTPClient.h>

#define API_URL "http://192.168.77.137/testes/verificarVeiculo/index.php"

#define PINO_TRIG 18

#define PINO_ECHO 5

#define BOTAO_PIN 32

//#define BOTAO_PIN2 25

#define PLACA_PIN 27

#define DISTANCIA_FECHAMENTO 400

#define CONFIRMACOES_FECHAMENTO 3

#define TEMPO_ABERTURA 35000

#define TEMPO_PASSAGEM 30000

#define IBEACON_TIMEOUT 5000

#define RECONNECT_INTERVAL 15000

int leiturasAcimaDoLimite = 0;

bool gateOpen = false;

bool closingGate = false;

bool uuidRecentementeDetectado = false;

unsigned long currentMillis = 0;

unsigned long tempoAguardo = 0;

unsigned long tempoAbertura = 0;

BLEScan* pBLEScan;

Preferences preferences;

String ssid, password;

const char* defaultSSID = "Gerencia_2G";

const char* defaultPassword = "pro!1185";

IPAddress apIP(192, 168, 4, 1);

IPAddress netMsk(255, 255, 255, 0);

 

void saveToPreferences(const char* key, String& value) {

    preferences.begin("sensor", false);

    preferences.putString(key, value);

    preferences.end();

}

String loadFromPreferences(const char* key, const char* defaultValue = "") {

    preferences.begin("sensor", true);

    String value = preferences.getString(key, defaultValue);

    preferences.end();

    return value;

}

void setupWiFi() {

    ssid = loadFromPreferences("ssid", defaultSSID);

    password = loadFromPreferences("password", defaultPassword);

    WiFi.begin(ssid.c_str(), password.c_str());

    unsigned long startAttemptTime = millis();

    while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) {

        delay(500);

    }

    if (WiFi.status() != WL_CONNECTED) {

        WiFi.softAPConfig(apIP, apIP, netMsk);

        WiFi.softAP("Configurar_Sensor", "12345678");

    }

    Serial.println(WiFi.status() == WL_CONNECTED ? "Conectado ao Wi-Fi." : "Falha na conexão Wi-Fi.");

}

bool verificarUUID(const char* uuid) {

    HTTPClient http;

    http.begin(API_URL);

    http.addHeader("Content-Type", "application/x-www-form-urlencoded");

    String postData = "uuid=" + String(uuid);

    bool autorizado = (http.POST(postData) == HTTP_CODE_OK) && (http.getString() == "1");

    http.end();

    return autorizado;

}

float measureDistance() {

    digitalWrite(PINO_TRIG, LOW);

    delayMicroseconds(2);

    digitalWrite(PINO_TRIG, HIGH);

    delayMicroseconds(10);

    digitalWrite(PINO_TRIG, LOW);

    long duracao = pulseIn(PINO_ECHO, HIGH, 30000);

    return (duracao == 0) ? -1 : (duracao * 0.0343) / 2.0;

}

class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {

    void onResult(BLEAdvertisedDevice advertisedDevice) {

        if (advertisedDevice.haveManufacturerData()) {

            String manufacturerData = advertisedDevice.getManufacturerData();

            if (manufacturerData.length() >= 22) {

                char uuid[33];

                for (int i = 4; i < 20; i++) {

                    sprintf(&uuid[(i - 4) * 2], "%02X", (uint8_t)manufacturerData[i]);

                }

                uuid[32] = '\0';

                uuidRecentementeDetectado = verificarUUID(uuid);

                if (uuidRecentementeDetectado && !gateOpen) {

                    openGate();

                    gateOpen = true;

                    tempoAbertura = millis() + TEMPO_ABERTURA;

                }

            }

        }

    }

};

void setup() {

    Serial.begin(115200);

    pinMode(PINO_TRIG, OUTPUT);

    pinMode(PINO_ECHO, INPUT);

    pinMode(BOTAO_PIN, OUTPUT);

    //pinMode(BOTAO_PIN2, OUTPUT);

    pinMode(PLACA_PIN, OUTPUT);

    digitalWrite(BOTAO_PIN, LOW);

    //digitalWrite(BOTAO_PIN2, LOW);

    digitalWrite(PLACA_PIN, LOW);

    setupWiFi();

    if (WiFi.status() == WL_CONNECTED) {

        BLEDevice::init("");

        pBLEScan = BLEDevice::getScan();

        pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());

        pBLEScan->setActiveScan(true);

    }

}

 

void loop() {

    if (WiFi.status() != WL_CONNECTED && millis() - currentMillis > RECONNECT_INTERVAL) {

        setupWiFi();

    }

 

    if (WiFi.status() == WL_CONNECTED) {

        pBLEScan->start(5, false);

        currentMillis = millis();

        if (gateOpen && currentMillis >= tempoAbertura) {

            if (tempoAguardo == 0) {

                tempoAguardo = millis() + TEMPO_PASSAGEM;

            }

            if (currentMillis >= tempoAguardo) {

                uuidRecentementeDetectado = false;

                unsigned long timeoutInicio = millis();

                while (millis() - timeoutInicio < IBEACON_TIMEOUT) {

                    pBLEScan->start(5, false);

                    delay(2000);

                    if (uuidRecentementeDetectado) {

                        tempoAguardo = millis() + TEMPO_PASSAGEM;

                        break;

                    }

                }

                float distanciaSensor = measureDistance();

                if (distanciaSensor >= DISTANCIA_FECHAMENTO) {

                    leiturasAcimaDoLimite++;

                    if (leiturasAcimaDoLimite >= CONFIRMACOES_FECHAMENTO) {

                        closeGate();

                    }

                } else {

                    leiturasAcimaDoLimite = 0;

                }

            }

        }

    }

}

 

void openGate() {

    digitalWrite(PLACA_PIN, HIGH);

    digitalWrite(BOTAO_PIN, HIGH);

    //digitalWrite(BOTAO_PIN2, HIGH);

    delay(500);

    digitalWrite(BOTAO_PIN, LOW);

    //digitalWrite(BOTAO_PIN2, LOW);

    digitalWrite(PLACA_PIN, LOW);

}

 

void closeGate() {

    digitalWrite(PLACA_PIN, HIGH);

    unsigned long tempoFechamentoInicio = millis();

    bool interromperFechamento = false;

    while (millis() - tempoFechamentoInicio < 9000) {

        pBLEScan->start(5, false);

        delay(2000);

        if (uuidRecentementeDetectado) {

            leiturasAcimaDoLimite = 0;

            interromperFechamento = true;

            break;

        }

    }

    digitalWrite(PLACA_PIN, LOW);

    digitalWrite(BOTAO_PIN, LOW);

    //digitalWrite(BOTAO_PIN2, LOW);

    gateOpen = !interromperFechamento;

    closingGate = false;

}

  • Solução
Postado

caso alguém esteja passando pelo menos problema de usar o WIFI e BLUETOOHT BLE ao mesmo tempo em uma ESP32 e não esteja conseguindo, procure a configuração na sua IDE, no meu caso usei a ARDUINO IDE fui em Ferramentas > Partion Scheme > No OTA (2MB APP / 2MB SPIFFS).

Por padrão vem na opção: Default 4MB with spiffs (1.2MB APP / 1.5MB SPIFFS)

Só alterar para: No OTA (2MB APP / 2MB SPIFFS)

Resolvido jovens👍

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!