Pular para o conteúdo principal

Questionário 02

QuizInícioFimDescrição
Q0203-09-202610-09-2026A Internet na IoT;
Atividade de EaD em Construção

A documentação desta atividade de EaD está em processo de construção e por isso pode estar incompleta.

Utilize como base a descrição apresentada no Moodle da disciplina.


Guia de Estudos: VSCode + PlatformIO para ESP32

Este guia abrange os conceitos e práticas essenciais para migrar do ambiente tradicional da Arduino IDE para o fluxo profissional do Visual Studio Code equipado com o ecossistema PlatformIO, focado no microcontrolador ESP32.

Introdução: Por que PlatformIO?​

O PlatformIO é um ecossistema de código aberto para desenvolvimento de sistemas embarcados cross-platform. Ao contrário da IDE do Arduino tradicional, ele oferece:

Gerenciamento Automático de Dependências: Instalação de toolchains, frameworks e bibliotecas isoladas por projeto.

Múltiplos Ambientes (Environments): Compilação paralela para placas, frequências e sinalizadores diferentes no mesmo repositório.

Ferramentas Avançadas de Diagnóstico: Monitor serial integrado, depuração via hardware (JTAG) e decodificação automática de stack trace.

Integração com CI/CD: Suporte nativo para automação via GitHub Actions, GitLab CI, etc.

Visão Geral do Ecossistema

Apesar de usar o Framework Arduino neste guia, o PlatformIO suporta nativamente o ESP-IDF (SDK nativo da Espressif), permitindo a transição de APIs sem mudar a ferramenta de trabalho.

Estrutura de Diretórios de um Projeto​

Ao criar um novo projeto no PlatformIO, a seguinte árvore de diretórios é gerada:

meu_projeto_esp32/
├── .pio/ # Cache, objetos compilados e bibliotecas locais (gerado auto.)
├── .vscode/ # Configurações de autocompletar e depuração do VSCode
├── data/ # Arquivos estáticos para sistemas de arquivos (LittleFS / SPIFFS)
├── include/ # Arquivos de cabeçalho globais (.h, .hpp)
├── lib/ # Bibliotecas privadas e componentes locais do projeto
├── src/ # Código-fonte principal (.cpp, .c)
│ └── main.cpp
├── test/ # Testes unitários do projeto (pio test)
├── .gitignore # Ignora a pasta .pio e temporários no Git
└── platformio.ini # Arquivo principal de configuração do projeto
Atentando para a pasta .pio

Nunca envie a pasta .pio/ para o controle de versão (Git). Ela contém binários compilados pesados e é recriada automaticamente pelo PlatformIO durante a compilação.

O Arquivo platformio.ini​

O arquivo platformio.ini é o centro nervoso do seu projeto. Ele gerencia bibliotecas, opções do compilador, parâmetros de gravação e múltiplos alvos de build.

Exemplo Completo de Configuração

[platformio]
default_envs = esp32dev_debug

[env]
platform = espressif32
framework = arduino
monitor_speed = 115200
upload_speed = 921600
board_build.filesystem = littlefs

[env:esp32dev_debug]
board = esp32dev
build_type = debug
build_flags =
-D CORE_DEBUG_LEVEL=5
-D DEBUG_MODE
monitor_filters = esp32_exception_decoder, colorize

[env:esp32dev_release]
board = esp32dev
build_type = release
build_flags =
-D CORE_DEBUG_LEVEL=0
lib_deps =
bblanchon/ArduinoJson @ ^6.21.3
knolleary/PubSubClient @ ~2.8

Principais Diretivas Explicadas​

DiretivaDescriçãoExemplo
platformPlataforma de desenvolvimento/microcontrolador.espressif32
boardPlaca-alvo específica.esp32dev, esp32-s3-devkitc-1
frameworkFramework de código utilizado.arduino ou espidf
monitor_speedVelocidade da porta serial no Monitor (baud rate).115200
upload_speedVelocidade de gravação via cabo serial.921600 ou 115200
lib_depsLista de bibliotecas externas a serem baixadas.bblanchon/ArduinoJson
build_flagsMacros (-D) e instruções passadas ao compilador.-D DEBUG
board_build.partitionsTabela personalizada de particionamento da Flash.huge_app.csv

Diferenças Críticas em Relação ao Arduino IDE​

A IDE do Arduino oculta diversos aspectos da linguagem C++ através de pré-processamento interno. No PlatformIO, utiliza-se compilação C++ rigorosa e padrão.

Inclusão Obrigatória do Cabeçalho​

No PlatformIO, todo arquivo .cpp deve incluir explicitamente o framework do Arduino:

#include <Arduino.h> // Obrigatorio no PlatformIO!

void setup() {
Serial.begin(115200);
}

void loop() {
// Código principal
}

Declaração de Protótipos de Funções​

Diferente da IDE do Arduino, funções chamadas antes de sua definição no código resultam em erro de compilação se não possuírem protótipo declarativo.

#include <Arduino.h>

void setup() {
int resultado = somar(5, 10); // ERRO: 'somar' não foi declarada neste escopo
}

void loop() {}

int somar(int a, int b) {
return a + b;
}
#include <Arduino.h>

// Protótipo da função
int somar(int a, int b);

void setup() {
int resultado = somar(5, 10); // OK!
}

void loop() {}

// Definição da função
int somar(int a, int b) {
return a + b;
}

Gerenciamento de Bibliotecas (lib_deps)​

O PlatformIO gerencia dependências de forma totalmente declarativa através do repositório PlatformIO Registry.

Opções de Sintaxe para Versões

lib_deps =
; Versão exata
bblanchon/ArduinoJson @ 6.21.3

; Compatível com a versão (sem quebrar API)
knolleary/PubSubClient @ ^2.8.0

; Link direto para repositório Git
https://github.com/meu-usuario/minha-biblioteca.git

; Caminho para biblioteca local gravada na sua máquina
file://../minhas_libs/minha_lib_local
Isolamento de Dependências

As bibliotecas listadas em lib_deps são salvas dentro da pasta .pio/libdeps/ do próprio projeto, evitando conflitos globais de versão entre diferentes projetos.

Sistemas de Arquivos (LittleFS / SPIFFS) e OTA​

Gravando Arquivos Estáticos na Flash

Crie a pasta data/ na raiz do seu projeto.

Insira os arquivos estáticos desejados (ex: index.html, style.css, config.json).

No arquivo platformio.ini, defina o sistema de arquivos desejado:

board_build.filesystem = littlefs

Execute a tarefa Build Filesystem Image e em seguida Upload Filesystem Image no painel lateral do PlatformIO.

Atualização via Rede (Over-The-Air - OTA)

Para regravar o ESP32 remotamente via Wi-Fi sem conectar o cabo USB:

[env:esp32_ota]
platform = espressif32
board = esp32dev
framework = arduino
upload_protocol = espota
upload_port = 192.168.1.150 ; IP do ESP32 na rede local
upload_flags =
--auth=minhasenhaota ; Senha configurada no código ArduinoOTA

Monitor Serial e Decodificação de Exceções​

Quando o ESP32 sofre um crash de memória (Guru Meditation Error / Panic), ele imprime na serial um endereço de pilha (stack trace) em hexadecimal inacessível.

Habilitando o Exception Decoder

Adicione o filtro esp32_exception_decoder no platformio.ini:

monitor_speed = 115200
monitor_filters = esp32_exception_decoder, colorize

Exemplo de Tradução de Erro

Ao ocorrer uma exceção, o terminal do PlatformIO apontará exatamente o arquivo e a linha da falha:

Decoding stack results

0x400d115e: causarCrash() at src/main.cpp:18
0x400d11a1: setup() at src/main.cpp:24
0x400d2105: main() at C:/Users/.../main.cpp:32

Tabela de Comandos úteis da CLI (pio)​

Você pode usar o terminal integrado do VSCode para executar tarefas via linha de comando:

Compilar o projeto do ambiente padrão​

pio run

Compilar um ambiente específico​

pio run -e esp32dev_debug

Gravar o firmware na placa​

pio run --target upload

Abrir o Monitor Serial​

pio device monitor

Limpar arquivos intermediários compilados​

pio run --target clean

Apagar completamente a memória Flash do ESP32​

pio run --target erase

Questões de Fixação​

Teste seu Conhecimento

Por que a inclusão de #include <Arduino.h> é obrigatória no PlatformIO?

Qual é a diferença entre as diretivas upload_speed e monitor_speed no platformio.ini?

Onde devem ser armazenados os arquivos estáticos destinados à partição LittleFS do ESP32?

Qual a função da chave board_build.partitions no arquivo de configuração?