ESP32 - Joystick - Servo Motor
Neste tutorial, vamos aprender a usar o ESP32 e um joystick para controlar dois servo motores ou um kit pan-tilt com servos.
Um joystick tem dois potenciômetros embutidos, perpendiculares entre si (chamados de eixo X e eixo Y). Esses potenciômetros fornecem valores analógicos (chamados de valor X e valor Y) nos pinos VRX e VRY. Vamos usar esses valores analógicos para controlar dois servo motores de forma independente: o valor X controla o servo #1 e o valor Y controla o servo #2. No caso do kit pan-tilt, o movimento dos dois servo motores cria um movimento em 3-D.
Há dois casos de uso:
- Caso de uso 1: Os servo motores giram de acordo com o movimento da alavanca do joystick:
- Os ângulos dos servo motores são proporcionais ao valor X e ao valor Y do joystick.
- Quando soltamos a alavanca do joystick ⇒ todos os valores voltam para os valores centrais ⇒ os servo motores voltam automaticamente para a posição central
- Caso de uso 2: usar o joystick para comandar os servo motores (comandos para cima/para baixo/esquerda/direita)
- Quando a alavanca do joystick é empurrada para a esquerda, o servo motor #1 se move no sentido horário, passo a passo
- Quando a alavanca do joystick é empurrada para a direita, o servo motor #1 se move no sentido anti-horário, passo a passo
- Quando a alavanca do joystick é empurrada para cima, o servo motor #2 se move no sentido horário, passo a passo
- Quando a alavanca do joystick é empurrada para baixo, o servo motor #2 se move no sentido anti-horário, passo a passo
- Quando soltamos a alavanca do joystick ⇒ os servo motores não voltam para a posição central
- Se o joystick for pressionado (botão de pressão), os servo motores voltam para a posição central
- Como conectar o ESP32 ao joystick e ao servo motor usando protoboard
- Como conectar o ESP32 ao joystick e ao servo motor usando a placa breakout com bornes de parafuso
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para o ESP32 na Arduino IDE.
- Conecte o joystick e o servo motor à placa ESP32 conforme o diagrama de ligação acima.
- Conecte a placa ESP32 ao seu PC por meio de um cabo USB Type-C
- Abra a Arduino IDE no seu PC.
- Selecione a placa ESP32 correta (ex.: ESP32 Dev Module) e a porta COM.
- Clique no ícone Libraries na barra esquerda da Arduino IDE.
- Digite ESP32Servo na caixa de pesquisa e procure a biblioteca de servo de Kevin Harrington,John K. Bennett.
- Clique no botão Install para instalar a biblioteca de servo motor para o ESP32.
- Copie o código acima e abra-o com a Arduino IDE
- Clique no botão Upload na Arduino IDE para carregar o código no ESP32
- Abra o Serial Monitor
- Empurre o joystick em alguma direção
- Observe a rotação do servo motor
- Veja o resultado no Serial Monitor
- Clique no ícone Libraries na barra esquerda da Arduino IDE.
- Pesquise “ezButton” e encontre a biblioteca de botão de ArduinoGetStarted.com
- Clique no botão Install para instalar a biblioteca ezButton.
- Copie o código acima e abra-o com a Arduino IDE
- Clique no botão Upload na Arduino IDE para carregar o código no ESP32
- Abra o Serial Monitor
- Empurre o joystick em alguma direção
- Observe a rotação do servo motor
- Veja o resultado no Serial Monitor
- O ADC do ESP32 não é perfeitamente preciso e pode precisar de calibração para dar resultados corretos. Cada placa ESP32 pode ser um pouco diferente, então você precisa calibrar o ADC de cada placa individualmente.
- A calibração pode ser difícil, especialmente para iniciantes, e nem sempre dá exatamente os resultados que você deseja.
Vamos explorar o código dos dois casos de uso nas próximas partes.
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) |
Buy Note: For controlling multiple servo motors, use the PCA9685 16 Channel PWM Servo Driver Module to save MCU pins and simplify wiring.
Sobre o Joystick e o Servo Motor
Se você não conhece o joystick e o servo motor (pinagem, como funcionam, como programar...), aprenda sobre eles nos tutoriais a seguir:
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Código ESP32
Código ESP32 - Os servo motores giram de acordo com o movimento da alavanca do joystick
Passos Rápidos


Você pode ter notado que o servo motor não se move proporcionalmente ao movimento do joystick. Esse problema não é causado pelo joystick nem pelo servo motor em si, mas sim pelo ADC do ESP32. O final deste tutorial explica por que isso acontece.
Código ESP32 - Usar o joystick para comandar os servo motores
Passos Rápidos

Explicação do Código
Leia a explicação linha por linha nas linhas de comentário do código-fonte!
※ Nota:
Este tutorial usa a função analogRead() para ler valores de um ADC (Conversor Analógico-Digital) conectado a um joystick. O ADC do ESP32 é bom para projetos que NÃO precisam de alta precisão. No entanto, para projetos que precisam de medições precisas, observe:
Para projetos que precisam de alta precisão, considere usar um ADC externo (ex.: ADS1115) com o ESP32 ou usar um Arduino, que tem um ADC mais confiável. Se você ainda quiser calibrar o ADC do ESP32, consulte o ESP32 ADC Calibration Driver