uart_console.c
Une console de commande change le DevKit en banc de test : sans recompiler, on allume, on interroge la mémoire. Sur le H2, le port USB-Serial/JTAG sert nativement de stdin/stdout — aucun câble USB-UART.
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. Un câble USB-C vers le port USB-Serial/JTAG du DevKit.
Branchement
Aucun câblage : GPIO26/27 sont reliés au connecteur USB du DevKit. idf.py monitor ouvre la console ; LED sur GPIO8 pour voir les effets.
Fonctionnement
fgets lit le flux octet par octet depuis stdin (routed sur l'USB-Serial/JTAG) ; strstr reconnaît les commandes. Le NULL de sortie signale l'absence de données : on rend la main au RTOS. 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
Ajoutez des commandes de test radio (envoi trame 802.15.4), ou un mode « log level » pour régler esp_log en direct.
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);
}
}
}