Comunicação Bluetooth com ESP32

O ESP32 é um dos microcontroladores mais populares da atualidade, oferecendo conectividade Wi-Fi e Bluetooth integradas. Graças a esses recursos, ele é amplamente utilizado em projetos de automação residencial, Internet das Coisas (IoT), entre muitas outras aplicações.
Neste texto, vamos aprender como utilizar o Bluetooth do ESP32 na prática, desenvolvendo um projeto no qual será possível ligar e desligar um LED conectado ao ESP32 por meio de um aplicativo de celular.
Desenvolvendo um código para o ESP32
Primeiramente, é necessário importar a biblioteca “BluetoothSerial” , que permite o uso do Bluetooth no ESP32.
#include <BluetoothSerial.h>
Na linha seguinte, um objeto chamado “SerialBT” é criado. Esse objeto permite o envio e coleta de dados via Bluetooth.
BluetoothSerial SerialBT;
Além disso, o pino do LED é inicializado, indicando que, no projeto desenvolvido, o LED está conectado ao pino GPIO2 do ESP32. Sendo assim, esse pino será utilizado para ligar e desligar o LED.
int ledPin = 2;
Na função setup(), temos as seguintes linhas de código:
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_Bluetooth");
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.println("Bluetooth pronto! Conecte-se ao ESP32.");
}
Primeiramente, a comunicação serial é iniciada com uma taxa de baud de 115200 bps, permitindo que o Serial Monitor exiba mensagens. Em seguida, a comunicação Bluetooth Serial é iniciada. “ESP32_Bluetooth” será o nome que aparecerá quando você procurar o dispositivo no seu celular. Além disso, o pino ledPin é configurado como saída e definido em nível lógico baixo (LOW ou 0V). Por fim, uma mensagem é enviada ao monitor serial, indicando que o Bluetooth foi iniciado com sucesso.
Na função loop(), temos o seguinte:
void loop() {
if (SerialBT.available()) {
String command = "";
while (SerialBT.available()) {
command += (char)SerialBT.read();
delay(10);
}
command.trim();
Serial.println("Recebido: " + command);
if (command == "ON") {
digitalWrite(ledPin, HIGH);
SerialBT.println("LED ligado");
} else if (command == "OFF") {
digitalWrite(ledPin, LOW);
SerialBT.println("LED desligado");
} else {
SerialBT.println("Comando desconhecido");
}
}
}
Primeiramente, é realizada uma verificação para saber se há dados disponíveis para leitura via Bluetooth Serial. Caso haja, o código dentro do bloco if será executado. Uma variável chamada command, do tipo String, é criada para armazenar o comando recebido via Bluetooth.
Uma estrutura de repetição é criada para ler os caracteres recebidos via Bluetooth um por um, concatenando esses caracteres à variável command. Isso será feito enquanto houver bytes disponíveis para leitura, como indicado na condição do while. Fora do bloco while, o comando command.trim() remove os espaços em branco extras do comando recebido, o que é útil para evitar erros causados por espaços invisíveis. Em seguida, o comando recebido via Bluetooth é exibido no Serial Monitor.
Por último, é feita uma verificação do comando recebido. Se for “ON”, o LED é ligado em nível alto (HIGH ou 5V). Já se o comando for “OFF”, o LED é desligado. Caso o comando não seja nenhum dos dois, a mensagem “Comando desconhecido” é exibida no Serial Monitor.
Com isso, podemos desenvolver um aplicativo para ser utilizado junto com o código. O código completo é apresentado abaixo.
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
int ledPin = 2;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_Bluetooth");
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.println("Bluetooth pronto! Conecte-se ao ESP32.");
}
void loop() {
if (SerialBT.available()) {
String command = "";
while (SerialBT.available()) {
command += (char)SerialBT.read();
delay(10);
}
command.trim();
Serial.println("Recebido: " + command);
if (command == "ON") {
digitalWrite(ledPin, HIGH);
SerialBT.println("LED ligado");
} else if (command == "OFF") {
digitalWrite(ledPin, LOW);
SerialBT.println("LED desligado");
} else {
SerialBT.println("Comando desconhecido");
}
}
}
Criando um aplicativo no MIT App Inventor
Com o código do ESP32 desenvolvido, é necessário criar um aplicativo para celular que possa enviar informações ao microcontrolador, ou seja, o aplicativo atuará como o cliente Bluetooth. Para isso, será utilizado o MIT App Inventor.
O MIT App Inventor é uma plataforma online gratuita que permite criar aplicativos para Android de forma visual e intuitiva, sem a necessidade de um código complexo. Desenvolvido pelo MIT (Massachusetts Institute of Technology), ele utiliza um sistema de blocos, semelhantes a peças de quebra-cabeça, para programar a lógica do aplicativo. Isso facilita o aprendizado e permite a criação rápida de aplicações.
Passo a Passo para criar um projeto no MIT App Inventor
1 – Acesse o MIT App Inventor
Após acessar o site, clique em “Crie aplicativos!” e faça login. Se for um novo usuário, crie uma conta.
2 – Crie um novo projeto
Após o login, clique em “Novo projeto” e dê um nome a ele. Após clicar em OK, será possível visualizar a tela inicial do projeto.

No canto superior direito (destacado em vermelho), é possível alternar entre a parte da interface do aplicativo (opção “Designer”) e a parte da lógica do aplicativo (opção “Blocos”). Caso o seu projeto precise de mais de uma tela, é possível criar uma nova na opção destacada em amarelo.
3 – Crie uma interface do aplicativo
Primeiramente, clique na opção “Designer”. À esquerda (destacado em azul), é possível visualizar os componentes que podem ser utilizados no projeto, como botões, imagens e legendas. Existem muitos componentes disponíveis, que podem ser usados em diversas aplicações. Use a criatividade em seu projeto! Para utilizá-los, basta arrastá-los e soltá-los na tela.
Na parte da direita (destacada em roxo), é possível alterar as propriedades de cada componente utilizado no projeto, como tamanho, cor e texto.
Como, na aplicação apresentada, será necessário desenvolver um aplicativo que acenda e apague um LED conectado ao ESP, os componentes utilizados foram:
- “Botão”: Foram utilizados três botões, sendo dois para controlar o LED (“Ligar LED” e “Desligar LED”) e um para controlar a conexão Bluetooth;
- “ClienteBluetooth”: Este componente pode ser encontrado na seção “Conectividade”. Ele permite que o aplicativo atue como um cliente Bluetooth, possibilitando a conexão e o envio de informações via Bluetooth;
- “EscolheLista”: Este componente exibe uma lista de textos para o usuário selecionar. Na aplicação, essa lista mostrará todas as conexões Bluetooth disponíveis. É importante ressaltar que ela será exibida apenas quando o usuário quiser realizar a conexão Bluetooth. Dessa forma, no restante do tempo, a lista permanecerá oculta. Além disso, é possível alterar a visibilidade dos componentes na seção “Propriedades”;
- “OrganizaçãoHorizontal”: Encontrado na seção “Organização”, ele é utilizado para organizar visualmente outros elementos do aplicativo. Seu comprimento e largura podem ser ajustados na seção “Propriedades”.
Com isso, a interface do aplicativo é apresentada a seguir.

4 – Programe a lógica do aplicativo
Com a interface desenvolvida, clique na opção “Blocos” para iniciar a parte lógica do aplicativo. Os blocos podem ser selecionados na seção “Blocos”, localizada à esquerda. Além disso, para cada componente utilizado no projeto, há blocos específicos relacionados a ele, que também podem ser visualizados nessa mesma seção.
- Lógica do botão “Bluetooth”: Esse botão será responsável por desconectar o aplicativo caso já esteja conectado ou por realizar a conexão Bluetooth caso esteja desconectado. Para isso, é necessário utilizar um bloco de controle condicional (se/senão). O bloco “ClienteBluetooth1.EstáConectado” verifica se o Bluetooth está conectado. Se essa condição for verdadeira, o bloco “chamar ClienteBluetooth1.Desconectar” realiza a desconexão. Além disso, o texto do botão é atualizado para “Bluetooth Desconectado”. Caso o aplicativo ainda não esteja conectado, a lista de dispositivos Bluetooth disponíveis é exibida para o usuário por meio do bloco “chamar EscolheLista1.Abrir”. Tudo isso ocorrerá quando o usuário clicar no botão;

- Lógica do componente “EscolheLista”: Antes de o usuário escolher o dispositivo com o qual deseja se conectar, os elementos da lista são ajustados para exibir o nome e o endereço dos dispositivos disponíveis, utilizando o bloco “ClienteBluetooth1.EndereçosENomes”. Após o usuário fazer a seleção, a conexão é estabelecida com o endereço escolhido por meio dos blocos “chamar ClienteBluetooth1.Conectar” e “EscolheLista1.Seleção”, e o texto do botão “Bluetooth” é atualizado para “Bluetooth Conectado”;

- Lógica dos botões “Ligar LED” e “Desligar LED”: As informações são enviadas via Bluetooth por meio do bloco “chamar ClienteBluetooth1.EnviarTexto”. Quando o botão “Ligar LED” é pressionado pelo usuário, o texto “ON” é enviado através do Bluetooth para o ESP. Caso o botão “Desligar LED” seja pressionado, o texto “OFF” é enviado.

5 – Teste o aplicativo
Primeiramente, é necessário baixar o aplicativo “MIT AI2 Companion” no celular (disponível na Play Store). Em seguida, no App Inventor, clique em “Conectar” → “Assistente AI” e escaneie o QR Code no aplicativo instalado. Dessa forma, será possível visualizar o aplicativo desenvolvido na tela do celular.

Montando o circuito
A montagem do circuito é apresentada a seguir.

O pino positivo do LED (ânodo) é conectado ao pino GPIO2 do ESP32. Já o pino negativo do LED (cátodo) é ligado ao GND. Além disso, é utilizada uma resistência de 220Ω para limitar a corrente e evitar danos ao LED ou ao próprio microcontrolador.
Conclusão
Compreendendo este projeto, é possível adaptá-lo conforme a necessidade de cada aplicação. A comunicação via Bluetooth é uma forma eficiente e prática de conexão sem fio, podendo ser utilizada em uma ampla variedade de projetos eletrônicos e de automação.