Compilando código no ESP-IDF “Puro”

Seguem instruções para compilação e transferência de código para placas ESP32 usando um fluxo de trabalho como:

Fluxo adotado:

Ambiente:


Estruturar Pastas do Projeto

Estrutura Esperada

O compilador ESP-IDF espera uma estrutura de arquivos do tipo:

O main.c seria o seu código principal.

Você deve gerar os arquivos:CMakeLists.txt e main/CMakeLists.txt.

Obs.: Um projeto já criado e compilado pelo ESP-IDF pode conter ainda a pasta sdkconfig:

Mas o arquivo sdkconfig não é gerado manualmente. Ele é gerado pelo próprio ESP-IDF quando:

  1. Na pasta raiz do projeto:

  2. Com ambiente ESP-IDF carregado (terminal aberto via EIM):

    Isso abre a configuração do ESP-IDF.

  3. Depois de sair/salvar, aparecerá:

    O sdkconfig é um arquivo gerado/configurado pelo ESP-IDF e não é recomendável começar digitando seu conteúdo manualmente.

Então…

1. Criar Pastas

Então sugere-se (no terminal) fazer algo como:

Isto gera uma estrutura inicial como:

2. Criar o CMakeLists.txt principal

Na pasta ../Projeto1/:

Conteúdo:

Portanto:

3. Criar main/CMakeLists.txt

Entre em main:

Para o nosso projeto com GPIO + DAC + GPTimer, usamos:

Eventualmente o main/CMakeLists.txt precisa declarar os drivers usados, por exemplo:

4. Criar o main.c

Ainda em main:

Depois podemos abrir no Sublime Text:

A estrutura completa passa a ser:

Depois…

5. Selecionar o chip

IPORTANTE: Os próximos comandos/estapas já consideram que você esteja usando o terminal com ambiente Python ativado para uso pelo ESP-IDF. Se ainda não o fez, entre no App gráfico EIM e selecione: XXX. Note a opção para ativar o terminal em:

 

Antes de compilar, devemos informar ao ESP-IDF que nossa placa é o ESP32 clássico:

Isso também participa da geração/configuração do sdkconfig.

Depois:

e podemos conferir as configurações.

Obs.: comandos dados à partir da pasta raiz (../Projeto1/) dentro do ambiente ESP-IDF (terminal ativado via EMI). Estes comandos são realizados uma única vez.

6. Compilar

Na pasta raiz (../Projeto1/):

Se tudo estiver correto, será criada a pasta:


7. Gravar na ESP32

No nosso caso, a placa aparecia no macOS como algo semelhante a:

Então:

ou simplesmente:

se tivermos configurado a porta anteriormente.

8. Monitorar comunicação serial

Para acompanhar a execução:

Usar a combinação de teclas CTRL/Command+ ] para sair do modo Monitor.

9. Fazer tudo junto

Para fazer build + flash + monitor de uma só vez:

Usar a combinação de teclas CTRL/Command+ ] para sair do modo Monitor.


Resumo dos Comandos

Dentro do abiente (Python) ativado do ESP-IDF e na pasta raiz do Projeto:

Ou simplesmente:


Migração Arduino-IDE para ESP-IDF 6.1

Código feito para Arduino-IDE contêm as seções:

mas programando ESP-IDF “Puro”, teremos apenas:

A migração pode ainda envolver adaptação de alguns comandos:

ArduinoESP-IDF
dacWrite (DAC_PIN, Table[Index]);dac_oneshot_output_voltage (
    dac_handler,
    Table[Index]
);
pinMode (BUTTON_PIN, INPUT_PULLUP);gpio_config_t button_config = {
    .pin_bit_mask = (1ULL << BUTTON_PIN),
    .mode = GPIO_MODE_INPUT,
    .pull_up_en = GPIO_PULLUP_ENABLE,
    .pull_down_en = GPIO_PULLDOWN_DISABLE,
    .intr_type = GPIO_INTR_DISABLE
};
digitalRead (BUTTON_PIN);gpio_get_level (BUTTON_PIN);
setup ();app_main ()`
loop ();Não existe; FreeRTOS/timers assumem o controle

O timer passou para o GPTimer:

com funções:

Atenção ao main/CMakeLists.txt

Se eventualmente forem usados três drivers novos, seu main/CMakeLists.txt precisa declarar dependências associadas aos drivers.

Por exemplo, se o seu arquivo atualmente contiver algo como:

deve ser modificado para algo como:

Isso é importante no IDF 6.x porque os drivers foram separados em componentes próprios.

A documentação do GPIO, por exemplo, especifica explicitamente REQUIRES esp_driver_gpio; o mesmo princípio vale para GPTimer e DAC.


Referências


Fernando Passold, em 13/09/2026