PTENES
MÓDULO 3.1 · FUNDAMENTO

🍓 Raspberry Pi 5 e Linux

O ESP32 controla motores muito bem, mas não processa câmera. Neste módulo você coloca um computador Linux de verdade no robô: prepara o Raspberry Pi 5 sem monitor, usa o terminal, cria um ambiente Python, acende um LED pelo GPIO e cuida da energia e do calor, os dois motivos mais comuns de um Pi travar dentro do robô.

6
Tópicos
Intermediário
Nível
Fundamento
Tipo
Pi 5
Hardware
0%
0 de 0 tópicos lidos · Seção 1 de 6

Conteúdo detalhado

1

🧠 Por que um computador no robô

Uma imagem de câmera em 640 × 480 tem mais de 900 mil números (três cores por pixel), e chegam dezenas delas por segundo. O ESP32 tem memória para guardar só algumas dessas imagens e não roda as bibliotecas de visão que você vai usar. O Raspberry Pi 5 é um computador inteiro do tamanho de um cartão de crédito: processador de quatro núcleos, gigabytes de memória, sistema Linux, Python e OpenCV. Ele cuida de ver e decidir; o ESP32 continua cuidando dos motores.

🌱 Novo aqui?

Um sistema operacional é o programa que gerencia o computador e roda os outros programas (Windows, macOS e Linux são exemplos). O Linux é um sistema aberto e gratuito; o Raspberry Pi OS é a versão de Linux feita para o Pi. Tempo real quer dizer responder sempre dentro de um prazo fixo, como "corrigir o motor a cada 10 ms": o microcontrolador garante isso, o Linux não, porque divide o processador entre muitos programas.

câmera 30 imagens/s Raspberry Pi 5 Linux + Python OpenCV, YOLO26 VÊ e DECIDE ESP32 motores, sensores AGE em tempo real "vire 20° à esquerda" imagem pesada fica no Pi; ao ESP32 só vai o comando curto

Como ler: a seta ciano é larga em dados (a imagem inteira); a seta roxa leva só uma frase curta. Essa assimetria é o desenho de quase todo robô com visão: o computador digere a imagem e o microcontrolador recebe apenas a ordem. Você monta essa ligação no módulo 3.5.

✓ O Pi faz bem

  • ✓Processar câmera com OpenCV e rodar detectores como o YOLO26.
  • ✓Guardar logs, servir uma página web, conectar ao Wi-Fi e ao ROS 2.
  • ✓Rodar Python com bibliotecas grandes, instaladas por linha de comando.

✗ O Pi faz mal

  • ✗Gerar pulsos de motor com tempo exato: o Linux pode atrasar alguns milissegundos.
  • ✗Ler sinais de 5 V: os pinos do Pi são de 3,3 V e queimam.
  • ✗Ser desligado puxando o cabo: o cartão pode corromper.

Por que aprender

Saber o que cada placa faz bem evita os dois erros clássicos desta etapa: tentar fazer visão no microcontrolador (não cabe) e ligar motor direto no Pi (treme, atrasa e às vezes queima um pino). O Pi 4 ainda serve para o básico deste módulo; para câmera com detector de objetos, o Pi 5 é a escolha.

Conceitos-chave

Computador de placa única
PC inteiro numa placa
Linux
sistema aberto do Pi
Tempo real
prazo garantido: ESP32
Divisão de trabalho
Pi pensa, ESP32 age
2

💾 Preparar o Pi 5 sem monitor

Dentro do robô o Pi não terá tela nem teclado. Por isso você o prepara no modo "headless" (sem cabeça): grava o sistema no cartão pelo Raspberry Pi Imager, já deixando nome, usuário, Wi-Fi e SSH configurados, e depois acessa tudo pela rede, do seu computador. O sistema é o Raspberry Pi OS 64-bit, hoje baseado no Debian "Trixie". Para robô, a versão Lite (sem área de trabalho) é mais leve; se preferir ver uma área de trabalho no começo, use a versão completa.

🌱 Novo aqui?

SSH é um jeito seguro de abrir o terminal de outro computador pela rede: você digita no seu notebook e os comandos rodam no Pi. O hostname é o nome do Pi na rede (por exemplo robo); com ele você o encontra como robo.local sem precisar saber o endereço IP.

1 Imagernome, usuárioWi-Fi, SSH 2 CartãomicroSD32 GB ou mais 3 Pi 5 ligafonte 27 Wentra no Wi-Fi 4 SSHssh você@robo.local tudo configurado ANTES do primeiro boot: nenhum monitor necessário o primeiro boot demora um pouco mais: o sistema expande o cartão

Como ler: os três quadros roxos acontecem com o cartão e a placa; o ciano é o seu computador falando com o Pi. Se o passo 4 falhar, quase sempre o erro está no passo 1 (senha do Wi-Fi digitada errada ou SSH desligado).

Passo a passo

1

Instale o Imager

Baixe o Raspberry Pi Imager em raspberrypi.com/software (Windows, macOS ou Linux) e coloque o cartão microSD no leitor do computador.

2

Escolha placa, sistema e cartão

Dispositivo: Raspberry Pi 5. Sistema: Raspberry Pi OS (64-bit), ou a versão Lite em "Raspberry Pi OS (other)". Armazenamento: o seu cartão. Confira duas vezes para não apagar o disco errado.

3

Personalize antes de gravar

Na tela de personalização, defina hostname robo, um usuário e senha seus, o Wi-Fi (nome e senha, país BR) e ative o SSH. Grave e espere a verificação terminar.

4

Ligue e conecte

Coloque o cartão no Pi, ligue a fonte oficial de 27 W e aguarde o LED verde parar de piscar muito. No terminal do seu computador (no Windows, o PowerShell já tem SSH), rode o bloco abaixo.

Objetivo: entrar no Pi pela rede e deixar o sistema atualizado. Troque <seu_usuario> pelo usuário criado no Imager.

no seu computador → depois no Pi
# 1) No SEU computador: entrar no Pi (na primeira vez, responda "yes")
ssh <seu_usuario>@robo.local

# 2) Já dentro do Pi: atualizar a lista de pacotes e o sistema
sudo apt update
sudo apt full-upgrade -y

# 3) Conferir o que está rodando
cat /etc/os-release | grep PRETTY_NAME   # deve citar Debian e "trixie"
uname -m                                # aarch64 = sistema 64-bit
hostname -I                             # endereço IP do Pi na rede

# 4) Reiniciar para aplicar atualizações do núcleo
sudo reboot

Como verificar

  • ✓O prompt muda para algo como <seu_usuario>@robo:~ $: você está dentro do Pi.
  • ✓uname -m responde aarch64 e o PRETTY_NAME cita trixie.
  • ✗"Could not resolve hostname"? Use o IP no lugar de robo.local (o roteador mostra os aparelhos conectados) ou confira se o computador está na mesma rede.

Por que aprender

Um Pi preparado do jeito certo liga no robô e aparece na rede sozinho. Configurar tudo no Imager poupa o monitor, o teclado e as tentativas de editar arquivos de configuração à mão, que é onde muita gente trava no começo.

Conceitos-chave

Headless
sem tela, pela rede
Pi Imager
grava e personaliza
SSH
terminal remoto seguro
apt
instala e atualiza
3

⌨️ Terminal Linux essencial

No robô você vai conversar com o Pi quase só pelo terminal: uma linha de texto onde cada comando é uma palavra curta seguida de opções. Não precisa decorar dezenas deles. Com uns quinze você navega pelas pastas, edita o código, instala pacotes e descobre por que algo parou.

🌱 Novo aqui?

No Linux tudo fica numa árvore de pastas que começa em / (a raiz). A sua pasta pessoal é /home/<seu_usuario>, abreviada como ~. sudo ("faça como administrador") é necessário para mexer no sistema, como instalar programas. Use-o só quando o comando pedir.

/ home/você etc/configurações dev/portas, câmera, serial ~/robo/seus projetos ~/robo-venv/Python isolado ~/robo/led.py o til (~) é atalho para /home/<seu_usuario>

Como ler: à esquerda, a raiz e três pastas do sistema; à direita, o que você mesmo vai criar dentro da sua pasta pessoal. Mantenha seus arquivos sempre em ~: assim nada do sistema é tocado sem querer.

ComandoO que fazExemplo
pwd · ls -l · cdonde estou · listar · entrar na pastacd ~/robo
mkdir · cp · mv · rmcriar pasta · copiar · mover/renomear · apagarmkdir -p ~/robo
nano arquivoeditor de texto simples (Ctrl+O salva, Ctrl+X sai)nano led.py
cat · tail -fmostrar arquivo · acompanhar um log ao vivotail -f log.txt
htop · df -h · free -hprocessos e CPU · espaço no cartão · memóriadf -h
Ctrl+Cinterromper o programa que está rodandoparar o robô pelo terminal
scpcopiar arquivo entre o seu computador e o Piscp foto.jpg você@robo.local:~

Objetivo: criar a pasta do curso, escrever um arquivo, conferir o espaço livre e desligar o Pi do jeito seguro.

terminal do Pi
mkdir -p ~/robo && cd ~/robo        # cria a pasta (se não existir) e entra nela
pwd                                 # mostra /home/<seu_usuario>/robo
echo "robo pronto" > notas.txt       # cria um arquivo com uma linha
cat notas.txt                       # mostra o conteúdo
ls -l                               # lista com tamanho e data
df -h /                             # espaço livre no cartão
free -h                             # memória total e em uso

# Desligar com segurança (espere o LED verde apagar antes de tirar a energia)
sudo shutdown -h now

Como verificar

  • ✓cat mostra "robo pronto" e ls -l lista notas.txt.
  • ✓df -h mostra vários GB livres (se estiver acima de 90% de uso, o cartão é pequeno demais).
  • ✓Depois do shutdown, a conexão SSH cai e o LED verde para de piscar.

💡 Editar no seu computador

Se o nano incomodar, abra a pasta do Pi direto no seu editor: o VS Code com a extensão "Remote - SSH" edita os arquivos do Pi como se fossem locais. O terminal continua sendo o lugar de rodar e parar o robô.

Por que aprender

Todo o resto da trilha (câmera, YOLO26, comunicação com o ESP32) e a Trilha 4 inteira (ROS 2) acontecem no terminal. Quem domina esses comandos resolve sozinho "o cartão encheu", "o programa travou" e "onde salvei aquele arquivo".

Conceitos-chave

Pasta pessoal ~
onde ficam seus arquivos
sudo
só para mexer no sistema
Ctrl+C
para o programa
shutdown
desligar sem corromper
4

🐍 Python com ambiente virtual

Se você tentar pip install direto no Raspberry Pi OS, vai ver o erro externally-managed-environment. Não é defeito: o sistema protege o Python que ele mesmo usa. A saída certa é criar um ambiente virtual (venv) para o robô. Um detalhe importante no Pi: crie o venv com --system-site-packages, para que ele enxergue as bibliotecas que vêm instaladas pelo sistema, como a picamera2 (câmera) e a gpiozero (pinos).

🌱 Novo aqui?

Um pacote é uma biblioteca Python pronta (OpenCV, Ultralytics). O pip é o instalador de pacotes do Python; o apt é o instalador do sistema. Um ambiente virtual é uma pasta com um Python só seu: o que você instala ali não bagunça o sistema, e se der errado você apaga a pasta e cria de novo.

~/robo-venv (seu ambiente) pip install: opencv, ultralytics, pyserial pode apagar e recriar sem medo Python do sistema apt: picamera2, gpiozero (já vêm no Raspberry Pi OS) --system-site-packages

Como ler: o venv (roxo) fica em cima do Python do sistema (ciano). A seta mostra que, com a opção --system-site-packages, o venv "enxerga para baixo" e acha a câmera e os pinos; sem ela, import picamera2 falha dentro do venv.

Objetivo: criar o venv do curso, ativá-lo, instalar um pacote e provar que ele enxerga as bibliotecas do sistema.

terminal do Pi
# Criar o ambiente (uma vez só)
python3 -m venv --system-site-packages ~/robo-venv

# Ativar (toda vez que abrir um terminal novo)
source ~/robo-venv/bin/activate      # o prompt ganha "(robo-venv)" na frente

# Instalar pacotes DENTRO do venv (sem sudo)
pip install --upgrade pip
pip install numpy

# Testar: versão do Python e bibliotecas do sistema visíveis
python -c "import sys; print(sys.prefix)"
python -c "import gpiozero, picamera2; print('gpiozero e picamera2 OK')"

# Sair do venv quando quiser
deactivate

Como verificar

  • ✓sys.prefix mostra /home/<seu_usuario>/robo-venv: o Python ativo é o do venv.
  • ✓Aparece "gpiozero e picamera2 OK".
  • ✗"No module named picamera2"? O venv foi criado sem --system-site-packages, ou você está na versão Lite sem a biblioteca: rode sudo apt install -y python3-picamera2 e recrie o venv.

✓ Faça

  • ✓Um venv por projeto grande; para o curso, um só basta.
  • ✓Anotar os pacotes com pip freeze > requirements.txt.
  • ✓Rodar scripts com o Python do venv ativado.

✗ Não faça

  • ✗sudo pip install: mistura pacotes com os do sistema.
  • ✗Usar --break-system-packages para "resolver" o erro.
  • ✗Instalar a picamera2 pelo pip: no Pi ela vem pelo apt.

Por que aprender

OpenCV, Ultralytics e pyserial, que você usa nos próximos módulos, entram todos por esse venv. Fazer certo agora evita o problema mais comum de visão no Pi: "a câmera funciona no terminal, mas o meu script não acha a biblioteca".

Conceitos-chave

venv
Python isolado numa pasta
pip x apt
Python x sistema
system-site-packages
enxerga picamera2
requirements.txt
lista para recriar
5

📍 GPIO no Pi (gpiozero) e cuidados com 3,3 V

O Pi 5 tem uma fileira dupla de 40 pinos, como o ESP32 tem os dele. Alguns entregam energia (3,3 V, 5 V e GND); a maioria é GPIO, pinos que o seu programa liga, desliga ou lê. Em Python, a biblioteca gpiozero transforma isso em objetos simples: LED(17), Button(27). No robô, o GPIO do Pi serve para LEDs de status, um botão de parada e a serial com o ESP32; motores ficam com o ESP32.

🌱 Novo aqui?

Os pinos têm dois números. O físico conta a posição na fileira (1 a 40). O BCM (ou "GPIO") é o nome lógico que o chip usa, e é ele que a gpiozero espera: o pino físico 11 é o GPIO17. Na dúvida, rode pinout no terminal do Pi: ele desenha o mapa completo.

1 · 3,3 V2 · 5 V 4 · 5 V6 · GND 9 · GND 11 · GPIO17 → LED 330 Ω + LED → GND 13 · GPIO27 → botão (pino seguinte, abaixo) vermelho = energia: nunca ligue 5 V num GPIO

Como ler: o retângulo é o começo do conector, visto de cima, com o pino 1 no canto (quadrado na placa). Vermelho é energia, cinza é GND, roxo é o GPIO que você vai usar. O botão vai no pino 13, logo abaixo do 11, e no GND do pino 14 ao lado.

Objetivo: piscar um LED de status e acender o LED fixo enquanto o botão estiver apertado. Ligue: GPIO17 (pino 11) → resistor 330 Ω → perna longa do LED; perna curta → GND (pino 9). Botão entre GPIO27 (pino 13) e GND (pino 14). Com o venv ativado, salve como ~/robo/led.py.

~/robo/led.py
# LED de status e botão no Raspberry Pi 5 com gpiozero
# Rode com: python ~/robo/led.py   (Ctrl+C para sair)
from gpiozero import LED, Button
from signal import pause

led = LED(17)                       # número BCM: GPIO17 = pino físico 11
botao = Button(27, bounce_time=0.05) # GPIO27 = pino 13; pull-up interno ligado

def apertou():
    led.on()
    print("botão apertado: LED aceso")

def soltou():
    led.blink(on_time=0.2, off_time=0.8)  # volta a piscar em segundo plano
    print("botão solto: LED piscando")

botao.when_pressed = apertou
botao.when_released = soltou
soltou()                            # estado inicial: piscando
print("Pronto. Aperte o botão. Ctrl+C para sair.")
pause()                             # mantém o programa vivo esperando eventos

Como verificar

  • ✓O LED pisca rápido (0,2 s aceso, 0,8 s apagado) ao iniciar.
  • ✓Segurando o botão, ele fica aceso e o terminal mostra "botão apertado".
  • ✗Nada acende? Confira se usou o número BCM (17) e não o físico (11), e se o LED não está invertido.

✓ Seguro no GPIO

  • ✓Sinais de até 3,3 V; para sensor de 5 V, divisor de tensão ou conversor de nível.
  • ✓LED sempre com resistor; poucos miliampères por pino.
  • ✓Ligar fios com o Pi desligado.

✗ Queima o Pi

  • ✗TX de um Arduino de 5 V direto no RX do Pi.
  • ✗Motor, relé ou servo alimentado por um GPIO.
  • ✗Encostar o pino de 5 V num pino vizinho com o Pi ligado.

Por que aprender

O pino de 3,3 V é o mesmo cuidado do ESP32, mas o erro custa mais caro: um Pi 5 queimado sai bem mais caro que um ESP32. E a gpiozero, com eventos como when_pressed, é o jeito mais simples de colocar um botão físico de parada no robô, que você vai usar no projeto 3.6.

Conceitos-chave

BCM x físico
GPIO17 = pino 11
gpiozero
LED, Button, eventos
pinout
mapa no terminal
3,3 V máximo
5 V queima o pino
6

🔋 Energia e calor no Pi 5 dentro do robô

Na bancada, o Pi 5 usa a fonte oficial de 27 W (5 V, 5 A, USB-C). Com fonte mais fraca ele funciona, mas limita a corrente das portas USB e pode reiniciar quando a câmera e a IA puxam carga ao mesmo tempo. No robô não há tomada: a bateria passa por um regulador buck que entrega 5 V estáveis com folga de corrente. E rodando visão, o processador esquenta: sem o cooler ativo, ele reduz a velocidade sozinho para se proteger, e o seu detector fica mais lento sem aviso.

🌱 Novo aqui?

Subtensão é quando a tensão cai abaixo do necessário por um instante (por exemplo, quando o motor arranca); o Pi registra isso e pode reiniciar. Throttling é o próprio Pi baixando a velocidade do processador por calor ou energia fraca. Um regulador buck converte uma tensão maior (a bateria) em uma menor (5 V) com pouca perda em calor.

bateria2S ou 3S buck 5 V5 A ou mais Pi 5+ cooler ativo drivermotores ESP32GND comum ramos separados: o tranco do motor não derruba o Pi

Como ler: a energia (âmbar) sai da bateria e se divide antes de chegar a qualquer placa. O ramo de cima, com o buck em destaque, é o que mantém o Pi estável. O tracejado cinza lembra que os GND de todas as placas precisam estar ligados entre si.

Objetivo: acompanhar temperatura e alertas de energia enquanto o robô trabalha. Salve como ~/robo/saude.py e deixe rodando num segundo terminal durante os testes de visão.

~/robo/saude.py
# Monitor de saúde do Pi 5: temperatura e alertas de energia/calor
import subprocess, time

def temperatura():
    with open("/sys/class/thermal/thermal_zone0/temp") as f:
        return int(f.read()) / 1000          # vem em milésimos de grau

def alertas():
    saida = subprocess.run(["vcgencmd", "get_throttled"],
                           capture_output=True, text=True).stdout
    valor = int(saida.strip().split("=")[1], 16)
    msgs = []
    if valor & 0x1:     msgs.append("SUBTENSÃO AGORA")
    if valor & 0x4:     msgs.append("limitado AGORA")
    if valor & 0x10000: msgs.append("houve subtensão desde o boot")
    if valor & 0x40000: msgs.append("houve limitação desde o boot")
    return msgs or ["energia OK"]

while True:
    t = temperatura()
    aviso = "  QUENTE: confira o cooler" if t > 75 else ""
    print(f"{time.strftime('%H:%M:%S')}  {t:.1f} °C  {', '.join(alertas())}{aviso}")
    time.sleep(2)

Como verificar

  • ✓A cada 2 s aparece uma linha como "14:02:10 48.3 °C energia OK".
  • ✓Com o cooler, a temperatura sob carga de visão fica bem abaixo de 80 °C.
  • ✗"houve subtensão"? Troque a fonte, o cabo USB-C ou o buck por um de mais corrente antes de seguir.

✓ Faça

  • ✓Cooler ativo oficial encaixado e ventilação no chassi.
  • ✓Buck dedicado ao Pi, com folga de corrente e fios curtos e grossos.
  • ✓Desligar com sudo shutdown -h now antes de cortar a bateria.

✗ Não faça

  • ✗Power bank qualquer: muitos não seguram 5 A e o Pi reinicia.
  • ✗Pi e motores no mesmo regulador.
  • ✗Pi fechado numa caixa sem ar, ao sol.

💡 Bateria de lítio

Se usar LiPo ou 18650, use pack com BMS (placa de proteção), carregue sempre com supervisão e num saco anti-chamas, e nunca perfure ou amasse a célula. As regras do módulo 1.5 valem em dobro aqui, porque o Pi puxa bem mais corrente que o ESP32.

Por que aprender

A maioria dos "bugs" de visão em robô começa aqui: o Pi reinicia quando o robô acelera, ou o detector cai pela metade de velocidade depois de alguns minutos. Medir temperatura e subtensão separa problema de energia de problema de código, e poupa você de procurar erro no lugar errado.

Conceitos-chave

Fonte 27 W
5 V e 5 A na bancada
Buck 5 V
bateria → Pi
get_throttled
0x0 = tudo certo
Cooler ativo
evita perder velocidade

✅ Resumo do módulo

✓
Pi pensa, ESP32 age: imagem pesada fica no computador; ao microcontrolador vai só o comando.
✓
Headless desde o Imager: Raspberry Pi OS 64-bit (Trixie), Wi-Fi e SSH configurados antes do primeiro boot.
✓
Terminal e venv: uns quinze comandos e um ambiente com --system-site-packages resolvem quase tudo.
✓
GPIO de 3,3 V: gpiozero com número BCM; nada de 5 V nem motor nos pinos.
✓
Energia e calor medidos: buck dedicado, cooler ativo e get_throttled em 0x0.

Para ir além

Próximo módulo

3.2 · Câmera e OpenCV: ligar a Camera Module 3, achar um objeto pela cor e transmitir o vídeo para o navegador.