Exemplo Bluetooth Joystick com ESP32 - Tutorial de Interface de Controle 2D Interativa
Visão Geral
O exemplo Bluetooth Joystick oferece um controle de joystick 2D interativo, acessível pelo app DIYables Bluetooth STEM. Projetado para placas ESP32, com suporte a conexões BLE (Bluetooth Low Energy) e Bluetooth Clássico. O joystick envia em tempo real valores de coordenadas X e Y de -100 a +100, o que o torna ideal para controle de robôs, acionamento de motores, posicionamento de servos e qualquer aplicação que exija entrada direcional.
Este exemplo suporta dois modos Bluetooth:
- ESP32 BLE (Bluetooth Low Energy): Funciona no Android e no iOS
- ESP32 Bluetooth Clássico: Funciona somente no Android. O iOS não suporta o Bluetooth Clássico. Use o BLE se você precisar de suporte ao iOS.

Recursos
- Controle 2D: Eixos X e Y com valores de -100 a +100
- Atualizações em Tempo Real: Atualizações instantâneas da posição via comunicação Bluetooth
- Opção de Retorno Automático: Retorno automático configurável para a posição central (0, 0)
- Sensibilidade Ajustável: Configure o limite mínimo de movimento para filtrar pequenas mudanças
- Compatível com Robôs: Valores facilmente mapeados para as entradas do driver de motor
- BLE e Bluetooth Clássico: Escolha o modo Bluetooth que melhor atende ao seu projeto
- Multiplataforma: O modo BLE funciona no Android e no iOS; o Bluetooth Clássico funciona no Android
- Opção de Baixo Consumo: O modo BLE consome menos energia que o Bluetooth Clássico
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Código do ESP32
Passos Rápidos
Siga estas instruções passo a passo:
- Se esta é a primeira vez que você usa o ESP32, consulte o tutorial sobre como configurar o ambiente para ESP32 no Arduino IDE.
- Conecte a placa ESP32 ao seu computador usando um cabo USB.
- Abra o Arduino IDE no seu computador.
- Selecione a placa ESP32 apropriada e a porta COM.
- Navegue até o ícone Libraries na barra esquerda do Arduino IDE.
- Pesquise "DIYables Bluetooth" e encontre a biblioteca DIYables Bluetooth da DIYables
- Clique no botão Install para instalar a biblioteca.

- Você será solicitado a instalar algumas outras dependências da biblioteca
- Clique no botão Install All para instalar todas as dependências da biblioteca.

Escolha um dos dois modos Bluetooth abaixo, de acordo com a sua necessidade:
Código do ESP32 para Bluetooth Clássico (funciona com o app somente no Android)
Observação: O Bluetooth Clássico NÃO é suportado no iOS. Se você precisa de suporte ao iOS, use o código BLE abaixo.
- No Arduino IDE, vá em File Examples DIYables Bluetooth Esp32Bluetooth_Joystick, ou copie o código acima e cole no editor do Arduino IDE
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32
- Abra o Serial Monitor
- Veja o resultado no Serial Monitor. Ele deve ser parecido com o abaixo:
Código do ESP32 para BLE (funciona com o app no Android e no iOS)
- No Arduino IDE, vá em File Examples DIYables Bluetooth Esp32BLE_Joystick, ou copie o código acima e cole no editor do Arduino IDE
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32
- Abra o Serial Monitor
- Veja o resultado no Serial Monitor. Ele deve ser parecido com o abaixo:
App para Celular
- Se você estiver usando o código do ESP32 para Bluetooth Clássico, você precisa parear o ESP32 com o seu celular Android antes de abrir o app:
- Vá em Settings > Bluetooth no seu celular
- Certifique-se de que o Bluetooth está ativado
- Seu celular vai buscar os dispositivos disponíveis
- Encontre e toque em "ESP32_Joystick" na lista de dispositivos disponíveis
- Confirme a solicitação de pareamento (não é necessário PIN)
- Aguarde até aparecer "Paired" abaixo do nome do dispositivo
- Se você estiver usando o código do ESP32 para BLE, não é necessário parear. Basta ir para a próxima etapa.
- Abra o DIYables Bluetooth App
- Ao abrir o app pela primeira vez, ele vai pedir permissões. Conceda as seguintes:
- Permissão de Dispositivos Próximos (Android 12+) / permissão de Bluetooth (iOS) - necessária para buscar e conectar a dispositivos Bluetooth
- Permissão de Localização (somente Android 11 e anteriores) - exigida pelas versões mais antigas do Android para buscar dispositivos BLE
- Certifique-se de que o Bluetooth está ativado no seu celular
- Na tela inicial, toque no botão Connect. O app vai buscar dispositivos BLE e Bluetooth Clássico.

- Encontre e toque no seu dispositivo nos resultados da busca para conectar:
- Para o Bluetooth Clássico: toque em "ESP32_Joystick"
- Para o BLE: toque em "ESP32BLE_Joystick"
- Depois de conectado, o app volta automaticamente para a tela inicial. Selecione o app Joystick no menu de apps.

Observação: Você pode tocar no ícone de configurações na tela inicial para ocultar/mostrar apps na tela inicial. Para mais detalhes, veja o Manual do Usuário do DIYables Bluetooth App.
- Mova o joystick em qualquer direção para enviar os valores das coordenadas X/Y

Agora volte ao Serial Monitor no Arduino IDE. Você verá:
- Mova o joystick no app e observe os valores X/Y em tempo real no Serial Monitor
Personalização Criativa - Adapte o Código ao Seu Projeto
Configurar o Retorno Automático e a Sensibilidade
Defina o comportamento do joystick com os parâmetros do construtor:
Tratar Mudanças na Posição do Joystick
Use o callback onJoystickValue() para receber as coordenadas X/Y:
Tratar a Solicitação de Configuração do App
Quando o app se conecta e abre a tela do Joystick, ele solicita a configuração do joystick ao ESP32. Você pode usar o callback onGetConfig() para enviar ao app os valores atuais do joystick nesse momento:
Enviar Valores ao App
Você pode enviar os valores de coordenadas do joystick do ESP32 para o app:
Tratar Eventos de Conexão
Você pode detectar quando o app se conecta ou se desconecta do ESP32:
Como Usar o Joystick
Controles da Interface do App
A interface de joystick do DIYables Bluetooth App oferece:
- Pad Virtual do Joystick: Toque e arraste para controlar a posição
- Exibição do Valor X: Mostra a posição horizontal atual (-100 a +100)
- Exibição do Valor Y: Mostra a posição vertical atual (-100 a +100)
Faixas de Valores
O joystick fornece:
- Eixo X: -100 (totalmente à esquerda) a 0 (centro) a +100 (totalmente à direita)
- Eixo Y: -100 (totalmente para baixo) a 0 (centro) a +100 (totalmente para cima)
- Posição Central: (0, 0) quando o joystick está em repouso
Exemplos de Programação
Tratador Básico de Joystick
Controle de Robô de Duas Rodas
Controle de Servo Pan-Tilt
Indicador de Direção em Matriz de LED
Técnicas Avançadas de Programação
Filtro de Zona Morta
Rampa de Velocidade
Cálculo de Magnitude e Ângulo
Exemplos de Integração com Hardware
Robô com Rodas Mecanum
Controle de Posição de Motor de Passo
BLE vs Bluetooth Clássico - Qual Escolher?
| Recurso | BLE (Esp32BLE_Joystick) | Bluetooth Clássico (Esp32Bluetooth_Joystick) |
|---|---|---|
| Suporte ao iOS | ? Sim | ? Não |
| Suporte ao Android | ? Sim | ? Sim |
| Consumo de Energia | Baixo | Maior |
| Alcance | ~30-100m | ~10-100m |
| Taxa de Dados | Menor | Maior |
| Pareamento Necessário | Não (conexão automática) | Sim (pareamento manual) |
| Melhor Para | Dispositivos a bateria, multiplataforma | Alta taxa de transferência, somente Android |
Solução de Problemas
Problemas Comuns
1. Não consigo encontrar o dispositivo no app
- Certifique-se de que o ESP32 está ligado e que o sketch foi carregado
- Para o BLE: Garanta que o Bluetooth e a Localização do seu celular estão ativados
- Para o Bluetooth Clássico: Pareie o dispositivo primeiro nas configurações de Bluetooth do celular
- Verifique se o esquema de partição correto está selecionado (Huge APP)
2. O joystick não responde
- Verifique o status da conexão Bluetooth no app
- Verifique a conexão no Serial Monitor
- Tente desconectar e reconectar
3. Os valores do joystick parecem erráticos
- Aumente o valor de sensibilidade para filtrar pequenos movimentos: bluetoothJoystick.setSensitivity(10.0)
- Aplique um filtro de zona morta no seu callback
- Verifique se há interferência de outros dispositivos Bluetooth
4. A conexão cai com frequência
- Aproxime-se do ESP32 (reduza a distância)
- Para o BLE: Verifique se há interferência de outros dispositivos BLE
- Para o Bluetooth Clássico: Garanta uma alimentação estável para o ESP32
- Verifique no Serial Monitor se há mensagens de desconexão/reconexão
5. Os motores não param quando o joystick é solto
- Garanta que o retorno automático está habilitado: bluetoothJoystick.setAutoReturn(true)
- Adicione uma verificação de zona morta no seu código de controle dos motores
- Adicione uma parada de segurança no callback setOnDisconnected()
6. Sketch grande demais / espaço insuficiente
- No Arduino IDE, vá em Tools > Partition Scheme e selecione "Huge APP (3MB No OTA/1MB SPIFFS)" ou "No OTA (Large APP)"
- O esquema de partição padrão oferece apenas ~1,2MB para o código do app, o que não é suficiente para as bibliotecas de Bluetooth
- Esta configuração oferece ~3MB ao sacrificar a partição de OTA (atualização pelo ar)
Dicas de Depuração
Adicione uma depuração completa:
Ideias de Projetos
Projetos de Robótica
- Robô de tração diferencial controlado por Bluetooth
- Robô com rodas Mecanum ou omnidirecionais
- Controle das juntas de um braço robótico
- Controlador de estação terrestre para drone
Projetos de Câmera
- Controle de suporte de câmera pan-tilt
- Posicionamento de slider de câmera motorizado
- Controle remoto de câmera de vigilância
Projetos de Jogos
- Controle de jogo Bluetooth para jogos com ESP32
- Jogo de navegação em labirinto
- Jogos de joystick com matriz de LED (Snake, Pong)
Projetos Industriais
- Controlador de jog para CNC
- Posicionamento de plataforma ou mesa motorizada
- Controle direcional de guindaste ou guincho
Integração com Outros Apps Bluetooth
Combine com o Bluetooth Slider
Use o joystick para a direção e os sliders para os limites de velocidade:
Combine com o Bluetooth Monitor
Use o joystick para o controle e o monitor para a telemetria:
Próximos Passos
Depois de dominar o exemplo Bluetooth Joystick, experimente:
- Bluetooth Slider - Para o controle preciso de valores analógicos
- Bluetooth Digital Pins - Para o controle discreto de ligar/desligar
- Bluetooth Monitor - Para depurar os valores do joystick
- Multiple Bluetooth Apps - Combinando o joystick com sliders e outros controles
Suporte
Para obter ajuda adicional:
- Consulte a documentação de referência da API
- Visite os tutoriais da DIYables
- Fóruns da comunidade Arduino