Desenvolvendo Aplicações com Bluetooth Low Energy (BLE) no ESP32
Marcelo V. Souza
1s 65ms
O ESP32 é um microcontrolador poderoso e versátil que tem se tornado cada vez mais popular em projetos de automação e Internet das Coisas (IoT). Uma de suas funcionalidades mais interessantes é a capacidade de se comunicar via Bluetooth Low Energy (BLE), uma versão aprimorada do Bluetooth tradicional, voltada para dispositivos de baixa energia e que requerem comunicação eficiente.
Neste artigo, vamos explorar em detalhes como desenvolver aplicações utilizando o BLE no ESP32. Abordaremos desde os conceitos básicos do BLE, passando pela configuração do ambiente de desenvolvimento, até a implementação prática de uma aplicação que permite a comunicação entre o ESP32 e um dispositivo móvel.
O que é Bluetooth Low Energy (BLE)?🔗
O Bluetooth Low Energy é uma tecnologia de comunicação sem fio projetada para aplicações que exigem baixo consumo de energia e comunicação eficiente em curtas distâncias. Diferentemente do Bluetooth Clássico, o BLE foi desenvolvido para operar em modos de baixa potência, permitindo que dispositivos funcionem por longos períodos utilizando pequenas fontes de energia, como baterias de moeda.
Algumas características do BLE:
- Baixo consumo de energia: Ideal para dispositivos que precisam permanecer conectados por longos períodos sem a necessidade de recargas frequentes.
- Comunicação rápida: Permite a transferência de dados de forma eficiente, embora com taxa de transferência menor comparada ao Bluetooth Clássico.
- Conexão simplificada: Utiliza um modelo de comunicação baseado em pacotes pequenos, facilitando a implementação em dispositivos com recursos limitados.
Conceitos Básicos do BLE no ESP32🔗
Antes de começarmos a codificar, é importante entender alguns conceitos fundamentais do BLE:
- GATT (Generic Attribute Profile): É a arquitetura que define como os dados são comunicados entre dispositivos BLE. Ele organiza os dados em serviços e características.
- Serviços: Conjunto de características relacionadas. Por exemplo, um serviço de batimentos cardíacos pode agregar diversas características relacionadas ao monitoramento cardíaco.
- Características: São as menores unidades de dados no BLE, contendo informações específicas como temperatura, umidade, etc.
No contexto do ESP32, podemos configurar o dispositivo para atuar como periférico (servidor) ou central (cliente):
- Periférico (Servidor): Anuncia suas presenças e disponibiliza serviços para que dispositivos interessados possam se conectar e interagir.
- Central (Cliente): Procura por periféricos disponíveis e se conecta a eles para acessar seus serviços e características.
Configurando o Ambiente de Desenvolvimento🔗
Para desenvolver aplicações BLE no ESP32, utilizaremos o Arduino IDE, uma plataforma amigável e bastante utilizada por iniciantes e profissionais.
Passo 1: Instalar o Arduino IDE
Se ainda não possui o Arduino IDE instalado:
1. Acesse o site oficial: arduino.cc
2. Faça o download da versão compatível com o seu sistema operacional.
3. Siga as instruções de instalação.
Passo 2: Configurar o Suporte ao ESP32
1. Abra o Arduino IDE.
2. Vá em Arquivo > Preferências.
3. No campo URLs Adicionais para Gerenciadores de Placas, adicione:
https://dl.espressif.com/dl/package_esp32_index.json
4. Clique em OK.
Passo 3: Instalar as Bibliotecas e Placas ESP32
1. Vá em Ferramentas > Placa > Gerenciador de Placas.
2. Pesquise por ESP32.
3. Selecione esp32 by Espressif Systems e clique em Instalar.
4. Aguarde a conclusão da instalação.
Criando a Primeira Aplicação BLE no ESP32🔗
Vamos desenvolver uma aplicação simples onde o ESP32 atua como um periférico BLE, transmitindo dados de temperatura simulados para um aplicativo móvel.
Passo 1: Importar as Bibliotecas Necessárias
No início do código, precisamos incluir as bibliotecas que permitirão o uso do BLE:
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
Passo 2: Definir os Identificadores (UUIDs)
Os UUIDs são identificadores únicos que distinguem serviços e características no BLE.
#define SERVICE_UUID "12345678-1234-1234-1234-1234567890ab"
#define CHARACTERISTIC_UUID "abcdefab-1234-5678-1234-abcdefabcdef"
Passo 3: Criar a Classe do Servidor BLE
Precisamos definir callbacks para monitorar as conexões:
bool deviceConnected = false;
class MyServerCallbacks: public BLEServerCallbacks
{
void onConnect(BLEServer* pServer)
{
deviceConnected = true;
}
void onDisconnect(BLEServer* pServer)
{
deviceConnected = false;
}
};
Passo 4: Configurar o Setup do ESP32
No método setup()
, iniciamos o dispositivo BLE e configuramos o serviço e a característica:
void setup()
{
Serial.begin(115200);
// Inicializa o dispositivo BLE
BLEDevice::init("ESP32 BLE");
// Cria o servidor BLE
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Cria o serviço BLE
BLEService *pService = pServer->createService(SERVICE_UUID);
// Cria a característica BLE
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_NOTIFY
);
pCharacteristic->addDescriptor(new BLE2902());
// Inicia o serviço
pService->start();
// Inicia a publicidade BLE
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->start();
}
Passo 5: Implementar o Loop Principal
No método loop()
, simularemos a leitura de uma temperatura e a enviaremos para o dispositivo conectado:
void loop()
{
if (deviceConnected)
{
// Simula a leitura de temperatura
float temperature = random(20, 30) + random(0, 100) / 100.0;
// Converte o valor para string
char tempString[8];
dtostrf(temperature, 6, 2, tempString);
// Envia a temperatura via BLE
pCharacteristic->setValue(tempString);
pCharacteristic->notify();
Serial.print("Temperatura enviada: ");
Serial.println(tempString);
}
delay(1000);
}
Passo 6: Compilar e Carregar o Código
1. Conecte o ESP32 ao computador via USB.
2. Selecione a placa correta em Ferramentas > Placa > ESP32 Arduino > ESP32 Dev Module.
3. Selecione a porta correta em Ferramentas > Porta.
4. Clique em Carregar e aguarde a conclusão.
Para verificar se o ESP32 está transmitindo os dados corretamente, podemos utilizar um aplicativo de smartphone que permita visualizar características BLE.
Utilizando o Aplicativo nRF Connect
1. Baixe o nRF Connect na loja de aplicativos do seu celular.
2. Abra o aplicativo e escaneie os dispositivos BLE próximos.
3. Localize o dispositivo ESP32 BLE e conecte-se a ele.
4. Navegue até o serviço com o UUID definido e visualize a característica.
5. Ative as notificações para receber os dados de temperatura em tempo real.
Entendendo o Código em Detalhes🔗
Vamos examinar alguns pontos importantes do código desenvolvido.
Inicialização do Dispositivo BLE
BLEDevice::init("ESP32 BLE");
Este comando inicia o dispositivo BLE e define o nome que será exibido durante a publicidade.
Criação do Servidor BLE e Callbacks
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
Aqui, criamos um servidor BLE e associamos callbacks para monitorar eventos de conexão e desconexão.
Configuração do Serviço e Característica
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_NOTIFY
);
pCharacteristic->addDescriptor(new BLE2902());
Criamos um serviço com o UUID definido e uma característica que possui a propriedade de notificação. O BLE2902 é um descritor padrão que permite habilitar notificações no cliente.
Iniciando a Publicidade
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->start();
Após iniciar o serviço, iniciamos a publicidade para que dispositivos possam encontrar e se conectar ao ESP32.
Enviando Dados via Notificações
pCharacteristic->setValue(tempString);
pCharacteristic->notify();
Atualizamos o valor da característica e enviamos uma notificação para o dispositivo conectado, permitindo que ele receba os dados em tempo real.
Dicas e Boas Práticas🔗
- Gerenciamento de Energia: O BLE é eficiente em termos de energia, mas é importante gerenciar os ciclos de transmissão e reduzir a frequência de envio quando possível.
- Segurança: Em aplicações sensíveis, considere implementar mecanismos de segurança, como pareamento e criptografia, para proteger os dados transmitidos.
- Tratamento de Desconexões: Certifique-se de que o seu código lida adequadamente com eventuais desconexões e tenta reconectar ou reiniciar a publicidade quando necessário.
Expandindo a Aplicação🔗
Com a base estabelecida, você pode expandir a aplicação para incluir:
- Múltiplas Características: Transmitir diferentes tipos de dados, como umidade, pressão, etc.
- Controle Remoto: Receber comandos do dispositivo móvel para controlar atuadores conectados ao ESP32.
- Interface Gráfica: Desenvolver um aplicativo móvel personalizado para interagir com o ESP32 de forma mais amigável.
Conclusão🔗
Desenvolver aplicações com Bluetooth Low Energy no ESP32 abre um leque de possibilidades para projetos de IoT e automação. Com um consumo de energia reduzido e uma comunicação eficiente, o BLE é ideal para dispositivos que precisam transmitir dados periodicamente sem a necessidade de trocas frequentes de bateria.
Neste artigo, exploramos desde os conceitos básicos do BLE, passando pela configuração do ambiente de desenvolvimento, até a implementação prática de uma aplicação funcional. Com esse conhecimento, você está pronto para criar soluções inovadoras que aproveitam o potencial do ESP32 e do BLE.
Lembre-se de sempre explorar, experimentar e adaptar os conceitos aprendidos para atender às necessidades específicas dos seus projetos. A prática e a curiosidade são fundamentais para o domínio e a inovação no mundo da tecnologia.
Este artigo faz parte do grupo Controle de Dispositivos via Bluetooth com ESP32
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Tags