Comunicação Bluetooth com ESP32

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.

Tela inicial do projeto: os destaques serão explicados a seguir.

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.

Interface do aplicativo desenvolvido para acender e apagar um LED por meio da conexão Bluetooth.

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 botão “Bluetooth”.
  • 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 do componente “EscolheLista”.
  • 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.
Lógica dos botões “Ligar LED” e “Desligar LED”.

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.

Aplicativo exibido na tela do celular.

Montando o circuito

A montagem do circuito é apresentada a seguir.

Circuito montado com ESP32, um LED e um resistor de 220Ω.

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.

Rafael Salzer Simas