Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


Sensor de aproximação com ESP32



Quer deixar sua casa inteligente usando apenas um ESP32 e um smartphone? E que tal, chegar em casa e a lâmpada da garagem acender? Ou o portão abrir? E se o ar condicionado ligar quando você se aproximar do quarto? Gostou da ideia? Pois, tudo isso é possível se programarmos um microcontrolador e ligarmos a ele alguns sensores. E, hoje, vou te mostrar como fazer tudo isso sem usar sensor nenhum e sem aplicativo para controlar. Confira!


Bom pessoal, a ideia aqui é programarmos o ESP32 para quando o smartphone - que deve estar com o hotspot ativado - chegar em uma distância que permita o reconhecimento da rede, então, vai ativar/desativar algum pino, podendo ser um relé, por exemplo, que é o caso de hoje.
Importante dizer que hoje em dia existem o iTag e o iBeacon que funcionam através de Bluetooth, mas o nosso projeto é por RF. Lembrando que existem vantagens e desvantagens para usar tanto o Bluetooth quanto o WiFi. Qual o melhor? É necessário analisar caso a caso. Esse exemplo que eu trago é bastante simples, já que minha intenção é te mostrar apenas conceito. Já, se você quiser colocar 50 detectores de posição, por exemplo, vamos dizer 50 ESPs, lógico que vai ser necessário melhorar o código fonte.


Demonstração

No nosso circuito, temos o ESP32 ligado ao nosso relé. Deixo o celular bem próximo e observo na tela do computador o valor do RSSI que está sendo colhido. O Led do relé acende quando estiver distante do celular.




WiFi NodeMCU-32S ESP-WROOM-32




Montagem




Programa

Vamos, portanto, fazer um programa no qual o ESP32 ficará escaneando as redes WiFi em seu alcance. Caso encontre a rede pré-definida (que será o hotspot do smartphone), ativará o pino que controla o relé. E, ao sair do alcance, o pino será desativado.



Bibliotecas e Variáveis

De início, mostro as opções para compilar bibliotecas tanto no ESP32 quanto no ESP8266. Defino o nome da rede WiFi que o microcontrolador vai buscar e o termo que vai expor se o relé está ligado ou desligado. Aponto ainda o pino que vai controlar o relé e o dB mínimo para identificar a rede.

#if defined(ESP8266)
#include <ESP8266WiFi.h> //ESP8266 Core WiFi Library 
#else
#include <WiFi.h> //ESP32 Core WiFi Library 
#endif

//nome da rede Wifi que o ESP irá buscar
const char* SSID = “Meu_Hotspot”;

#define RELAY_ON HIGH
#define RELAY_OFF LOW 

//pino do rele
#define RELAY 5
//dB minimo para identificar a rede
#define MINdB -40


Setup

Inicializo aqui a serial e o pino como saída.

void setup() {
 Serial.begin(115200);
 pinMode(RELAY, OUTPUT); // Inicializa o pino como saída.
}



Loop

No Loop, buscamos o RSSI da rede desejada. Verifico se o RSSI é maior que o mínimo desejado ou é diferente de zero, o que significa que encontramos a rede desejada. Ligamos, então, o relé. Caso, contrário, desligaremos.

void loop() {
  int32_t rssi = getRSSI(SSID); //busca o RSSI da rede desejada 

  // For debugging purpose only
  Serial.print("Signal strength: ");
  Serial.print(rssi);
  Serial.println("dBm");

  //se o RSSI for maior que o mínimo desejado e o RSSI é diferente de zero (ou seja, encontramos a rede desejada) 
  if (rssi > (MINdB) && rssi != 0) 
  {
    digitalWrite(RELAY, RELAY_ON); //liga o relé
    Serial.println("ON");
  }
  else 
  {
    digitalWrite(RELAY, RELAY_OFF); //desliga o relé
    Serial.println("OFF");
  }
}




getRSSI

Aqui temos a função getRSSI. Ela retorna o RSSI da rede buscada (caso não ache, retorna zero). Ela escaneia as redes e compara se alguma das encontradas é a que desejamos.

//retorna o RSSI da rede buscada (caso não ache, retorna zero)
int32_t getRSSI(const char* target_ssid) {
  byte available_networks = WiFi.scanNetworks(); //escaneia as redes

  for (int network = 0; network < available_networks; network++) {
//    Serial.print(WiFi.SSID(network)); Serial.print(" | "); Serial.println(WiFi.RSSI(network));
    if (WiFi.SSID(network).compareTo(target_ssid) == 0) { //compara se alguma das redes encontradas é a que desejamos  
      return WiFi.RSSI(network); //retorna o SSID da rede
    }
  }
  return 0;
}





Faça o download dos arquivos




Postar um comentário

1 Comentários

  1. Boa noite. comprei esse modelo serve para esse experimento? Módulo Relé Wi-fi Esp8266 V4.0 Com Esp-01

    ResponderExcluir