Este repositorio contiene controladores para la gestión de pines de entrada/salida (GPIO) en la ESP32. Estos controladores han sido desarrollados por Guadalupe Méndez Ontiveros, Manuel Francisco Zubiate Loya y Alan Alexis Rodriguez Hernandez para facilitar la configuración y utilización de los pines GPIO en proyectos basados en ESP32.
La versión actual de los controladores es la 5.1.
GPIO.c
: Archivo principal que contiene las definiciones de las funciones para el control de GPIO.GPIO.h
: Archivo de encabezado que proporciona las declaraciones de funciones y las definiciones de constantes utilizadas enGPIO.c
.BSP.h
: Archivo de encabezado que proporciona macros y definiciones de constantes utilizadas enGPIO.c
.
-
Clona este Repositorio: clona el repostorio dentro de una carpeta en donde quieras guardarlo. git clone https://github.com/Doobz09/Drivers-GPIO-ESP32.git
-
Copia la carpeta Drivers en el proyecto en el que quieras trabajar: La carpeta drivers contiene los siguientes archivos: drivers: -
GPIO.c
-GPIO.h
-BSP.h
3.Aegurate de que el compilador Cmake enlace los drivres:
Es importante agrear la ruta "../drivers/GPIO.c"
en el archivo CMakeLists.txt para no tener problemas.
idf_component_register(SRCS "main.c" "../drivers/GPIO.c"
INCLUDE_DIRS ".")
- Incluye el archivo de cabezera en tu proyecto para empezar a usar los drivers:
#include "../drivers/GPIO.h"
- Compila y disfruta los drivers: Si no te quedo claro las intrucciones en el apartado de enlaces utiles, encontraras un enlace a YouTube donde se mostrara un tutorial de como instalar los drivers en un proyecto nuevo.
En el main pricipal de este repositorio se encuentra un ejemplo de como es que se estan implementando los drivers para una aplicacion sencilla.
Ejemplos
BLINK
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "../drivers/GPIO.h"
void app_main(void)
{
GpioModeOutput(GPIO2); /*ESTABLECEMOS EL GPIO2 COMO SALIDA*/
GpioDigitalWrite(GPIO2,GPIO_LOW); /*ESTABLECEMOS EL ESTADO LOGICO DEL GPIO2 COMO BAJO PARA APAGAR EL LED*/
while(1){
GpioDigitalWrite(GPIO2,GPIO_HIGH); /*ENCENDEMOS EL LED MANDANDO UN ALTO AL GPIO2*/
vTaskDelay(pdMS_TO_TICKS(100)); /*RETARDO DE 100 MILISEGUNDOS*/
GpioDigitalWrite(GPIO2,GPIO_LOW); /*APAGAMOS EL LED MANDANDO UN BAJO AL GPIO2*/
vTaskDelay(pdMS_TO_TICKS(100));
}
}
TOGGLE
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "../drivers/GPIO.h"
void app_main(void)
{
uint8_t estado_led=0;
GpioModeInput(GPIO18); /*ESTABLECEMOS EL GPIO18 COMO ENTRADA*/
GpioPullUpEnable(GPIO18); /*HABILITAMOS LA RESISTENCIA PULLUP INTERNA DEL GPIO18*/
GpioModeOutput(GPIO2); /*ESTABLECEMOS EL GPIO2 COMO SALIDA*/
while(1){
GpioDigitalWrite(GPIO2,estado_led); /*ESTABLECEMOS EL ESTADO LOGICO DEL GPIO2 SEGUN EL VALOR DE LA VARIABLE ESTADO_LED*/
if(GpioDigitalRead(GPIO18)==GPIO_LOW){ /*LEEMOS EL VALOR DEL GPIO18 Y SI ESTE ES PRESIONADO Y SOLATADO CAMBIA EL VALOR DE ESTADO_LED*/
while(GpioDigitalRead(GPIO18)==GPIO_LOW);
estado_led= !estado_led;
}
vTaskDelay(pdMS_TO_TICKS(50));
}
}
Lectura de entrada en configuracion de resistencia Pull down
#include <stdio.h>
#include "../drivers/GPIO.h"
void app_main(void)
{
GpioModeInput(GPIO4); /*pin que usaremos cono entrada*/
GpioModeOutput(GPIO2); /*Led integrado en la tarjeta DevKit*/
GpioPullDownEnable(GPIO4);
while(1){
if( GpioDigitalRead(GPIO4)==1){ /*Leemos la entrada*/
GpioDigitalWrite(GPIO2,GPIO_HIGH);/*Enciende Led*/
}
else{
GpioDigitalWrite(GPIO2,GPIO_LOW); /*Apaga Led*/
}
}
}
- GpioModeOutput(uint32_t gpio)
- GpioModeInput(uint32_t gpio)
- GpioPullUpEnable(uint32_t gpio)
- GpioPullDownEnable(uint32_t gpio)
- GpioDigitalWrite(uint32_t gpio, gpio_state state)
- GpioDigitalRead(uint32_t gpio)
Configura el GPIO especificado para su uso como salida.
gpio
: Número del pin GPIO que se configurará como salida.
GpioModeOutput(GPIO5);
Configura el GPIO especificado para su uso como entrada.
gpio
: Número del pin GPIO que se configurará como entrada.
GpioModeInput(GPIO5);
Activa la resistencia PullUp interna en el GPIO especificado.
gpio
: Número del pin GPIO en el que se activará la resistencia PullUp.
GpioPullUpEnable(GPIO5);
Activa la resistencia PullDown interna en el GPIO especificado.
gpio
: Número del pin GPIO en el que se activará la resistencia PullDown.
GpioPullDownEnable(GPIO5);
Establece el estado lógico (alto o bajo) en el GPIO especificado.
gpio
: Número del pin GPIO en el que se establecerá el estado.
state
: Estado lógico que se desea establecer (GPIO_HIGH o GPIO_LOW).
GpioDigitalWrite(GPIO5, GPIO_HIGH);
Lee el estado lógico actual del GPIO especificado.
gpio
: Número del pin GPIO del que se leerá el estado.
int
: Valor leído en el GPIO (1 para HIGH, 0 para LOW).
int state = GpioDigitalRead(GPIO5);
-
Tutorial de Instalación en YouTube: Ver Video
-
Explicación de las funciones
GpioModeOutput
yGpioDigitalWrite
: Ver Video -
Demostración de
GpioDigitalRead
,GpioPullUpEnable
yGpioModeInput
: Ver Video -
Ejemplo adicional utilizando
GpioPullDownEnable(uint32_t gpio)
: Ver Video -
Manual Drivers: https://drive.google.com/file/d/19B6PE_2ZCeL8dLf0YTZboQC51czPOgto/view