📑 Lista de Ejemplos
ESP32-S3-DevKitC
ESP32-S3-Datasheet
Ejemplo 1 – Parpadeo de un LED con ESP32-S3 en ESP-IDF
main.c
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define LED_POWER GPIO_NUM_5 // led indicador de energía
#define TIEMPO_DE_ESPERA 100
void app_main()
{
gpio_reset_pin(LED_POWER); // restablece el estado por defecto del pin GPIO
gpio_set_direction(LED_POWER, GPIO_MODE_OUTPUT); // configura el pin como salida
while (1)
{
gpio_set_level(LED_POWER, 1); // establece el pin en alto
vTaskDelay(pdMS_TO_TICKS(TIEMPO_DE_ESPERA)); // espera 1 segundo
gpio_set_level(LED_POWER, 0); // establece el pin en bajo
vTaskDelay(pdMS_TO_TICKS(TIEMPO_DE_ESPERA)); // espera 1 segundo
}
}
Ejemplo 2 – Parpadeo de LED al presionar un botón
main.c
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define LED_POWER GPIO_NUM_5 // Pin del LED
#define BOTON GPIO_NUM_4 // Pin del botón
#define TIEMPO 40 // Tiempo de parpadeo en ms
void destello() {
for (int i = 0; i < 4; i++) {
gpio_set_level(LED_POWER, 0); // LED ON
vTaskDelay(pdMS_TO_TICKS(TIEMPO));
gpio_set_level(LED_POWER, 1); // LED OFF
vTaskDelay(pdMS_TO_TICKS(TIEMPO));
}
}
void app_main(void) {
// Configuración de LED
gpio_reset_pin(LED_POWER);
gpio_set_direction(LED_POWER, GPIO_MODE_OUTPUT);
gpio_set_level(LED_POWER, 1); // Apagado inicial
// Configuración de botón con pull-up
gpio_reset_pin(BOTON);
gpio_set_direction(BOTON, GPIO_MODE_INPUT);
gpio_set_pull_mode(BOTON, GPIO_PULLUP_ONLY);
while (1) {
if (gpio_get_level(BOTON) == 0) {
destello();
// Esperar que se suelte el botón
while (gpio_get_level(BOTON) == 0) {
vTaskDelay(pdMS_TO_TICKS(10));
}
}
vTaskDelay(pdMS_TO_TICKS(100));
}
}
Ejemplo 3 – Encender y apagar un LED con botón (toggle + punteros)
main.c
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "stdio.h"
#include "stdbool.h"
// Pines
#define LED GPIO_NUM_5
#define BOTON GPIO_NUM_4
// Función que configura el LED y el botón
void configurar_gpio(gpio_num_t pin_led, gpio_num_t pin_boton) {
// Configurar botón
gpio_reset_pin(pin_boton);
gpio_set_pull_mode(pin_boton, GPIO_PULLUP_ONLY);
gpio_set_direction(pin_boton, GPIO_MODE_INPUT);
// Configurar LED
gpio_reset_pin(pin_led);
gpio_set_direction(pin_led, GPIO_MODE_OUTPUT);
gpio_set_level(pin_led, 1); // LED apagado (activo en bajo)
}
// Función que alterna el estado del LED según el botón
void apagarEncender(gpio_num_t pin_led, gpio_num_t pin_boton, bool *estado_led, int *estado_anterior) {
int estado_actual = gpio_get_level(pin_boton);
if (*estado_anterior == 1 && estado_actual == 0) {
*estado_led = !(*estado_led); // Invertir estado del LED
gpio_set_level(pin_led, *estado_led ? 0 : 1); // Activo en bajo
printf("LED %s\n", *estado_led ? "ENCENDIDO" : "APAGADO");
vTaskDelay(pdMS_TO_TICKS(50)); // Debounce
}
*estado_anterior = estado_actual; // Actualizar estado anterior
}
void app_main() {
configurar_gpio(LED, BOTON);
// Variables para el estado (usadas con punteros)
bool estado_led = false;
int estado_boton = 1;
while (1) {
apagarEncender(LED, BOTON, &estado_led, &estado_boton);
vTaskDelay(pdMS_TO_TICKS(10));
}
}
0 Comentarios