blink_main.c
Le hello-world ESP-IDF sur le H2 : le pilote GPIO et les tâches FreeRTOS remplacent l'Arduino. Le log affiche la mémoire libre à chaque battement, réflexe avant d'empiler les composants radio 802.15.4.
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. Aucun : LED utilisateur du DevKitM-1/DevKitC-1 (GPIO8) ou LED + 330 Ω.
Branchement
Rien à câbler sur le DevKit ; sinon LED sur GPIO8 via 330 Ω vers GND. Console série sur le port USB-Serial/JTAG (GPIO26/27).
Fonctionnement
app_main est le point d'entrée lancé par le RTOS ; gpio_set_level pilote la broche et vTaskDelay met la tâche en veille 500 ms sans bloquer le scheduler — la base du code ESP-IDF. 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
Passez au LEDC pour une respiration, ou créez deux tâches de priorités différentes pour voir l'ordonnancement FreeRTOS.
blink_main.c
// blink_main.c — projet minimal ESP-IDF v5.x pour ESP32-H2.
// idf.py set-target esp32h2 && idf.py flash monitor
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#define BROCHE_LED GPIO_NUM_8 // LED utilisateur de nombreux DevKitC-1
static const char *TAG = "blink";
void app_main(void)
{
ESP_LOGI(TAG, "Clignotement H2 demarre");
gpio_reset_pin(BROCHE_LED);
gpio_set_direction(BROCHE_LED, GPIO_MODE_OUTPUT);
int n = 0;
while (1) {
gpio_set_level(BROCHE_LED, n & 1);
ESP_LOGI(TAG, "LED %d — heap libre %u", n & 1,
(unsigned)xPortGetFreeHeapSize());
n++;
vTaskDelay(pdMS_TO_TICKS(500)); // cede le CPU au scheduler
}
}