uart_console.c

ESP32-H2 · Archivo : uart_console.c · Lenguaje : C · Uso : Créer une console série de commande

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

← Volver a la ficha