Ahora que ya hemos trabajado en la programación del chip, daremos el siguiente paso: comenzar a utilizar los diferentes periféricos de entrada y salida de nuestra tarjeta de desarrollo ESP32.
Para ello, aprenderemos sobre entradas y salidas de propósito general (GPIO), lo que nos permitirá leer o enviar señales digitales.
Aplicaciones de GPIO
Podemos utilizar GPIO para:
- Leer botones o sensores digitales.
- Comunicaciones entre chips.
- Controlar dispositivos, como encender o apagar un LED o manejar un motor.
En términos computacionales, una señal digital representa 1 o 0, que en términos eléctricos equivalen a 5V o 0V.
Para gestionar estas señales, utilizaremos la librería GPIO.
Circuito a Utilizar
El circuito utilizado es el mismo que en la práctica del "Hola Mundo". Dependiendo de tu tarjeta de desarrollo, debes revisar la hoja de datos para saber qué pines puedes usar.
Si tu tarjeta ya cuenta con un LED incorporado, puedes usarlo sin necesidad de una protoboard. De lo contrario, deberás armar el circuito correctamente.
Ejemplo de Código en Visual Studio Code
Ya tenemos creado un proyecto en Visual Studio Code. A continuación, presentamos el código completo:
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define LED_PIN 4
#define BLINK_TIME 1000
void app_main(void)
{
int led_state = 0;
gpio_reset_pin(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
while (1)
{
gpio_set_level(LED_PIN, led_state);
led_state = !led_state;
vTaskDelay(BLINK_TIME / portTICK_PERIOD_MS);
}
}
Explicación del Código
-
Librerías Importadas
- #include <stdio.h>: Entrada/salida estándar.
- #include "freertos/FreeRTOS.h": Manejo de procesos.
- #include "freertos/task.h": Uso de tareas y retardos.
- #include "driver/gpio.h": Control de GPIO.
-
Definiciones
- #define LED_PIN 4: Define el pin donde está conectado el LED.
- #define BLINK_TIME 1000: Establece el tiempo de parpadeo en milisegundos.
-
Configuración del LED
- Se inicializa el pin 4 como salida digital.
- Se define led_state = 0, para que el LED comience apagado.
-
Bucle Infinito
- El LED cambia de estado en cada iteración.
- Se usa vTaskDelay(BLINK_TIME / portTICK_PERIOD_MS); para generar el retardo adecuado.
Explicación del Circuito
Conexiones de Alimentación
- Fuente de alimentación: Se conecta mediante un cable USB adaptado para la protoboard.
- Líneas de alimentación:
- Línea azul (GND): Representa el negativo (tierra).
- Línea roja (+5V): Representa el positivo.
Esquemático del Circuito
- GND (línea azul) → GND de la tarjeta de desarrollo.
- +5V (línea roja) → 5V de la tarjeta de desarrollo.
- Resistencia entre GND y el LED.
- LED conectado a un pin de salida digital (en este caso, el pin 12).
Puedes elegir cualquier otro pin que permita salida digital.
Aplicaciones Avanzadas
El mismo principio utilizado para el LED puede aplicarse a otros dispositivos:
1. Control de Motores
- Con 2 pines: Controlar un motor en dos direcciones.
- Con 4 pines: Controlar dos motores en cuatro direcciones.
2. Motores a Pasos
Los motores a pasos funcionan con un código binario. Cada señal eléctrica cambia el ángulo del motor de forma precisa.
Aplicaciones avanzadas:
- 🔍 Robótica de precisión
- 🔧 Máquinas CNC
- 🎨 Impresoras 3D
Estos dispositivos manipulan señales eléctricas de manera controlada para generar movimientos exactos.
Compilación y Flasheo del ESP32
Tras escribir el código, procedemos a compilarlo. Si todo está correcto, no debería haber errores.
Flasheo del Chip ESP32
Para cargar el programa en la tarjeta de desarrollo, ejecutamos el comando de flasheo.
Nota: El puerto de conexión puede variar. En mi caso, es COM3, pero en tu computadora podría ser diferente.
Durante el flasheo, veremos en la terminal el progreso de la carga. Una vez finalizado, el código estará corriendo en el ESP32.
Verificando el Funcionamiento
Después de la carga del programa, el LED debería parpadear según lo programado. 🚀