ESP32 - joystick
En este tutorial, vamos a aprender cómo usar un joystick con ESP32. En detalle, aprenderemos:
- Cómo funciona el joystick
- Cómo conectar el joystick al ESP32 y programarlo
- Cómo convertir los valores del joystick en valores controlables, como coordenadas XY y la dirección del motor hacia arriba, hacia abajo, izquierda y derecha

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del sensor de joystick
Probablemente veas el joystick en algún lugar, como un controlador de juegos, un controlador de juguetes, o incluso una gran máquina real, como un controlador de excavadora.
El joystick está compuesto por dos potenciómetros cuadrados y un pulsador. Por lo tanto, proporciona las siguientes salidas:
- Un valor analógico (de 0 a 4095) que corresponde a la posición horizontal (llamada coordenada X)
- Un valor analógico (de 0 a 4095) que corresponde a la posición vertical (llamada coordenada Y)
- Un valor digital de un pulsador (HIGH o LOW)
La combinación de dos valores analógicos puede crear coordenadas 2D con el centro definido por los valores cuando el joystick está en la posición de reposo. La dirección real de las coordenadas se puede identificar simplemente cuando ejecutes un código de prueba (en la siguiente parte).
Algunas aplicaciones pueden usar las tres salidas, algunas aplicaciones pueden usar algunas de las tres salidas.
Diagrama de pines
Un joystick tiene 5 pines:
- Pin GND: debe conectarse a GND (0 V)
- Pin VCC: debe conectarse a VCC (5 V)
- Pin VRX: proporciona un valor analógico que corresponde a la posición horizontal (llamada coordenada X).
- Pin VRY: proporciona un valor analógico que corresponde a la posición vertical (llamada coordenada Y).
- Pin SW: es la salida del pulsador dentro del joystick. Está normalmente abierto. Si usamos una resistencia pull-up en este pin, el pin SW estará en ALTO cuando no esté presionado, y en BAJO cuando esté presionado.

Cómo funciona
- Cuando empujas la palanca del joystick hacia la izquierda o hacia la derecha, el voltaje en el pin VRX cambia. El rango de voltaje es de 0 a 5 V (0 a la izquierda y 5 V a la derecha). El valor de voltaje es proporcional a la posición de la palanca ⇒ El valor de lectura en el pin analógico del ESP32 es de 0 a 4095
- Cuando empujas la palanca del joystick hacia arriba o hacia abajo, el voltaje en el pin VRY cambia. El rango de voltaje es de 0 a 5 V (0 arriba y 5 V abajo). El valor de voltaje es proporcional a la posición de la palanca ⇒ El valor de lectura en el pin analógico del ESP32 es de 0 a 4095
- Cuando empujas la palanca del joystick en cualquier dirección, el voltaje en los pines VRX y VRY cambia en proporción a la proyección de la posición en cada eje
- Cuando empujas la palanca del joystick de arriba hacia abajo, el pulsador dentro del joystick se cierra. Si usamos una resistencia de pull-up en el pin SW, la salida del pin SW cambiará de 5 V a 0 V ⇒ El valor de lectura en el pin digital del ESP32 cambia de ALTO a BAJO
Diagrama de Cableado
- Cómo conectar ESP32 y un joystick usando protoboard

This image is created using Fritzing. Click to enlarge image
Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.
- Cómo conectar ESP32 y joystick usando una placa breakout con terminales de tornillo

Cómo programar para un joystick
El joystick tiene dos partes: analógico (ejes X, Y) y digital (botón pulsador).
- Para las partes analógicas (ejes X y Y), solo necesitas leer el valor del pin de entrada analógica usando la función analogRead().
- Para la parte digital (el pulsador): es un botón. La forma más simple y conveniente es usar biblioteca ezButton. Esta biblioteca soporta el rebote para los botones y también habilita una resistencia pull-up interna. Puedes ver más sobre el botón en ESP32 - Tutorial de Botón. El código se presentará en la próxima sesión de este tutorial.
Después de leer los valores de los pines analógicos, es posible que necesitemos convertirlos a valores controlables. La siguiente parte proporcionará los códigos de ejemplo para ello.
Código ESP32
Esta sección proporcionará los siguientes códigos de ejemplo para ESP32:
- Ejemplo de código: lee valores analógicos del joystick
- Ejemplo de código: lee valores analógicos y lee el estado del botón del joystick
- Ejemplo de código: convierte un valor analógico en los comandos MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
- Ejemplo de código: convierte valores analógicos en ángulos para controlar dos servomotores (por ejemplo, en cámaras pan-tilt)
Lee valores analógicos del joystick
Pasos R\u00e1pidos
- Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en el IDE de Arduino.
- Realiza el cableado tal como se muestra en la imagen anterior.
- Conecta la placa ESP32 a tu PC mediante un cable micro USB.
- Abre el IDE de Arduino en tu PC.
- Selecciona la placa ESP32 correcta (p. ej. ESP32 Dev Module) y el puerto COM.
- Copia el código anterior y ábrelo con el IDE de Arduino.
- Haz clic en el botón Upload en el IDE de Arduino para subir el código a ESP32.
- Empuja el pulsador del joystick al máximo hasta el tope y luego hazlo girar en un círculo (en sentido horario o antihorario).
- Ve el resultado en el Monitor Serial.
- Mientras giras la palanca del joystick, mantente atento al Monitor Serie
- Si el valor de X es 0, marca o memoriza la posición actual como izquierda ⇒ la dirección opuesta hacia la derecha
- Si el valor de Y es 0, marca o memoriza la posición actual como arriba ⇒ la dirección opuesta hacia abajo
- Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
- Busca “ezButton”, luego encuentra la biblioteca de botones de ArduinoGetStarted.com.
- Haz clic en el botón Instalar para instalar la biblioteca ezButton.
- Copia el código anterior y ábrelo con Arduino IDE
- Haz clic en el botón Subir en Arduino IDE para cargar el código al ESP32
- Empuja el pulsador del joystick hacia la izquierda/derecha/arriba/abajo
- Empuja el pulsador del joystick desde la parte superior
- Ver el resultado en el Monitor Serial
- Copia el código anterior y ábrelo con el IDE de Arduino.
- Haz clic en el botón Subir del IDE de Arduino para cargar el código en el ESP32.
- Empuja el joystick hacia la izquierda/derecha/arriba/abajo o en cualquier dirección.
- Ver el resultado en el Monitor serie.
- El ADC del ESP32 no es perfectamente preciso y podría necesitar calibración para obtener resultados correctos. Cada placa ESP32 puede ser un poco diferente, así que necesita calibrar el ADC para cada placa individual.
- La calibración puede ser difícil, especialmente para principiantes, y puede que no siempre dé los resultados exactos que desea.
Puede que hayas notado que la lectura analógica no es proporcional al movimiento del joystick. Este problema no se debe al propio joystick, sino al ADC del ESP32. Al final de este tutorial se explicará por qué ocurre esto.
Lee valores analógicos y lee el estado del botón de un joystick
Pasos R\u00e1pidos

Convierte el valor analógico en comandos para MOVER IZQUIERDA/DERECHA/ARRIBA/ABAJO
Pasos R\u00e1pidos
※ Nota:
En un momento dado, puede no haber ningún comando, un comando o dos comandos (p. ej. ARRIBA y IZQUIERDA al mismo tiempo).
Convierte valores analógicos en ángulos para controlar dos servomotores
El detalle se presenta en el tutorial ESP32 - Controles de joystick para motor servo.
※ Nota:
Este tutorial usa la función analogRead() para leer valores de un ADC (Convertidor analógico-digital) conectado a un joystick. El ADC del ESP32 es bueno para proyectos que NO requieren alta precisión. Sin embargo, para proyectos que necesitan mediciones precisas, tenga en cuenta:
Para proyectos que requieren alta precisión, considere usar un ADC externo (p. ej. ADS1115) con el ESP32 o usar un Arduino, que tiene un ADC más fiable. Si aún desea calibrar el ADC del ESP32, consulte ESP32 ADC Calibration Driver
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.