ESP8266 - Codificador rotatorio
Este tutorial explica cómo usar el codificador rotatorio incremental con ESP8266. Esto es lo que cubriremos:
- Cómo funciona el codificador rotatorio
- La diferencia entre un codificador rotatorio y un potenciómetro (otro tipo de perilla)
- Cómo conectar físicamente el codificador rotatorio al ESP8266
- Cómo escribir código para que el ESP8266 lea la dirección y la posición del codificador rotatorio
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca de Codificador Rotatorio
Un codificador rotatorio es un tipo de perilla que puede convertir el giro en una señal eléctrica. Te indica cuánto giro ha dado algo y en qué posición se encuentra. Hay dos tipos principales:
- Codificador incremental: Este codificador incremental utiliza señales rápidas para medir cuánto se ha movido.
- Codificador absoluto: Este tipo proporciona un código especial para cada posición, lo que ayuda a saber exactamente dónde se encuentra algo, incluso si se corta la energía.
Este tutorial se centra en el codificador incremental.
Pinout del módulo de codificador rotatorio

Un módulo codificador rotatorio tiene 4 pines:
- Pin CLK (Salida A): es el pulso principal que nos indica cuánta rotación ha ocurrido. Cada vez que giras la perilla un tope (clic) en cualquiera de las direcciones, el pin CLK emite una señal que completa un ciclo completo (LOW → HIGH → LOW).
- Pin DT (Salida B): actúa como el pin CLK pero emite una señal que se retrasa respecto a la señal CLK en 90 grados. Nos ayuda a determinar la dirección de rotación (en sentido horario o antihorario).
- Pin SW: es la salida del pulsador dentro del codificador. Normalmente está abierto. Si usamos una resistencia pull-up en este pin, el pin SW estará HIGH cuando la perilla no esté presionada, y LOW cuando esté presionada.
- Pin VCC (+): debe conectarse a VCC (entre 3.3 y 5 voltios)
- Pin GND: debe conectarse a GND (0V).
Codificador rotatorio vs potenciómetro
Puede que confundas el codificador rotatorio con el potenciómetro, pero son componentes distintos. A continuación, una comparación entre ellos:
- El codificador rotatorio es como la versión moderna de un potenciómetro, pero puede hacer más cosas.
- El codificador rotatorio puede girar completamente en un círculo sin detenerse, mientras que el potenciómetro solo puede girar aproximadamente tres cuartos del círculo.
- El codificador rotatorio emite pulsos, mientras que el potenciómetro emite la tensión analógica.
- El codificador rotatorio es útil cuando solo necesitas saber cuánto se ha movido la perilla, no exactamente dónde está. El potenciómetro es útil cuando realmente necesitas saber exactamente dónde se encuentra la perilla.
Cómo funciona un codificador rotatorio

Dentro del codificador, hay un disco con ranuras conectado a un pin llamado C, que funciona como una tierra común. Hay dos pines más: A y B.
- Cuando giras la perilla, los pines A y B tocan el pin de tierra común C, pero en un cierto orden dependiendo de hacia qué dirección giras la perilla (en sentido horario o antihorario).
- Estos contactos generan dos señales. Tienen una ligera diferencia en el tiempo porque un pin toca la tierra antes que el otro. Dos señales están desincronizadas por 90 grados entre sí. A esto se le llama codificación en cuadratura.
- Cuando giras la perilla en sentido horario, el pin A toca la tierra antes que el pin B. Cuando giras la perilla en dirección antihoraria, el pin B toca la tierra antes que el pin A.
- Al monitorear cuándo cada pin toca o se despega de la tierra, podemos averiguar hacia qué dirección está girando la perilla. Hacemos esto comprobando qué sucede con el pin B cuando el pin A cambia.

Cuando A cambia su estado de bajo a alto:
- Si B está bajo, la perilla se gira en sentido horario.
- Si B está alto, la perilla se gira en sentido antihorario.
※ Nota:
Los pines A y B están conectados a los pines CLK y DT. Sin embargo, dependiendo de los fabricantes, el orden puede ser diferente. Los códigos proporcionados a continuación han sido probados con el codificador rotatorio de DIYables.
Cómo programar para el codificador rotatorio
- Verifica la señal del pin CLK
- Si el estado cambia de BAJO a ALTO, verifica el estado del pin DT.
- Si el estado del pin DT es ALTO, la perilla se gira en dirección antihoraria, incrementa el contador en 1
- Si el estado del pin DT es BAJO, la perilla se gira en dirección horaria, disminuye el contador en 1
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.
Código ESP8266 – Codificador rotatorio
El código ESP8266 que se muestra a continuación hace:
- Detecta la dirección y la cantidad de rotación del codificador rotatorio.
- Si se detecta que el mando se ha girado un clic en dirección horaria, aumenta el contador en uno.
- Si se detecta que el mando se ha girado un clic en dirección antihoraria, disminuye el contador en uno.
- Detecta si el botón está presionado.
Para simplificar el código del rebote del botón, se utiliza la biblioteca ezButton.
Pasos R\u00e1pidos
Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:
- Consulta el tutorial cómo configurar el entorno para ESP8266 en Arduino IDE si es tu primera vez usando ESP8266.
- Conecta los componentes tal como se muestran en el diagrama.
- Conecta la placa ESP8266 a tu computadora usando un cable USB.
- Abre Arduino IDE en tu computadora.
- Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM correspondiente.
- Instala la biblioteca ezButton en Arduino IDE. Ver [Cómo] (https://arduinogetstarted.com/tutorials/arduino-button-library#content_how_to_install_library)
- 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 ESP8266
- Gira la perilla en sentido horario, y luego en sentido antihorario
- Presiona la perilla
- Ver el resultado en el Monitor Serial.
Explicación del código
Consulta los comentarios línea por línea en el código.
Código ESP8266 – Codificador rotatorio con interrupción
En el código anterior, revisar repetidamente el estado del pin mediante sondeo puede desperdiciar recursos y podría no contar correctamente si otras tareas tardan mucho. Las interrupciones proporcionan una solución al evitar la verificación continua, permitiendo que el ESP8266 gestione distintas tareas sin perder ningún evento.
Aquí tienes un ejemplo con ESP8266 de cómo leer un codificador rotatorio usando interrupciones.
Ahora, al girar la perilla, notarás que aparece información en el Monitor Serial, similar a lo que viste en el código anterior.
※ Nota:
- Podrías encontrar tutoriales en otros sitios web que usan dos interrupciones para un único codificador, pero esto es innecesario y derrochoso. Solo una interrupción es suficiente.
- Es importante usar la palabra clave volatile para las variables globales que se utilizan en la interrupción. Omitir esto podría provocar problemas inesperados.
- Mantén el código dentro de la interrupción lo más simple posible. Evita usar Serial.print() o Serial.println() dentro de la interrupción.
ESP8266 Aplicación de Codificador Rotatorio
Con el codificador rotatorio, podemos realizar las siguientes aplicaciones, pero no se limitan a:
- ESP8266 - El codificador rotatorio controla la posición del motor servo
- ESP8266 - El codificador rotatorio controla el brillo del LED
- ESP8266 - El codificador rotatorio controla la velocidad del motor paso a paso
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.