Imagem-BANNER-DESTAQUE-BLOG- conecte sua smartband ao módulo ESP32 através do bluetooth

Conecte sua smartband ao módulo ESP32 através do Bluetooth 2

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)!

ESP32 e o Bluetooth

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:

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.

Preferências Arduino IDE

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:

Configuração ESP32

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 solenoideO acionamento será feito pelos contatos de potência COMUM e NA.

Circuito para ESP32 e Smartband

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!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

2 Comentários

  1. Funciona com qualquer Miband?

    1. 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!