Ir ao conteúdo

Adriano carlos

Membro Júnior
  • Posts

    14
  • Cadastrado em

  • Última visita

Tudo que Adriano carlos postou

  1. Queria ler dispositivos bluetooth low energy próximos, tenho o modulo JDY-24M que envia sinais BLE a cada meio segundo (500ms) e queria poder detecta-los, mas não estou tendo sucesso. Código que estou usando: #include <BLEDevice.h> #include <BLEScan.h> #include <BLEAdvertisedDevice.h> int scanTime = 1; class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice advertisedDevice) { String deviceName = advertisedDevice.getName().c_str(); int rssi = advertisedDevice.getRSSI(); String uuid = String(advertisedDevice.getServiceUUID().toString().c_str()); Serial.println("Dispositivo detectado:"); Serial.printf("Nome: %s, RSSI: %d, UUID: %s\n", deviceName.c_str(), rssi, uuid.c_str()); } }; void setup() { Serial.begin(115200); BLEDevice::init(""); BLEScan* pBLEScan = BLEDevice::getScan(); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(false); pBLEScan->start(scanTime, false); } void loop() { BLEScan* pBLEScan = BLEDevice::getScan(); pBLEScan->start(scanTime, false); } nota: ja alterei a linha pBLEScan->setActiveScan(false); de true para false e nada funciona, o ESP32 detecta doutros dispositivos, mas esse em especifico (JDY-24M) ele não detecta ou detecta de muito próximo
  2. 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
  3. 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; }
  4. obrigado, mas já resolvi, era apenas conectar o positivo e negativo no botão, ainda estou aprendendo
  5. tenho uma placa de controle que abre o portão da minha garagem, e estou automatizando o sistema para quando meu carro chegar próximo ao portão ele abrir automaticamente, via bluetooth BLE, o sistema está quase todo feito, já tenho o módulo BLE dentro do meu carro, mas a questão agora é que a ESP32 não está abrindo o portão o portão abre normalmente quando eu clico no botão, mas quando mando a ESP32 simular o pressionamento do botão, o portão não abre, mas a ESP32 envia sinais corretamente utilizei: dois transistores BC457, dois resistores de 470 ohms e a placa do controle remoto que abre o portão e fiz as seguintes conexões: GND do ESP32 => Transistor1 (Emissor) D32 do ESP32 => Resistor de 470 ohms => Transistor1 (Base) Transistor1 (Coletor) => Negativo do botão na placa do Controle GND do ESP32 => Transistor2 (Emissor) D27 do ESP32 => Resistor de 470 ohms => Transistor2 (Base) Transistor2 (Coletor) => Positivo da placa do Controle GND do ESP32 => Negativo da placa do Controle mas não está funcionando
  6. @.if código que estou usando como base: #include <BLEDevice.h> #include <BLEScan.h> #include <BLEAdvertisedDevice.h> int scanTime = 10; // Tempo de escaneamento em segundos const int TX_POWER = -70; // TxPower esperado do iBeacon (geralmente entre -59 e -65 dBm a 1 metro) const float ENV_FACTOR = 3.0; // Fator ambiental (3.0 para ambientes fechados) #define RSSI_SAMPLE_COUNT 5 // Número de leituras para calcular a média int rssiSamples[RSSI_SAMPLE_COUNT] = {0}; int sampleIndex = 0; bool bufferFull = false; float calculateDistance(int rssi) { return pow(10, (TX_POWER - rssi) / (10.0 * ENV_FACTOR)); } 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'; int rssi = advertisedDevice.getRSSI(); // Obtém o RSSI do iBeacon // Armazena RSSI na lista para média rssiSamples[sampleIndex] = rssi; sampleIndex = (sampleIndex + 1) % RSSI_SAMPLE_COUNT; if (sampleIndex == 0) bufferFull = true; if (bufferFull) { // Calcula média do RSSI quando já tiver 5 leituras int sum = 0; for (int i = 0; i < RSSI_SAMPLE_COUNT; i++) { sum += rssiSamples[i]; } float avgRSSI = (float)sum / RSSI_SAMPLE_COUNT; float distance = calculateDistance(avgRSSI); // Exibe a distância estimada se estiver dentro de 5 metros if (distance <= 5.0) { Serial.print("UUID: "); Serial.print(uuid); Serial.print(" | RSSI Médio: "); Serial.print(avgRSSI); Serial.print(" dBm | Distância estimada: "); Serial.print(distance, 2); Serial.println(" metros"); } } } } } }; void setup() { Serial.begin(115200); BLEDevice::init(""); BLEScan* pBLEScan = BLEDevice::getScan(); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); pBLEScan->start(scanTime, false); } void loop() { BLEDevice::getScan()->start(scanTime, false); } Quero ler uma distância de 5 metros ou menos, nos meus testes, em ambientes fechados, ocorreram esses retornos: UUID: 6F00F1F670C144329902876A9FC9EE8A | RSSI Médio: -68.40 dBm | Distância estimada: 0.86 metros UUID: 01062000F38F020900E928815558C7F4 | RSSI Médio: -70.00 dBm | Distância estimada: 1.00 metros UUID: 01062000F38F020900E928815558C7F4 | RSSI Médio: -71.60 dBm | Distância estimada: 1.08 metros UUID: 6F00F1F670C144329902876A9FC9EE8A | RSSI Médio: -69.40 dBm | Distância estimada: 0.93 metros Apenas o UUID 6F00F1F670C144329902876A9FC9EE8A importa, ele está a pouco mais de 1 metro de distância da ESP32, fiz um código para ler tanto longa distância (5 metros) quanto curta distância (1 metro ou menos)
  7. Estou tentando detectar o sinal bluetooth low energy da minha placa JDY-24M com o ESP32 e por meio desse sinal identificar a distância do sinal, pois pretendo fazer um portão automático. Então o esquema seria: quando chegar próximo ao portão o ESP32 detecta o sinal iBeacon do JDY-24M que já está configurado e por meio de uma API verifica se está autorizado a entrar, se sim, abre o portão. Mas até agora não consegui sucesso no código, já tenho todo o círcuito montado, falta apenas o código.
  8. posso fazer as seguintes conexões: vcc para 3.3v gnd para gnd trig para pino 18 echo para pino 5 diretamente sem usar resistores ou reguladores de tensão?
  9. Estou tentanto montar um círuito que conecte as peças ESP32 e SIM808, dando uma pesquisada rápida descobri que o ESP32 funciona na tensão 3.3V e o SIM808 em 5V então vou precisar de um conversor de nível, achei um de 12 pinos, para a comunicação entre o ESP32 e o SIM808, mas a fonte a qual irei conectar este circuito é uma fonte de 12V, novamente pesquisei na internet e vi que vou precisar de um conversor dc-dc e encontrei o XL6019, a questão agora é como conectar todos os pinos? sou um pouco novo na área e estou precisando de ajuda com este projeto, para conectar as peças; o XL6019, o ESP32, o SIM808 e o conversor de nível. Desde já eu agradeço.
  10. a placa-mãe tem formato micro atx e a fonte tem o formato da PSU ATX, não sei se tem alguma coisa haver mas queria saber se são compativeis ou não
  11. Athlon 300ge e Athlon 320ge tem alguma diferença? não encontro vídeos mostrando quais jogos rodam no 300ge, os dois estão com preços bons e não sei qual pegar ou se tem alguma diferença entre eles
  12. vi um pc na pichau e queria saber se da pra confiar, as conf são: 8gb (1x8) a320mh SSD 256gb Cooler Master Hyper T20 90mm Preto, RR-T20-20FK-R1
  13. @Danimar 96 obrigado pela informaçao amigo mas, tem uma configuração de um pc na pichau que tem ela como uma das opções para escolher e acrescenta apenas 105,00 no total do produto, o que ja ajuda em muito pois a fonte padrão é uma de 400w e to com medo que nao seja o suficiente, a conf é essa: RYZEN 5 2400G, 8GB DDR4, SSD 256GB, 400W, placa-mãe Biostar A320MH DDR4 Socket AM4 Chipset AMD A320 e pretendo fazer futuros upgrades
  14. Fonte Pichau Gaming Nidus 500W Bronze 80 Plus, PG-5001-BR tem PFC ativo?

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

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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!