Raspberry Pi Pico na Prática: GPIO, LEDs e Controle de Hardware em Sistemas Embarcados

Introdução

O controle direto de hardware é a essência de sistemas embarcados.

Com o Raspberry Pi Pico, isso é feito via GPIO (General Purpose Input/Output) — os pinos que conectam o software ao mundo físico.

Neste artigo, saímos da teoria e entramos na execução prática.


GPIO: Interface Física do Sistema

https://images.openai.com/static-rsc-4/GWtS91ydLyKMAye9NQDNUpKQSAvepaZfZ02rZysbTMhv6zgpLpwou-bnLf3-OuXC5I-lU4CARpehFQxWwFBbDzhXL0IluKCQbEZAwEXem0Og_JOFBSrBaQTT1OqdgLKL99bNNrw1M8QJqY6gpEhzXUXuQ4L9H8mPfa7stB6Un66S5MkO5UFDLerHShEIeVbC?purpose=fullsize
https://images.openai.com/static-rsc-4/RtXk6Fvb-gmciVF_1DbOOGXu2AbqcG9C0dCT7wIagFs8fg3nhX0SemmhKbOaK5N2dmJk5rd1WkHckqWJBw5hT4pGNdKsK-78aq3dTDrwhHB5ZFSE8zNFYwWkLrhmOl81Tu76NBbq7ag2syBMwJS8vt_clLK_cJ5BjDrGLESsj1I7sp0YO6WF-CjZ45tS9tHt?purpose=fullsize
https://images.openai.com/static-rsc-4/xAxmU4SMTALT8GMSae-Rv0X5QRfOaf4AbhG-rLuTLPkYH5YsZ5YBcr3OTkGTSka8725n7oTO2Q-Ccf3RddUvqC9aUHKtn9rhEp5Un8e16FJ8vP5f_jdxfATFGR7bYxeMAdkNHGqOiesYByxdfqG-rtk3WnGwcYLwpcKz8Sex82M962kocCVlUcpUD-dNORLK?purpose=fullsize

GPIO permite:

  • Ler sinais (entrada)
  • Acionar dispositivos (saída)

Estados possíveis:

  • HIGH (1) → tensão presente (3.3V)
  • LOW (0) → sem tensão

✔ Base de toda automação digital


Estrutura Elétrica Básica (LED)

Antes do código, o circuito:

Componentes:

  • LED
  • Resistor (220Ω ~ 1kΩ)
  • Fios

Ligação:

GPIO (Pico) → Resistor → LED → GND

✔ Resistor é obrigatório para proteção


Primeiro Controle: Piscar LED

from machine import Pin
import utimeled = Pin(16, Pin.OUT)while True:
led.value(1) # ON
utime.sleep(1)

led.value(0) # OFF
utime.sleep(1)

Interpretação:

  • Pin.OUT → define como saída
  • value(1) → liga
  • value(0) → desliga

✔ Controle direto de hardware


Alternativa: Toggle

led.toggle()

✔ Mais simples, menos controle explícito


Entrada Digital: Botão

https://images.openai.com/static-rsc-4/Ow5ZiCSy8Hk2SPkXZovF-hnu16jtnsZ9Z2aZgiitbq9ih5bg20QndxYpgwlkSRrKvGNxwO3-kvJcVLFUf-JGH6cwVVE1XIyenyvfhu8_h9LxNWcQNWSxLDS81E9gtHhSd7lYdd2ATIK5ihKsLYi6XVMABIeJoWhE7ur4OeDnnkKgatCsNVNCsQQ5EEzEGsWA?purpose=fullsize
https://images.openai.com/static-rsc-4/VpzK8HqLgCwY_P4UwoRAIf5tyhiYg7kxEwaBTKG3ppoRK2sd-wlqgUrVixYfPeP_9xOhKT_CwwCEG9k-XYBba18WRT2QpuaEtzADsR-KI9Ma5UHJzgSPB7j2XDzmBwIEJPa3h9nqkkxnVYVpzm9Fp-wsuNAAW1BJqxUljZUyWUtIW1bE_Gu-eLz9yx76lVTd?purpose=fullsize
https://images.openai.com/static-rsc-4/xHkDyZ93s04cg8QW9rQ9M7DrW9KUWbPgogIkyv6CvqbQVVS3KkKF7sgeqkSW9-xeNNkKDStUUcoDt1fID79K9Zp6VRUtm4iK3xCnm1ZAmbwztcZMac6J5Zgz5QbdRKFSgugMcGN76E7US4RD2-J1uZpqSCSQsF4AsbchRb7UOIx6vAHFyxoSmT7Ko3RGXQ5H?purpose=fullsize

Circuito:

  • Botão ligado ao GPIO
  • Pull-up interno ativado

Código:

button = Pin(15, Pin.IN, Pin.PULL_UP)while True:
if button.value() == 0:
print("Pressed")

Lógica invertida:

  • 0 → pressionado
  • 1 → solto

✔ Padrão comum em embarcados


Controle Condicional (Botão + LED)

led = Pin(16, Pin.OUT)
button = Pin(15, Pin.IN, Pin.PULL_UP)while True:
if button.value() == 0:
led.value(1)
else:
led.value(0)

✔ Entrada controla saída


Debounce (Problema Real)

Botões geram ruído elétrico.

Sintoma:

  • Múltiplos acionamentos inesperados

Solução simples:

if button.value() == 0:
utime.sleep_ms(50)
if button.value() == 0:
print("Pressed")

✔ Estabilização básica


Múltiplos GPIOs

led1 = Pin(16, Pin.OUT)
led2 = Pin(17, Pin.OUT)led1.value(1)
led2.value(0)

✔ Controle paralelo


Organização Profissional

def read_inputs():
return button.value()def update_outputs(state):
led.value(state)while True:
state = read_inputs()
update_outputs(not state)

✔ Código modular e testável


Limitações Elétricas (CRÍTICO)

  • Tensão: 3.3V
  • Corrente por pino: ~12mA (máx seguro)

❌ NÃO ligar diretamente:

  • Motores
  • Relés sem driver
  • Cargas altas

✔ Use:

  • Transistores
  • MOSFETs
  • Módulos prontos (COTS)

Aplicações Práticas

Cenários reais práticos:

  • Indicadores visuais (LED)
  • Leitura de sensores digitais
  • Controle de relés
  • Interfaces simples (botões)

Integração com Sistemas Maiores

GPIO atua como:

  • Entrada de eventos físicos
  • Saída de controle

Arquitetura:

Sensor/Botão → GPIO → Pico → Decisão → GPIO → Atuador

Boas Práticas

  • Sempre usar resistor com LED
  • Validar lógica invertida (pull-up)
  • Tratar debounce
  • Isolar cargas maiores
  • Testar circuito antes do código

Encaminhamento

Agora que o controle digital está dominado, avançamos para sinais analógicos:

ADC — leitura de sensores analógicos e aquisição de sinais