uart_console.c

ESP32-H2 · Fichier : uart_console.c · Langage : C · Usage : Créer une console série de commande

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

← Retour à la fiche