Bem-vindo(a) à etapa prática do processo seletivo para o Intensivo Maker | IoT.
Esta atividade tem como objetivo avaliar suas competências em Sistemas Embarcados, com foco em organização de projeto, lógica de firmware e simulação de hardware, a partir da aplicação prática dos conhecimentos adquiridos nos cursos EAD da etapa anterior.
Objetivo principal
Avaliar sua capacidade de planejar, estruturar e desenvolver uma solução funcional de sistemas embarcados, seguindo boas práticas de engenharia.
Se você nunca utilizou Git ou GitHub, não se preocupe.
Siga atentamente os passos abaixo.
- Acesse: https://github.com
- Clique em Sign up
- Crie sua conta gratuita seguindo as instruções da plataforma
O GitHub será utilizado para:
- Envio do seu projeto
- Versionamento do código
- Correção e validação automática via GitHub Actions
O Git é a ferramenta responsável pelo controle de versões do seu código.
Baixe e instale o Git Bash:
https://git-scm.com/downloads
Verifique se o Git já está instalado:
git --versionCaso não esteja, instale pelo gerenciador de pacotes do seu sistema.
Para desenvolver o desafio, você deverá criar uma cópia deste repositório no seu GitHub.
No canto superior direito desta página, clique em Fork
Uma cópia do repositório será criada no seu perfil do GitHub
O Fork permite que você trabalhe de forma independente, sem alterar o repositório original do processo seletivo.
No repositório do seu Fork, clique em <> Code
Copie a URL e execute no terminal:
git clone https://github.com/SEU_USUARIO/nome-do-repositorio.git
cd nome-do-repositorioO comando git clone cria uma cópia local do repositório para desenvolvimento.
Você pode executar o projeto de duas formas. Escolha apenas uma.
Requisitos:
- Python 3.10 ou 3.11
- pip
Instale as dependências:
pip install -r requirements.txtEste repositório inclui um Dev Container, garantindo um ambiente padronizado.
Requisitos:
- VS Code
- Docker instalado
- Extensão Dev Containers
Passos:
- Abra o repositório no VS Code
- Clique em “Reopen in Container”
- Aguarde a criação automática do ambiente
Todas as dependências serão instaladas automaticamente.
A simulação do projeto será executada automaticamente via GitHub Actions, utilizando o Wokwi CLI.
Para isso, você precisa gerar uma API Key.
- Acesse: https://wokwi.com/dashboard/ci
- Faça login (Google ou GitHub)
- Clique em Generate API Token
- Copie a chave gerada (exemplo: wokwi-xxxxxxxx)
Importante
- Nunca faça commit dessa chave
- Ela deve ser armazenada apenas como secret no GitHub
No repositório do seu Fork:
- Vá em Settings
- Acesse Secrets and variables → Actions
- Clique em New repository secret
- Nome: WOKWI_CLI_TOKEN
- Valor: sua chave gerada
- Salve
As GitHub Actions do template já estão preparadas para usar essa variável automaticamente.
Você deverá desenvolver um projeto de sistemas embarcados simulados, utilizando Python e Wokwi.
/project
├── src/
│ └── main.py # Código principal do projeto
├── wokwi.toml # Configuração da simulação
├── diagram.json # Circuito no Wokwi
└── README.md # Explicação do seu projeto
Você pode expandir essa estrutura se desejar, desde que mantenha os arquivos essenciais.
No diretório "scenarios" existem arquivos .md e pastas referentes a diferentes desafios. Selecione apenas um deles e mantenha apenas a pasta e .md referente ao desafio a ser desenvolvido, deletando os demais. Isso fará com o que o fluxo de testes automáticos selecione o fluxo de acordo com o desafio escolhido.
O desenvolvimento acontece principalmente nos arquivos abaixo:
- Código Python executado na simulação
- Implementa a lógica do sistema embarcado
- Exemplos: controle de LEDs, leitura de sensores, estados, temporizações, etc.
- Define o hardware virtual do projeto
- Componentes como:
- LEDs
- Botões
- Sensores
- Placa microcontroladora
- Configura a simulação:
- Tipo de placa
- Framework
- Dependências adicionais
Para executar o seu projeto locamente, é necesário preparar a imagem docker local, e após isso utiliza-la para gerar o arquivo que conterá o seu código para o projeto, para isso, execute os seguintes códigos:
- Prepara a imagem docker (Necessário rodar apenas 1 vez)
docker build -t esp32-builder -f Dockerfile .- Prepara o arquivo de memória fs.bin (Necessário a cada iteração)
docker run --rm -v "$(pwd)/src:/mnt/src" -v "$(pwd):/mnt/out" esp32-builder bash -c "mkdir -p /tmp/fs && cp -r /mnt/src/* /tmp/fs/ && /mklittlefs/mklittlefs -c /tmp/fs -b 4096 -p 256 -s 0x200000 /mnt/out/fs.bin"Após suas alterações:
git add .
git commit -m "Descrição clara do que foi feito"
git pushA cada push, o GitHub Actions irá automaticamente:
- Executar o pipeline de build
- Rodar a simulação via Wokwi CLI
- Validar que o projeto executa sem erros
- Vá até a aba Actions
- Analise os logs da execução
- Corrija e envie novamente
Esta etapa será avaliada considerando:
- Funcionamento correto da simulação
- Código organizado e legível
- Estrutura de arquivos correta
- Uso adequado do Wokwi
- Commits claros e bem descritos
- Projeto executando sem falhas nas Actions
Após concluir o desenvolvimento:
- Verifique se o projeto executa sem erros nas GitHub Actions
- Confirme que todos os arquivos obrigatórios estão presentes
- Copie o link do seu repositório no GitHub
Envie o link conforme as orientações do processo seletivo na plataforma do PNAAT.
O arquivo README.md do seu repositório deve ser utilizado como o
relatório final do desafio técnico.
Preencha todas as seções abaixo de forma clara, objetiva e técnica.
Dica importante
Não é necessário um relatório extenso.
O principal critério é demonstrar clareza nas decisões técnicas, organização e entendimento do sistema embarcado desenvolvido. Não mantenha os demais conteúdos escritos nesse arquivo README, aqui devem ser concentradas apenas informações referentes ao projeto desenvolvido.
- Nome completo:
- GitHub:
Descreva, em poucas palavras:
- Qual é o objetivo do seu projeto
- O que o sistema embarcado simulado faz
- Como o usuário interage com ele (se aplicável)
Explique a arquitetura lógica do seu projeto, abordando:
- Fluxo principal do programa (
main.py) - Estrutura de estados, loops ou temporizações
- Como os componentes interagem entre si
Se desejar, utilize tópicos ou um pequeno diagrama em texto.
Liste os principais componentes definidos no diagram.json, por exemplo:
- Tipo de placa utilizada
- LEDs, botões, sensores, atuadores, etc.
- Função de cada componente no sistema
Explique brevemente decisões importantes tomadas durante o desenvolvimento, como:
- Organização do código
- Uso de funções, estados ou constantes
- Estratégias para temporização ou controle lógico
Descreva o comportamento final do sistema:
- O que funciona corretamente
- Quais requisitos foram atendidos
- Resultado observado na simulação do Wokwi
Utilize este espaço para comentar, se desejar:
- Dificuldades encontradas
- Limitações da solução
- Melhorias que você faria com mais tempo
- Principais aprendizados durante o desafio
Este relatório faz parte da avaliação técnica.
Clareza, objetividade e organização são tão importantes quanto o funcionamento do código.
Para que o projeto seja validado com sucesso na esteira de integração contínua (CI), o firmware escrito em MicroPython deve interagir corretamente com as leituras dos sensores descritos em cada cenário e enviar as mensagens de status exatas.
- Casamento Exato de Strings: O Wokwi CI faz uma verificação estrita caractere por caractere. Se houver divergência em maiúsculas/minúsculas, acentuação ou falta de pontuação, o teste irá falhar.
- Arquitetura Não-Bloqueante: Evite o uso de funções bloqueantes. Elas podem fazer com que o firmware perca a janela de tempo em que o simulador altera o peso, quebrando a sincronia do teste automatizado.
Em caso de dúvidas:
- Consulte o material dos cursos EAD
- Leia atentamente este README
- Analise os logs das GitHub Actions
- Utilize os canais oficiais para contato com os instrutores