Introdução
Ambiente de desenvolvimento
Configuração do 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"
Configurar o terminal do VS Code. No arquivo .vscode/settings.json
{
"terminal.integrated.defaultProfile.windows": "Command Prompt"
}
Wokwi para VSCode: Simulador de sistemas embarcados e IoT com suporte para ESP32.
- Wokwi para VSCode executa a simulação dentro do VS Code, utilizando os binários compilados pelo PlatformIO.
code --install-extension wokwi.wokwi-vscode --profile "ESP32IO"
- Wokwi CLI: Instale via PowerShell.
iwr https://wokwi.com/ci/install.ps1 -useb | iex
wokwi-cli -h
- Obtenha seu token em https://wokwi.com/dashboard/ci
setx WOKWI_CLI_TOKEN "wok_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
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" --ide vscode --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 git
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
Status do git, gh e code:
Versão do git e configurações:
git --version && git config --list --show-origin
Versão do GitHub CLI e status de login:
gh --version && gh auth status
Versão do Visual Studio Code e extensões instaladas:
code -v && code --list-extensions --profile "ESP32IO"
Logout
Para o git "esquecer" suas informações salvas:
git credential-manager erase && cmdkey /list | findstr "github" && gh auth logout
Clone o repositório inicial do LABXY (Exemplo)
Escolha o 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
- N
- Grupo: Grupo-A (slug:
grupo-a) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-a
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-a/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-a
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-a.git && cd labxy-grupo-a
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-B (slug:
grupo-b) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-b
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-b/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-b
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-b.git && cd labxy-grupo-b
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-C (slug:
grupo-c) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-c
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-c/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-c
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-c.git && cd labxy-grupo-c
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-D (slug:
grupo-d) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-d
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-d/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-d
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-d.git && cd labxy-grupo-d
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-E (slug:
grupo-e) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-e
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-e/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-e
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-e.git && cd labxy-grupo-e
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-F (slug:
grupo-f) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-f
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-f/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-f
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-f.git && cd labxy-grupo-f
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-G (slug:
grupo-g) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-g
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-g/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-g
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-g.git && cd labxy-grupo-g
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-H (slug:
grupo-h) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-h
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-h/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-h
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-h.git && cd labxy-grupo-h
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-I (slug:
grupo-i) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-i
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-i/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-i
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-i.git && cd labxy-grupo-i
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-J (slug:
grupo-j) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-j
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-j/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-j
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-j.git && cd labxy-grupo-j
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-K (slug:
grupo-k) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-k
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-k/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-k
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-k.git && cd labxy-grupo-k
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-L (slug:
grupo-l) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-l
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-l/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-l
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-l.git && cd labxy-grupo-l
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-M (slug:
grupo-m) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-m
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-m/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-m
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-m.git && cd labxy-grupo-m
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-P (slug:
grupo-p) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-p
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-p/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-p
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-p.git && cd labxy-grupo-p
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-N (slug:
grupo-n) - Repositório: https://github.com/ELT85B-N21-2026-2/labxy-grupo-n
- Commits: https://github.com/ELT85B-N21-2026-2/labxy-grupo-n/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-n
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/labxy-grupo-n.git && cd labxy-grupo-n
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
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
- N
Repositório do Grupo A para Laboratório XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 XY:
- 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 N para Laboratório XY:
- 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.
Estrutura do Laboratório XY
Estrutura organizacional dos repositórios
ELT73A-S22-2026-2
├── Times
│ ├── Grupo-A
│ ├── ...
│ ├── Grupo-P # (Professor)
│ └── Grupo-N # (Notas)
└── Repositórios
├── lab00-template
├── lab00-grupo-a
├── ...
├── lab00-grupo-p # (Professor)
└── lab00-grupo-n # (Notas)
Como funciona a avaliação
Nesta disciplina, você entrega cada tarefa fazendo um commit. Ao longo das aulas, os cartões "Ponto de commit" mostram exatamente o que salvar e quando.
Como é um "Ponto de commit"
Quando você conclui uma tarefa, encontra um cartão como este (numeração e pontos são ilustrativos):
exemplo — pisca o LED_BUILTIN
git add . && git commit -m "T1: exemplo — pisca o LED_BUILTIN" && git push
Clique em Copiar no bloco de código do cartão e cole o comando no terminal, dentro da pasta do seu repositório. Feito isso, a tarefa está entregue.
Passo a passo
- Faça a tarefa descrita logo antes do cartão.
- Copie o comando do cartão e rode no terminal. Ele é algo como:
git add . && git commit -m "T1: ..." && git push
- Pronto — esse commit registra a tarefa T1. Siga para o próximo ponto.
A mensagem começa com o código da tarefa (T1:, T2:, …). É por ela que a correção automática identifica o que você entregou — não altere esse prefixo e use exatamente o que o cartão copia.
Regras que importam
- Um commit por tarefa, na ordem. Prefira commitar cada ponto separadamente.
- Pode refazer: se melhorar uma tarefa, faça um novo commit com o mesmo código (
T2: ...). Vale sempre o mais recente. - Não esqueça o
git push— sem enviar, seu trabalho não chega para correção. - Uma tarefa sem commit correspondente vale zero.
Como a nota é calculada
- A cada
push, uma correção automática avalia cada tarefa no estado do commit dela. Por isso tudo bem reescrever o mesmo arquivo entre as partes: cadaTné avaliado no seu próprio ponto da história. - Cada tarefa verifica se o projeto compila e se cumpre os requisitos daquele ponto. A nota da tarefa é proporcional ao que passou.
- A nota final é a soma dos pontos, normalizada de 0 a 10.
Dicas rápidas
- Compile/teste antes de commitar.
- Use exatamente a mensagem do cartão (o botão de copiar já traz o código certo).
- Fez os commits na ordem
T1,T2, …? Ótimo — é assim que a numeração casa com a correção.
Tabela dos LABs com links internos
| Tarefa | Template | Início | Fim | Conteúdo |
|---|---|---|---|---|
| LAB00 | 20-08-2026 | 27-08-2026 | Apresentação da Disciplina; Formação dos grupos; | |
| LAB01 | 27-08-2026 | 03-09-2026 | Visão Geral sobre IoT; | |
| LAB02 | 03-09-2026 | 10-09-2026 | A Internet na IoT; | |
| LAB03 | 10-09-2026 | 17-09-2026 | Sensores e Atuadores em IoT; | |
| LAB04 | 17-09-2026 | 24-09-2026 | Pilha de Protocolos IoT: Enlace e Rede; | |
| LAB05 | 24-09-2026 | 01-10-2026 | Pilha de Protocolos IoT: Aplicação; | |
| LAB06 | 01-10-2026 | 08-10-2026 | Computação em Nevoeiro (Fog Computing); | |
| LAB07 | 08-10-2026 | 15-10-2026 | Plataforma de Serviços IoT; | |
| LAB08 | 15-10-2026 | 22-10-2026 | Mercados de IoT: Agricultura e Energia; | |
| LAB09 | 22-10-2026 | 29-10-2026 | Mercados de IoT: Indústria e Transporte; | |
| LAB10 | 29-10-2026 | 05-11-2026 | Padrões IoT; |
Tabela dos LABs com links externos
| Tarefa | Template | Início | Fim | Conteúdo |
|---|---|---|---|---|
| LAB00 | 20-08-2026 | 27-08-2026 | Apresentação da Disciplina; Formação dos grupos; | |
| LAB01 | 27-08-2026 | 03-09-2026 | Visão Geral sobre IoT; | |
| LAB02 | 03-09-2026 | 10-09-2026 | A Internet na IoT; | |
| LAB03 | 10-09-2026 | 17-09-2026 | Sensores e Atuadores em IoT; | |
| LAB04 | 17-09-2026 | 24-09-2026 | Pilha de Protocolos IoT: Enlace e Rede; | |
| LAB05 | 24-09-2026 | 01-10-2026 | Pilha de Protocolos IoT: Aplicação; | |
| LAB06 | 01-10-2026 | 08-10-2026 | Computação em Nevoeiro (Fog Computing); | |
| LAB07 | 08-10-2026 | 15-10-2026 | Plataforma de Serviços IoT; | |
| LAB08 | 15-10-2026 | 22-10-2026 | Mercados de IoT: Agricultura e Energia; | |
| LAB09 | 22-10-2026 | 29-10-2026 | Mercados de IoT: Indústria e Transporte; | |
| LAB10 | 29-10-2026 | 05-11-2026 | Padrões IoT; |
Teste Slidev 16/9
📌 Contexto do Projeto: Laboratório IoT (Node-RED + MQTT + SQLite3 + Docker)
Aqui está um resumo compacto e estruturado da arquitetura e do script gerador (gen_portal.py), pronto para você copiar e colar como contexto inicial em um novo chat:
Objetivo Geral
O projeto é um gerador em Python (gen_portal.py) que cria automaticamente um ambiente Docker para aulas de IoT. Ele expõe contêineres Node-RED isolados por grupo/turma por trás de um portal Nginx (proxy reverso) e um broker MQTT Mosquitto central.
Arquitetura & Nomenclatura
- Roteamento & Nomes de Serviços:
-
Convenção de Nomes:
{turma}-{identificador}(ex.:n21-a,n21-b,n21-p,n21-n). -
Reservas de Letras Especiais:
-
p→ Professor (ex.:n21-p). -
n→ Painel de Notas / Avaliador (ex.:n21-n). -
Grupos de Alunos: Usam sequencialmente o restante do alfabeto (
a,b,c... pulandonep).
- Avaliador Distribuído (Container
{turma}-n):
- Possui o volume contendo todas as pastas dos alunos mapeado em modo leitura (
./data:/data_grupos:ro). - Vem pré-configurado com um fluxo Node-RED autogerado que executa análise estática nos arquivos
flows.jsondos alunos (checklist de nodes, tópicos, etc.) e imprime um relatório de correção/notas no Debug.
- Portal Nginx:
- Servido na porta
80. - Página Inicial (
index.html): Mantém visual dark/neon com grid e cards estilizados. Cards de alunos usam cor padrão, o Professor recebe destaque em dourado e o Avaliador de Notas em roxo. - Proxy Reverso: Redireciona a rota
/{servico}/(ex:/n21-a/) para a porta1880do respectivo container.
- Autenticação & Segurança:
- Node-RED: Cada container utiliza um
settings.jscustomizado com autenticação viaadminAuthcom hashesbcrypt(). - São gerados dois usuários por container:
{servico}(Admin) e{servico}-view(Apenas leitura). - As senhas geradas são exportadas para um arquivo
credenciais.txt.
Comandos Úteis de Operação
- Gerar infraestrutura (exemplo com 2 turmas e 10 grupos cada):
python3 gen_portal.py --turma n21 --grupos 10
- Subir o ambiente:
docker compose up -d --build
- Desabilitar/Habilitar um grupo pontualmente:
docker compose stop n21-a-nodered # Desabilita
docker compose start n21-a-nodered # Habilita
- Aplicar alterações com remoção de turmas/grupos antigos:
docker compose up -d --remove-orphans
Grok dump
Here’s a clean PlatformIO + Arduino + ESP32 starter structure you can use in your lab templates.
Recommended folder structure
labXX-template/
├── .github/
│ └── workflows/
│ └── grade.yml
├── include/
│ └── README
├── lib/
│ └── README
├── src/
│ └── main.cpp
├── test/
│ └── test_main.cpp
├── .gitignore
├── platformio.ini
└── README.md
File contents
platformio.ini
; PlatformIO Project Configuration File
; https://docs.platformio.org/page/projectconf.html
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
; Optional: common build flags
build_flags =
-DCORE_DEBUG_LEVEL=0
; Unit Testing
test_framework = unity
src/main.cpp
#include <Arduino.h>
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("LAB started - ESP32 + PlatformIO");
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
test/test_main.cpp (PlatformIO Unity test)
#include <unity.h>
#include <Arduino.h>
void setUp(void) {
// runs before each test
}
void tearDown(void) {
// runs after each test
}
void test_led_pin_mode() {
pinMode(LED_BUILTIN, OUTPUT);
TEST_ASSERT_EQUAL(OUTPUT, 1); // simple example
}
void setup() {
delay(2000); // wait for serial / board
UNITY_BEGIN();
RUN_TEST(test_led_pin_mode);
UNITY_END();
}
void loop() {
// empty
}
.gitignore
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
*.pyc
__pycache__/
.DS_Store
README.md
# LABXX - ESP32 + PlatformIO
## Requirements
- [PlatformIO](https://platformio.org/) (VS Code extension or CLI)
- ESP32 board
## Build & Upload
```bash
pio run # compile
pio run -t upload # upload
pio device monitor # serial monitor
```
Run tests
pio test
Structure
src/→ main application codeinclude/→ header fileslib/→ private librariestest/→ unit tests (Unity)
.github/workflows/grade.yml (CI – compile only)
name: Build & Test
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache PlatformIO
uses: actions/cache@v4
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini') }}
- name: Set up Python
uses: actions/setup-python@v5
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
include/README and lib/README (PlatformIO placeholders)
This directory is intended for project header files / private libraries.
Updated script snippet (replace the “Create starter folder structure” part)
# 3. Create PlatformIO starter structure
mkdir -p src include lib test .github/workflows
# platformio.ini
cat > platformio.ini << 'EOF'
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
test_framework = unity
EOF
# src/main.cpp
cat > src/main.cpp << EOF
#include <Arduino.h>
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("LAB$lab started - ESP32 + PlatformIO");
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
EOF
# test/test_main.cpp
cat > test/test_main.cpp << 'EOF'
#include <unity.h>
#include <Arduino.h>
void test_example() {
TEST_ASSERT_TRUE(true);
}
void setup() {
delay(2000);
UNITY_BEGIN();
RUN_TEST(test_example);
UNITY_END();
}
void loop() {}
EOF
# .gitignore
cat > .gitignore << 'EOF'
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
.DS_Store
EOF
# README.md
cat > README.md << EOF
# LAB$lab - ESP32 + PlatformIO
## Commands
\`\`\`bash
pio run # build
pio run -t upload # upload
pio device monitor # serial
pio test # unit tests
\`\`\`
EOF
# GitHub Actions
cat > .github/workflows/grade.yml << 'EOF'
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install PlatformIO
run: pip install platformio
- name: Build
run: pio run
EOF
# placeholders
echo "Project headers go here" > include/README
echo "Private libraries go here" > lib/README
Notes for ESP32 + PlatformIO
| Item | Recommendation |
|---|---|
| Board | esp32dev is the most common. Change to esp32-s3-devkitc-1, az-delivery-devkit-v4, etc. if needed |
| CI | Can only compile (no real hardware). Use pio run |
| Unit tests on device | pio test (requires connected board) |
| Native tests | Add a [env:native] environment if you want tests without hardware |