uart_console.c
Una consola de comandos convierte el DevKit en banco de pruebas: sin recompilar, se enciende y se consulta la memoria. En el H2, el puerto USB-Serial/JTAG sirve de forma nativa como stdin/stdout, sin cable USB-UART.
Hardware necesario
Una placa ESP32-H2 (RISC-V a 96 MHz, radio IEEE 802.15.4 solo — sin Wi-Fi) tipo DevKitM-1, alimentada por USB. Un cable USB-C al puerto USB-Serial/JTAG del DevKit.
Cableado
Sin cableado: GPIO26/27 están ligados al conector USB del DevKit. idf.py monitor abre la consola; LED en GPIO8 para ver los efectos.
Funcionamiento
fgets lee el flujo desde stdin (encaminado al USB-Serial/JTAG); strstr reconoce los comandos. El NULL de salida indica ausencia de datos: se cede el control al RTOS. Prográmelo con ESP-IDF (idf.py set-target esp32h2); el puerto USB-Serial/JTAG (GPIO26/27) sirve de consola y puerto de flash. Mantenga Boot + Reset para modo download si hace falta.
Para ir más lejos
Añada comandos de prueba de radio (enviar trama 802.15.4), o un modo « log level » para ajustar esp_log en directo.
uart_console.c
// uart_console.c — mini console : tapez 'led on' / 'led off'.
// Sur le DevKit, la console par defaut est deja l'USB-Serial/JTAG :
// ce code montre comment lire le flux et l'analyser ligne a ligne.
#include <string.h>
#include <stdio.h>
#include "driver/gpio.h"
#include "esp_log.h"
#define BROCHE_LED GPIO_NUM_8
static const char *TAG = "console";
void app_main(void)
{
gpio_reset_pin(BROCHE_LED);
gpio_set_direction(BROCHE_LED, GPIO_MODE_OUTPUT);
ESP_LOGI(TAG, "Console : tapez 'led on' ou 'led off'");
char ligne[64];
while (1) {
if (fgets(ligne, sizeof(ligne), stdin) == NULL) {
vTaskDelay(pdMS_TO_TICKS(50));
continue;
}
if (strstr(ligne, "led on")) {
gpio_set_level(BROCHE_LED, 1);
ESP_LOGI(TAG, "LED allumee");
} else if (strstr(ligne, "led off")) {
gpio_set_level(BROCHE_LED, 0);
ESP_LOGI(TAG, "LED eteinte");
} else if (strstr(ligne, "heap")) {
ESP_LOGI(TAG, "heap libre %u", (unsigned)xPortGetFreeHeapSize());
} else if (strlen(ligne) > 1) {
ESP_LOGW(TAG, "inconnu : %s", ligne);
}
}
}