🐍 Python & RPi.GPIO
Estrutura de um script Python, variáveis, funções, condições, ciclos e como usar a biblioteca RPi.GPIO para controlar os pinos do Raspberry Pi.
Porquê Python?
O Python é a linguagem oficial do Raspberry Pi por várias razões: é fácil de aprender, tem uma biblioteca de GPIO excelente (RPi.GPIO), e tem um ecossistema enorme para sensores, câmara, rede e inteligência artificial.
Estrutura de um script GPIO
Todo o script RPi.GPIO segue a mesma estrutura base:
Python — estrutura base
# 1. Importar bibliotecas import RPi.GPIO as GPIO import time # 2. Configuração (uma vez) GPIO.setmode(GPIO.BCM) # numeração BCM GPIO.setwarnings(False) # suprimir avisos GPIO.setup(18, GPIO.OUT) # pino 18 como saída GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) # pino 17 como entrada com pull-up # 3. Loop principal try: while True: # lógica do programa aqui time.sleep(0.1) # 4. Limpeza ao sair (Ctrl+C) except KeyboardInterrupt: GPIO.cleanup() # SEMPRE limpar pinos no fim
Variáveis e tipos
Python
# Pinos GPIO (inteiros) LED_PIN = 18 BTN_PIN = 17 # Valores decimais temperatura = 23.5 # Texto mensagem = "Olá, RPi!" # Booleano led_ligado = True # Imprimir no terminal print(f"Temperatura: {temperatura}°C")
Condições (if/elif/else)
Python
botao = GPIO.input(BTN_PIN) if botao == GPIO.LOW: # botão premido (pull-up ativo) GPIO.output(LED_PIN, GPIO.HIGH) print("Botão premido — LED aceso") else: GPIO.output(LED_PIN, GPIO.LOW) print("Botão solto — LED apagado")
Ciclos (for e while)
Python
# Piscar 5 vezes for i in range(5): GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(0.3) GPIO.output(LED_PIN, GPIO.LOW) time.sleep(0.3) # Loop contínuo while True: leitura = GPIO.input(BTN_PIN) time.sleep(0.05) # anti-bounce
Funções
Python
def piscar(pino, vezes=3, intervalo=0.5): """Faz piscar um LED 'vezes' vezes.""" for _ in range(vezes): GPIO.output(pino, GPIO.HIGH) time.sleep(intervalo) GPIO.output(pino, GPIO.LOW) time.sleep(intervalo) # Chamar a função piscar(18) # 3 vezes, 0.5s piscar(18, 5, 0.1) # 5 vezes rápido
PWM por software
O PWM (Pulse Width Modulation) permite variar a intensidade de um LED ou a velocidade de um motor através de uma saída digital:
Python — PWM
GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 1000) # pino 18, 1000 Hz pwm.start(0) # arrancar com 0% duty cycle # Variar brilho de 0% a 100% for brilho in range(0, 101, 5): pwm.ChangeDutyCycle(brilho) time.sleep(0.05) pwm.stop() # parar PWM
Comunicação série (print para monitor)
Python
# Imprimir valores de sensores no terminal temperatura = 24.3 humidade = 65 print(f"Temp: {temperatura:.1f}°C | Hum: {humidade}%") # Ler input do utilizador resposta = input("Prima ENTER para continuar...")
Pronto para os exercícios! Com estes fundamentos já consegues seguir todos os exercícios do Kit RPi. Consulta a lista de componentes para saber o que está incluído no teu kit.