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
1 Comentários
Boa noite. comprei esse modelo serve para esse experimento? Módulo Relé Wi-fi Esp8266 V4.0 Com Esp-01
ResponderExcluir