Laboratório 02
A documentação desta atividade de laboratório é complementar a documentação principal da disciplina.
Utilize como base a descrição apresentada no Moodle da disciplina.
| Tarefa | Template | Início | Fim | Conteúdo |
|---|---|---|---|---|
| LAB02 | TPL02 | 30-Mar-2026 | 06-Apr-2026 | Configuração do Ambiente ESP32 (Parte 02); |
Checklist — Configuração do Ambiente ESP32 (Parte 02)
- Verificar
git --version - Abrir o VS Code
- Abrir a extensão PlatformIO IDE
- Instalar a extensão Wokwi
- Ativar/configurar o Wokwi
- Criar um projeto ESP32
- Selecionar o framework Arduino
- Executar o primeiro Build
- Criar
wokwi.toml - Criar
diagram.json - Executar a simulação
- Verificar o Serial Monitor
- Atualizar o repositório no GitHub
- Executar
git push - Confirmar que o projeto está disponível no GitHub
- Logout
Estrutura organizacional dos repositórios
ELT73A-S22-2026-2
├── Times
│ ├── Grupo-A
│ ├── ...
│ ├── Grupo-P # (Professor)
│ └── Grupo-N # (Notas)
└── Repositórios
├── lab02-template
├── lab02-grupo-a
├── ...
├── lab02-grupo-p # (Professor)
└── lab02-grupo-n # (Notas)
Verifique o seu ambiente de desenvolvimento
- Git SCM
- GitHub CLI
- VS Code
- Wokwi
- PlatformIO
- Drivers
- Docker
O Git é a ferramenta de gerenciamento de código-fonte mais utilizada por desenvolvedores profissionais.
- O Git é um sistema de controle de versão distribuído gratuito e de código aberto, projetado para lidar com tudo, desde projetos pequenos até muito grandes, com rapidez e eficiência.
winget install --id Git.Git -e --source winget
Configurações do git:
git config --list --show-origin
O GitHub CLI traz o GitHub para o seu terminal.
- O GitHub CLI é uma ferramenta de linha de comando que permite interagir com o GitHub diretamente pelo terminal. Está disponível para Windows, macOS e Linux.
winget install --id GitHub.cli -e --source winget
Status de login do GitHub CLI:
gh auth status
Visual Studio Code: IDE e Editor de Código para Desenvolvimento de Software.
- O VS Code é um editor de código-fonte gratuito criado pela Microsoft para Windows, Linux e macOS. Inclui suporte para depuração, controle Git integrado, realce de sintaxe, conclusão inteligente de código, snippets e refatoração de código.
winget install --id Microsoft.VisualStudioCode -e --source winget
Extensões instaladas do Visual Studio Code para o perfil ESP32IO:
code --list-extensions --profile "ESP32IO"
Inicie o projeto no PlatformIO:
pio project init -b esp32dev -O "framework=arduino" -O "monitor_speed=115200" --sample-code
Wokwi para VSCode: Simulador de sistemas embarcados e IoT com suporte para ESP32, Arduino e Raspberry Pi Pico.
- Wokwi para VSCode Seu código nunca sai do seu computador - o Wokwi executa a simulação dentro do VS Code, utilizando os binários de firmware do seu projeto.
code --install-extension wokwi.wokwi-vscode --profile "ESP32IO"
PlatformIO IDE para VSCode: Sua porta de entrada para a excelência no desenvolvimento de software embarcado.
- PlatformIO IDE para VSCode Desbloqueie o verdadeiro potencial do desenvolvimento de software embarcado com o ecossistema colaborativo do PlatformIO, adotando princípios declarativos, metodologias orientadas a testes e toolchains modernas para um sucesso incomparável.code --install-extension platformio.platformio-ide --profile "ESP32IO"
Instale a plataforma espressif32:
pio platform install espressif32Você precisa editar a variável de ambiente do sistema chamada Path e adicionar o caminho %USERPROFILE%\.platformio\penv\Scripts\ no início da lista.
Inicie o projeto no PlatformIO:
pio project init -b esp32dev -O "framework=arduino" -O "monitor_speed=115200" --sample-code
- Conecte o ESP32 ao computador via USB.
- Abra o Gerenciador de Dispositivos (clique com o botão direito no Menu Iniciar → Gerenciador de Dispositivos).
- Expanda a seção Portas (COM e LPT).
- Procure por um dispositivo similar a:
- Silicon Labs CP210x USB to UART Bridge (COMx)
- Driver Windows CH340/CH341 USB para porta serial
- FTDI ou “Dispositivo Serial USB (COMx)”
Anote o número da porta (ex: COM4, COM6, COM12). Se não aparecer nenhuma porta nova, o driver não está instalado. Baixe o driver correspondente (CP210x ou CH340) no site do fabricante da placa.
pip install esptool
esptool chip-id
Docker Desktop & WSL 2: O Docker Desktop no Windows 11 utiliza a arquitetura do WSL 2 para executar containers Linux nativamente com alta performance.
Habilitação e Atualização do WSL 2:
wsl --installwsl --update && wsl --set-default-version 2Instalação do Docker Desktop via Winget:
winget install --id Docker.DockerDesktop -eConfirme no terminal integrado do VS Code:
wsl --version && docker --version && docker compose versionTeste rápido com a imagem oficial do Nginx:
docker run --rm -d -p 8080:80 --name teste-nginx nginxAcesse no navegador:http://localhost:8080
Pare o container:
docker stop teste-nginx
Configure o nome de usuário para todos os repositórios locais ligados às suas transações de commit:
git config --global user.name "Your Name"
Configure o email de usuário para todos os repositórios locais ligados às suas transações de commit:
git config --global user.email "you@example.com"
É recomendado verificar se a instalação do seu Git não está realizando nenhuma transformação entre LFs e CRLFs.
git config --global core.autocrlf false
Configure o git para usar o Visual Studio Code como editor padrão para tarefas como escrever mensagens de commit ou rebases interativos
git config --global core.editor "code --wait"
Habilite a coloração automática da saída da linha de comando do Git:
git config --global color.ui auto
Configura o Git para usar main como o nome do branch padrão sempre que você inicializar um novo repositório localmente:
git config --global init.defaultBranch main
Liste as configurações aplicadas:
git config --list --show-origin
Clone o repositório inicial do LAB02
Escolha o seu grupo e entre com o comando abaixo para criar o repositório no GitHub:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- P
- Grupo: Grupo-A (slug:
grupo-a) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-a
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-a/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-a
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-a.git && cd lab02-grupo-a
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-B (slug:
grupo-b) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-b
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-b/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-b
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-b.git && cd lab02-grupo-b
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-C (slug:
grupo-c) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-c
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-c/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-c
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-c.git && cd lab02-grupo-c
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-D (slug:
grupo-d) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-d
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-d/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-d
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-d.git && cd lab02-grupo-d
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-E (slug:
grupo-e) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-e
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-e/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-e
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-e.git && cd lab02-grupo-e
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-F (slug:
grupo-f) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-f
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-f/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-f
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-f.git && cd lab02-grupo-f
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-G (slug:
grupo-g) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-g
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-g/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-g
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-g.git && cd lab02-grupo-g
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-H (slug:
grupo-h) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-h
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-h/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-h
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-h.git && cd lab02-grupo-h
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-I (slug:
grupo-i) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-i
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-i/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-i
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-i.git && cd lab02-grupo-i
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-J (slug:
grupo-j) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-j
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-j/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-j
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-j.git && cd lab02-grupo-j
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-K (slug:
grupo-k) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-k
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-k/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-k
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-k.git && cd lab02-grupo-k
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-L (slug:
grupo-l) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-l
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-l/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-l
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-l.git && cd lab02-grupo-l
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-M (slug:
grupo-m) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-m
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-m/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-m
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-m.git && cd lab02-grupo-m
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
- Grupo: Grupo-P (slug:
grupo-p) - Repositório: https://github.com/ELT73A-S22-2026-2/lab02-grupo-p
- Commits: https://github.com/ELT73A-S22-2026-2/lab02-grupo-p/commits/main/
- Time: https://github.com/orgs/ELT73A-S22-2026-2/teams/grupo-p
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%ELT73A" & cd /d "%USERPROFILE%ELT73A"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT73A-S22-2026-2/lab02-grupo-p.git && cd lab02-grupo-p
3. Abra o conteúdo do repositório no perfil ESP32IO do VS Code :
code . --profile "ESP32IO"
Como fazer commit da atualizações
Verifique o status do repositório:
git status
Adicione os arquivos modificados:
git add .
Realize o commit das alterações:
git commit -m "Descrição breve das alterações realizadas!"
Envie para o repositório remoto (GitHub):
git push
Vizualize o log de alterações:
git log
Vizualize no GitHub:
gh repo view --web
Envie o link do repositório do seu grupo no Moodle:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- P
Repositório do Grupo A para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo B para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo C para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo D para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo E para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo F para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo G para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo H para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo I para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo J para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo K para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo L para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo M para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo P para Laboratório 02:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Cada cartão Ponto de commit é uma tarefa: faça-a, copie o comando do cartão e rode. A mensagem começa com o código (T1:, T2:…) — é como a correção identifica sua entrega. Um commit por tarefa; pode refazer (vale o mais recente); e não esqueça o git push. Detalhes em Como funciona a avaliação.
Crie um novo projeto no PlatformIO
pio project init -b esp32dev -O "framework=arduino" -O "monitor_speed=115200" --sample-code
include - Put project header files here
lib - Put project specific (private) libraries here
src - Put project source files here
platformio.ini - Project Configuration File
Resolving esp32dev dependencies...
Already up-to-date.
Project has been successfully initialized!
pio project init
git add . && git commit -m "T1: pio project init" && git push
Crie ou edite o arquivo src/main.cpp com a seguinte estrutura:
- └── 📂src
- └── 📄main.cpp
#include <Arduino.h>
// Definição de pinos
#define LED_PIN 2
// Protótipos de funções (obrigatório em C/C++ padrão)
void blinkLed(uint8_t pin, uint16_t delayMs);
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
Serial.println("ESP32 Inicializado!");
}
void loop() {
blinkLed(LED_PIN, 500);
}
// Implementação de funções auxiliares
void blinkLed(uint8_t pin, uint16_t delayMs) {
digitalWrite(pin, HIGH);
delay(delayMs);
digitalWrite(pin, LOW);
delay(delayMs);
}
pio project init
git add . && git commit -m "T2: pio project init" && git push
ESP32 Arduino Hal Logging
Aqui está um exemplo completo para o arquivo src/main.cpp.
Este código demonstra a diferença entre as macros nativas do ESP32 Arduino Hal Logging (log_i, log_w, log_e, etc.) e o método tradicional Serial.println(), além de realizar o piscar de LED (blink) assíncrono utilizando millis().
Código: src/main.cpp
- └── 📂src
- └── 📄main.cpp
#include <Arduino.h>
// Definição do pino do LED (GPIO 2 é o LED embutido na maioria das placas ESP32 DevKit)
#define LED_PIN 2
// Intervalo de tempo para o Blink (em milissegundos)
const unsigned long BLINK_INTERVAL = 500;
// Variáveis de controle de tempo
unsigned long previousMillis = 0;
bool ledState = LOW;
uint32_t counter = 0;
void setup() {
// Configura o pino do LED como saída
pinMode(LED_PIN, OUTPUT);
// Inicializa a comunicação serial a 115200 baud
Serial.begin(115200);
// Aguarda um instante para a estabilização da conexão Serial
delay(1000);
Serial.println("\n==============================================");
Serial.println(" ESP32 Lab: Teste de Logs e Blink de LED ");
Serial.println("==============================================\n");
// Mensagens de Log do ESP32 (requer CORE_DEBUG_LEVEL > 0 no platformio.ini)
log_v("Log de Verbose: Informação detalhada/baixa relevância.");
log_d("Log de Debug: Informação para depuração do sistema.");
log_i("Log de Info: Sistema inicializado com sucesso no pino GPIO %d.", LED_PIN);
log_w("Log de Warning: Este é um exemplo de aviso!");
log_e("Log de Error: Este é um exemplo de erro simulação!");
}
void loop() {
unsigned long currentMillis = millis();
// Lógica de tempo não-bloqueante (evita o uso de delay)
if (currentMillis - previousMillis >= BLINK_INTERVAL) {
previousMillis = currentMillis;
// Inverte o estado do LED
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
counter++;
// Mensagem via Serial.println padrão do Arduino
Serial.print("[Arduino Serial] Ciclo do LED: ");
Serial.print(counter);
Serial.print(" | Estado atual: ");
Serial.println(ledState ? "LIGADO" : "DESLIGADO");
// Mensagem usando o Log nativo do ESP32 a cada 5 trocas de estado
if (counter % 5 == 0) {
log_i("Contador atingiu %u trocas de estado.", counter);
}
}
}
Configurar o platformio.ini
Este é o passo mais importante da aula. Abra o platformio.ini na raiz do projeto e deixe-o assim:
- └── 🔧platformio.ini
; CORE_DEBUG_LEVEL define ate que nivel de log sera COMPILADO:
; 0 = NONE | 1 = ERROR | 2 = WARN | 3 = INFO | 4 = DEBUG | 5 = VERBOSE
build_flags =
-D CORE_DEBUG_LEVEL=5
-D CONFIG_ARDUHAL_LOG_COLORS=1 ; Habilita cores no console
| Macro | CORE_DEBUG_LEVEL ≥ | Uso típico |
|---|---|---|
log_e("...", ...) | 1 | Erro |
log_w("...", ...) | 2 | Aviso |
log_i("...", ...) | 3 | Informação |
log_d("...", ...) | 4 | Debug |
log_v("...", ...) | 5 | Verbose |
log_buf_i(buf, tam) | 3 | Dump hexadecimal |
Em platformio.ini: build_flags = -DCORE_DEBUG_LEVEL=<0..5>
Se você esquecer o -DCORE_DEBUG_LEVEL, o valor padrão costuma ser 0 (NONE) e nada aparece, mesmo com o código correto. Se seus logs sumiram, comece a investigação por aqui.
Teste de Logs e Blink de LED
git add src/main.cpp && git commit -m "T3: Teste de Logs e Blink de LED" && git push
Simulação com Wokwi
Objetivo: validar lógica sem depender da bancada.
Opção A — Extensão Wokwi no VS Code
- Instale Wokwi Simulator
- No projeto, use/crie:
diagram.json— circuito (ESP32, LED, fios)wokwi.toml— liga o firmware do PlatformIO ao simulador (conforme docs do template)
- Comando típico da extensão: Start Simulator
- Abra o monitor serial do Wokwi e veja o mesmo
Serial.println
A basic wokwi.toml file looks like this:
- ├── 🔧wokwi.toml👈 Criar Aqui
- └── 📂src
- └── 📄main.cpp
[wokwi]
version = 1
firmware = '.pio/build/esp32dev/firmware.bin'
elf = '.pio/build/esp32dev/firmware.elf'
Opção B — Wokwi no navegador
- Acesse wokwi.com
- Novo projeto → ESP32
- Cole o conteúdo de
src/main.cpp - Monte LED no GPIO do
LED_BUILTIN(ou no GPIO que o template usar) - Start e observe LED + serial
Exemplo mínimo de ideia de diagram.json (LED no GPIO 2)
Muitos DevKit tratam LED embutido no GPIO 2 — confirme no template.
Checklist Wokwi
- Projeto simula e imprime no serial a mensagem do grupo
- LED pisca conforme o
loop() - Você não precisou da placa física para esta parte
- └── 🔧diagram.json
{
"version": 1,
"author": "Uri Shaked",
"editor": "wokwi",
"parts": [
{
"type": "wokwi-esp32-devkit-v1",
"id": "esp",
"top": 0,
"left": 0,
"attrs": {}
},
{
"type": "wokwi-led",
"id": "led1",
"top": -3.33,
"left": 153.33,
"attrs": { "color": "red" }
},
{
"type": "wokwi-resistor",
"id": "r1",
"top": 64,
"left": 149.33,
"rotate": 90,
"attrs": {}
}
],
"connections": [
["esp:TX0", "$serialMonitor:RX", "", []],
["esp:RX0", "$serialMonitor:TX", "", []],
["esp:GND.1", "led1:C", "black", ["h0"]],
["led1:A", "r1:1", "green", ["v0"]],
["r1:2", "esp:D2", "green", ["h0", "v38"]]
]
}
Configurando o Wokwi
git add diagram.json wokwi.toml && git commit -m "T4: Configurando o Wokwi" && git push
Tipos de Dados e Constantes no ESP32
Bits, Bytes e Operadores no ESP32
Estruturas de Controle no ESP32
CI workflow
Example workflow (.github/workflows/grade.yml):
- └── 📂.github
- └── 📂workflows
- └── 🚀grade.yml
- └── 📂workflows
name: Build & Test
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Cache PlatformIO
uses: actions/cache@v5
with:
path: |
~/.cache/pip
~/.platformio/.cache
~/.platformio/packages
key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini') }}
- name: Set up Python
uses: actions/setup-python@v7
with:
python-version: "3.12"
- name: Install PlatformIO
run: pip install platformio
- name: Build project
run: pio run
# Uncomment if you want native/unit tests in CI
# - name: Run tests
# run: pio test -e native
GitHub action
git add .github/workflows/grade.yml && git commit -m "T5: GitHub action" && git push
Wokwi for CI and GitHub Actions (TODO)
GitHub action for using Wokwi Embedded Systems Simulator in your CI workflow.
VS Code Terminal Configuration
Configure Git Bash como terminal integrado do Visual Studio Code para evitar problemas de formatação de texto e comandos:
- └── 📂.vscode
- └── 🔧settings.json
"terminal.integrated.defaultProfile.windows": "Git Bash",
Crie um gh alias para deploy-esp32io
gh alias set deploy-esp32io 'tag="$1"; gh release create "$tag" .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/firmware.elf --generate-notes' --shell
Como funciona:
Esse alias que você configurou faz o seguinte fluxo em uma única linha de comando:
- Recebe o parâmetro
tag— o primeiro argumento passado ao comando (gh deploy-debug v1.0.0definetag="v1.0.0"). - Executa o
gh release create— cria um release no GitHub com a tag informada. - Anexa os artefatos — inclui tanto o firmware.bin (usado para gravar no ESP32) quanto o firmware.elf (útil para depuração).
- Gera notas automaticamente — o parâmetro
--generate-notesfaz o GitHub compilar um changelog básico com commits e PRs desde o último release.
Ou seja, com um único comando você publica uma nova versão do firmware no GitHub, já com os dois arquivos necessários: o .bin para flash e o .elf para debug.
Uso:
gh deploy-esp32io v1.0.0
Rápida verificação do upload
Assim que o comando terminar, você poderá verificar o upload diretamente em seu terminal usando:
gh release view v1.0.0 --web
publica o release do firmware
git commit --allow-empty -m "T6: publica o release do firmware" && git push
gh deploy-esp32io v1.0
Logout do seu ambiente dev, git e gh
Para o git "esquecer" suas informações salvas:
git credential-manager erase && cmdkey /list | findstr "github" && gh auth logout