Já pensou chegar em sua casa e simplesmente a porta principal se abrir e as luzes do ambiente que você está acenderem sem que você tenha que tocar em nada, apenas aproximando a sua pulseira smartband da sua placa ESP32? Pois bem, isso é possível através da tecnologia Beacon BLE (Bluetooth Low Energy)!
O projeto funcionará da seguinte maneira: quando a pulseira se aproxima do módulo ESP32 um sinal é enviado comparando o endereço Bluetooth. Caso este esteja cadastrado é possível acionar um pino do ESP32, ligando então uma lâmpada através do módulo relé ou abrindo uma porta através de uma solenoide. Gostou da ideia? Então se liga no que você vai precisar para fazer este projeto.
Material necessário
Neste projeto utilizaremos uma smartband e os seguintes componentes abaixo:
- Módulo WiFi ESP32 Bluetooth
- Cabo Micro USB
- Módulo Relé 5V 2 Canais
- Kit Jumpers 10cm x120 Unidades
- Fonte DC Chaveada 5V 2A Micro USB
Se desejar acionar uma porta, você pode adicionar ao seu projeto uma trava solenoide 127/220V.
Se desejar acionar uma lâmpada é só conectá-la ao seu circuito, você pode por exemplo conectar o relé em paralelo ao seu interruptor.
Caso deseje, a alimentação pode ser feita pelo cabo Micro USB (o mesmo cabo utilizado na programação do módulo WiFi ESP32) ou fonte DC chaveada 5V 2A Micro USB.
O que é Beacon?
Beacons são dispositivos de geolocalização, ou seja, é um sistema de proximidade. Sendo assim, o beacon permite que dispositivos sejam localizados de forma precisa.
Como o Beacon funciona?
O Beacon é um pequeno dispositivo que utiliza BLE (Bluetooth Low Energy). Ele emite um sinal intermitente de ondas de rádio e consegue localizar dispositivos que contenham BLE (smartphones, ESP32, Raspberry Pi e entre outros) em um determinado raio.
A vantagem do BLE é de consumir menos energia do dispositivo que o Bluetooth comum. Além disso, como as ondas emitidas são de 2,4 GHz, o alcance e a penetração nas estruturas, como concreto, é bem maior.
Neste projeto a smartband funcionará como um emissor de sinais, e o ESP32 como um receptor. O receptor, por sua vez, pode apenas guardar a informação que a conexão ocorreu, ou pode iniciar alguma ação. No nosso caso ocorrerá o acionamento da GPIO.
Quer saber mais sobre a tecnologia beacon BLE com ESP32 ? Dê uma olhada neste excelente post “Desenvolvendo um Beacon BLE com ESP32” do Pedro Bertoleti.
Setup necessário
É de grande importância, que você tenha a Arduino IDE instalado em sua máquina, de preferência a última versão disponível no site site oficial do Arduino. Depois, é necessário realizar a configuração da Arduino IDE para realizar o desenvolvimento com o ESP32. Veja abaixo:
Abra a Arduino IDE. Clique em Arquivo > Preferências.
No campo URLs Adicionais para Gerenciador de Placas digite https://dl.espressif.com/dl/package_esp32_index.json e depois clique em OK.
OBS: Se você já possui a URL de outras placas ESP, você pode separar as URLs com uma vírgula da seguinte forma:
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
Feito isso, clique em Ferramentas > Placa > Gerenciador de Placas…
Na caixa de busca, digite ESP32. Clique em Instalar.
Na Arduino IDE, vá em Ferramentas > Placa. E configure seu IDE Arduino conforme imagem abaixo:
Pronto! A IDE Arduino já está preparada para programar seu módulo WiFi ESP32.
Montagem do circuito
Observe o circuito esquemático abaixo que será usado no projeto “Conecte sua smartband ao módulo ESP32 através do Bluetooth”.
De acordo com o esquema abaixo, podemos verificar que o módulo relé de 2 canais são compostos por contatos de potência e comando. Ou seja, através dos pinos D32 e D33 da ESP32 enviaremos os sinais de comando ao módulo relé e, através do mesmo, iremos acionar a lâmpada e/ou a trava solenoide. O acionamento será feito pelos contatos de potência COMUM e NA.
OBS: É importante ressaltar que para este modo de ligação é necessário que a trava solenoide seja 127/220V.
Programando o Módulo WiFi ESP32
Lembrete: É necessário editar esses dois campos do código, segue abaixo:
// Insira aqui o nome que foi cadastrado no aplicativo miFit if (d.getName() == "myBand 4") { // Nas configurações de sua pulseira ache a opção bluetooth address if (deviceAddress == "XX:XX:XX:XX:XX:XX" && deviceRSSI > -60) {
O código-fonte do projeto pode ser visto abaixo.
Importante: leia atentamente os comentários para total compreensão do mesmo.
// Biblioteca bluetooth low energy #include <BLEDevice.h> #include <BLEUtils.h> #include <BLEScan.h> #include <BLEAdvertisedDevice.h> #define SCAN_TIME 1 BLEScan* pBLEScan; // String responsável por verificar e comparar o nome do dispositivo String deviceName; // String responsável por verificar e comparar o endereço do dispositivo String deviceAddress; // Váriavel signed int responsável por imprimir a potência do sinal em dB int16_t deviceRSSI; //Variável unsigned int responsável por fazer a contagem dos dispositivos encontrados uint16_t countDevice; // Relé reponsável pela trava conectado na GPIO 32 int travaPin = 32; // Relé responsável pela iluminação conectado na GPIO 33 int ilumPin = 33; // Variável responsável por deixar iluminacao ligada até que outra conexão seja realizada int pressed = 0; class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice advertisedDevice) { } }; void setup() { // Variáveis travaPin e ilumPin definidas como saída pinMode(travaPin, OUTPUT); pinMode(ilumPin, OUTPUT); // Porta serial configurada com taxa de transmissão de 115200 b/S Serial.begin(115200); delay(10); Serial.println(); Serial.println("APROXIME SUA SMARTBAND"); // Inicia comunicação BLE e realiza nova varredura BLEDevice::init(""); pBLEScan = BLEDevice::getScan(); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); pBLEScan->setInterval(100); pBLEScan->setWindow(99); } void loop() { // Inicia uma busca por dispositivos cadastrados BLEScanResults foundDevices = pBLEScan->start(SCAN_TIME); int count = foundDevices.getCount(); for (int i = 0; i < count; i++) { BLEAdvertisedDevice d = foundDevices.getDevice(i); // Compara o nome do dispositivo cadastrado // Insira aqui o nome que foi cadastrado no aplicativo miFit if (d.getName() == "myBand 4") { digitalWrite(travaPin, HIGH); char deviceBuffer[100]; deviceName = d.getName().c_str(); deviceAddress = d.getAddress().toString().c_str(); // Verifica a potência do sinal deviceRSSI = d.getRSSI(); // Compara e verifica o endereço cadastrado // Nas configurações de sua pulseira ache a opção bluetooth address // Ajuste da potência do sinal para -60dB if (deviceAddress == "XX:XX:XX:XX:XX:XX" && deviceRSSI > -60) { // Variável que garante mudança de estado do pino, somente quando houver uma nova conexão if (pressed == 0) { // Liga iluminação do ambiente desejado digitalWrite(ilumPin, LOW); pressed = 1; } else { pressed = 0; digitalWrite(ilumPin, HIGH); } // Aciona solenoide da trava da porta digitalWrite(travaPin, LOW); sprintf(deviceBuffer, "Name: %s| Address: %s| RSSI: %d\n", deviceName.c_str(), deviceAddress.c_str(), deviceRSSI); Serial.print(deviceBuffer); // Tempo predefinido para abrir a porta delay(2000); } } } pBLEScan->clearResults(); }
Por fim, carregue o código (esse processo pode levar algum tempo).
OBS: No momento em que o ESP32 estiver em processo de compilação é necessário apertar o botão BOOT.
Resultado
É possível visualizar os módulos relés comutando indicando que o ESP32 executou corretamente a leitura do bluetooth address, conforme o vídeo abaixo:
Gostou do post “Conecte sua smartband ao módulo ESP32 através do Bluetooth”? Deixe seu comentário logo abaixo.
Até a Próxima!
Olá, quero fazer um projeto desse com 3 endereço Bluetooth, e que só aciona o relé pela proximidade do mesmo, e desliga o relé quando afastado..
tenho que alterar oq nesse código pra conseguir isso ?
Olá Daniel,
Você pode postar sua ideia na nossa comunidade no facebook, lá o pessoal deve conseguir te ajudar com esse projeto.
Abraços!
Vinícius – Equipe MakerHero
Funciona com qualquer Miband?
Olá Filipe, eu fiz o teste com a myBand IV e funcionou perfeitamente.
Não se esqueça de alterar os campos destacados na programação.
if (d.getName() == “myBand 4”)
if (deviceAddress == “XX:XX:XX:XX:XX:XX” && deviceRSSI > -60)
Qualquer dúvida estou a disposição!