Tu primer programa: un LED y un pulsador
El "Hola Mundo" de la electrónica también funciona en la Raspberry: hacer parpadear un LED. La diferencia con Arduino es que aquí programas en Python y el programa corre dentro de Linux.
El montaje
| Componente | Conexión |
|---|---|
| LED + resistencia de 220 Ω | GPIO18 (pin físico 12) y GND (pin 14) |
| Pulsador | GPIO23 (pin físico 16) y GND (pin 20), con patas en diagonal |
El LED y el pulsador son los mismos que en las guías de LED y pulsadores. Cada pin tiene dos nombres: el número físico (su posición en la cabecera) y el número GPIO (el que usa el código). Los tienes todos en conceptos básicos.
Los pines de la Raspberry trabajan a 3,3 V. Conectarles 5 V los daña. Un LED con su resistencia y un pulsador a GND son totalmente seguros.
1. Hacer parpadear el LED
Abre un editor y crea el archivo parpadeo.py:
- Con pantalla: abre Thonny desde el menú de programación
- Por SSH: usa el editor de la terminal, con
nano parpadeo.py
Escribe el programa:
from gpiozero import LED
from time import sleep
led = LED(18) # GPIO18, el pin físico 12
while True:
led.on()
sleep(1)
led.off()
sleep(1)
En Thonny, pulsa Run (el botón verde). En nano, guarda con Ctrl+O y Enter, sal con Ctrl+X y ejecútalo:
python3 parpadeo.py
El LED parpadea cada segundo. Para pararlo, pulsa Stop en Thonny o Ctrl+C en la terminal.
gpiozeroes la librería de Python para los pines de la Raspberry. Viene instalada en Raspberry Pi OS. En Ubuntu se instala consudo apt install python3-gpiozero python3-lgpioLED(18)prepara el GPIO18 como salidasleep(1)espera un segundo, como eldelay(1000)de Arduino
2. Encender el LED con el pulsador
from gpiozero import LED, Button
from signal import pause
led = LED(18)
boton = Button(23) # GPIO23, con su resistencia pull-up interna activada
boton.when_pressed = led.on
boton.when_released = led.off
pause() # espera a que pase algo, sin gastar CPU
Aquí no hay un bucle que pregunte todo el rato por el botón. Le dices a la librería qué hacer cuando pase algo (eventos), y ella se encarga. Button ya activa la resistencia pull-up interna y filtra los rebotes.
3. Brillo con PWM
from gpiozero import PWMLED
from time import sleep
led = PWMLED(18)
while True:
for i in range(101): # de 0 a 100 %
led.value = i / 100
sleep(0.01)
for i in range(100, -1, -1): # y de vuelta
led.value = i / 100
sleep(0.01)
PWMLED usa PWM, como analogWrite() en Arduino, pero el brillo va de 0 a 1 en lugar de 0 a 255.
¿Qué ha cambiado respecto a Arduino?
| Arduino | Raspberry Pi | |
|---|---|---|
| Lenguaje | C++ | Python |
| Dónde corre | directamente en el chip | dentro de Linux, como un programa más |
| Subir el programa | compilar y enviar por USB | guardar el archivo y ejecutarlo |
| Parar | desenchufar o subir otro | Stop o Ctrl+C |
| Varios programas a la vez | uno | todos los que quieras |