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

Hardware Requerido
Or you can buy the following kits:
| 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 videojuegos, un mando de juguete, o incluso una gran máquina real como un controlador de excavadora.
El joystick está compuesto por dos potenciómetros cuadrados entre sí y un pulsador. Por lo tanto, proporciona las siguientes salidas:
- Un valor analógico (de 0 a 4095) correspondiente a la posición horizontal (llamada coordenada X)
- Un valor analógico (de 0 a 4095) correspondiente 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 los valores centrales cuando el joystick está en la posición de reposo. La dirección real de las coordenadas se puede identificar simplemente al ejecutar un código de prueba (en la próxima 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 (3.3V)
- 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. Normalmente está abierto. Si se utiliza una resistencia de pull-up en este pin, el pin SW estará ALTO cuando no esté presionado y BAJO cuando esté presionado.

Cómo funciona
- Cuando empujas la palanca del joystick hacia la izquierda/derecha, el voltaje en el pin VRX cambia. El rango de voltaje es de 0 a 3.3V (0 a la izquierda y 3.3V 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/abajo, el voltaje en el pin VRY cambia. El rango de voltaje es de 0 a 3.3V (0 hacia arriba y 3.3V hacia 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 interno del joystick se cierra. Si usamos una resistencia pull-up en el pin SW, la salida del pin SW cambiará de 3.3V a 0V ⇒ La lectura del pin digital del ESP32 cambia de HIGH a LOW
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Cómo programar para joystick
El joystick tiene dos partes: analógica (ejes X e Y) y digital (botón pulsador).
- Para las partes analógicas (ejes X, Y), solo es necesario leer el valor del pin de entrada analógico utilizando la función analogRead().
- Para la parte digital (botón pulsador): es un botón. La forma más simple y conveniente es usar biblioteca ezButton. Esta biblioteca admite debounce para botones y también habilita una resistencia pull-up interna. Puede ver más sobre el botón en Arduino Nano 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, puede que necesitemos convertirlos a valores que se puedan controlar. La siguiente parte proporcionará los códigos de ejemplo para ello.
Código de Arduino Nano ESP32
Esta sección proporcionará los siguientes códigos de ejemplo de Arduino Nano 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 el 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 (p. ej., en cámara pan-tilt)
Lee los valores analógicos del joystick
Pasos R\u00e1pidos
Para empezar con Arduino Nano ESP32, siga estos pasos:
- Si eres nuevo en Arduino Nano ESP32, consulta el tutorial sobre cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
- Conecta los componentes de acuerdo con el diagrama proporcionado.
- Conecta la placa Arduino Nano ESP32 a tu computadora usando un cable USB.
- Inicia el IDE de Arduino en tu computadora.
- Selecciona la placa Arduino Nano ESP32 y su puerto COM correspondiente.
- Copia el código de arriba y ábrelo con el IDE de Arduino.
- Haz clic en el botón Upload del IDE de Arduino para subir el código a la placa Arduino Nano ESP32.
- Empuja al máximo el pulsador del joystick hasta el límite y luego haz un giro en círculo (en sentido horario o antihorario).
- Consulta el resultado en el Monitor Serial.
- Mientras giras el pulgar del joystick, continúa mirando el Monitor Serial
- Si el valor de X es 0, marca o memoriza la posición actual como izquierda, que es la dirección opuesta a la derecha
- Si el valor de Y es 0, marca o memoriza la posición actual como arriba, que es la dirección opuesta a abajo
- Abre el Administrador de Bibliotecas haciendo clic en el icono en la barra de navegación 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 subir el código al Arduino Nano ESP32
- Empuja el joystick hacia la izquierda, derecha, arriba o abajo
- Presiona el pulsador del joystick desde la parte superior
- Revisa el resultado en el Monitor Serial
- Copie el código anterior y ábralo con el IDE de Arduino
- Haga clic en el botón Subir en el IDE de Arduino para cargar el código en Arduino Nano ESP32
- Empuje el joystick analógico hacia la izquierda, derecha, arriba, abajo o en cualquier dirección
- Verifique el resultado en el Monitor serie
- El ADC del Arduino Nano ESP32 no es perfectamente preciso y podría requerir calibración para obtener resultados correctos. Cada placa Arduino Nano ESP32 puede variar ligeramente, por lo que la calibración es necesaria para cada placa individual.
- La calibración puede ser desafiante, especialmente para principiantes, y puede no siempre producir los resultados exactos que deseas.
Puede que haya notado que el valor analógico no es proporcional al movimiento del joystick. Este problema no se debe al joystick en sí, sino al ADC del Arduino Nano 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 un valor analógico en comandos MOVER IZQUIERDA/DERECHA/ARRIBA/ABAJO
Pasos R\u00e1pidos
※ Nota:
En un momento puede no haber ninguna orden, una orden o dos órdenes (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 Arduino Nano ESP32 - Controles del joystick para el motor servo
※ Nota:
Este tutorial utiliza la función analogRead() para leer valores de un ADC (convertidor analógico a digital) conectado a un sensor o componente. El ADC del Arduino Nano ESP32 es adecuado para proyectos que no requieren alta precisión. Sin embargo, para proyectos que requieren mediciones precisas, tenga en cuenta lo siguiente:
Para proyectos que requieren alta precisión, considera usar un ADC externo (p. ej. ADS1115) con el Arduino Nano ESP32 o usar otro Arduino, como el Arduino Uno R4 WiFi, que tiene un ADC más fiable. Si aún desea calibrar el ADC del Arduino Nano ESP32, consulte el 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.