ledc_fade.c

ESP32-H2 · Fichier : ledc_fade.c · Langage : C · Usage : Respiration LED avec le contrôleur LEDC

Le LEDC du H2 sait ramper tout seul : ledc_set_fade_with_time calcule les pas et le matériel applique la rampe, la CPU peut dormir pendant. Deux appels par cycle pour un aller-retour 0-100 % en 1 s.

Matériel requis

Une carte ESP32-H2 (RISC-V 96 MHz, radio IEEE 802.15.4 uniquement — pas de Wi-Fi) type DevKitM-1, alimentée par USB. 1 LED + résistance 330 Ω sur GPIO8 (ou LED utilisateur).

Branchement

LED anode sur GPIO8 via 330 Ω, cathode GND. Toute broche routable vers le LEDC low-speed convient.

Fonctionnement

Un timer LEDC fixe la fréquence (5 kHz) et la résolution (10 bits) ; le canal porte le rapport cyclique. fade_start sans attente lance la rampe que le périphérique déroule sans tâche CPU. Programmez avec ESP-IDF (idf.py set-target esp32h2) ; le port USB-Serial/JTAG (GPIO26/27) sert de console et de port de flash. Maintenez Boot + Reset pour le mode download si besoin.

Pour aller plus loin

Deux canaux sur les broches R et B d'une LED RGB pour un dégradé de couleur, ou synchroniser la rampe avec la radio 802.15.4.

ledc_fade.c

// ledc_fade.c — rampe automatique du LEDC (hardware fade).
#include "driver/ledc.h"
#include "esp_log.h"

#define CANAL LEDC_CHANNEL_0
#define PIN   GPIO_NUM_8

static const char *TAG = "fade";

void app_main(void)
{
    ledc_timer_config_t timer = {
        .speed_mode = LEDC_LOW_SPEED_MODE, .duty_resolution = 10,
        .timer_num = LEDC_TIMER_0, .freq_hz = 5000, .clk_cfg = LEDC_AUTO_CLK,
    };
    ESP_ERROR_CHECK(ledc_timer_config(&timer));
    ledc_channel_config_t ch = {
        .channel = CANAL, .duty = 0, .gpio_num = PIN,
        .speed_mode = LEDC_LOW_SPEED_MODE, .timer_sel = LEDC_TIMER_0,
    };
    ESP_ERROR_CHECK(ledc_channel_config(&ch));
    ledc_fade_func_install(0);

    while (1) {
        ESP_LOGI(TAG, "montee");
        ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE, CANAL, 1023, 1000);
        ledc_fade_start(LEDC_LOW_SPEED_MODE, CANAL, LEDC_FADE_NO_WAIT);
        vTaskDelay(pdMS_TO_TICKS(1100));
        ESP_LOGI(TAG, "descente");
        ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE, CANAL, 0, 1000);
        ledc_fade_start(LEDC_LOW_SPEED_MODE, CANAL, LEDC_FADE_NO_WAIT);
        vTaskDelay(pdMS_TO_TICKS(1100));
    }
}

← Retour à la fiche