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));
    }
}