Imagen de Hacker.io
Raspberry Pi Pico es un microcontrolador creado por la fundación Raspberry Pi. Tiene 2 cores Arm Cortex M0+ que se ejecutan hasta los 133MHz, con 264KB of RAM y 2Mb de almacenamiento flash y sólo cuesta 4$.
Por su tamaño y potencia podemos compararlo con el ESP32 y con algunas de las placas más potentes de Arduino, si la comparamos por precio sólo quedaría el ESP32, pero por prestaciones el ESP32 sólo con su Wifi y Bluetooth ya la deja totalmente atrás. Recomiendo la comparativa de Andreas Spiess con ESP32 y otras placas
En cualquier caso me parece una apuesta muy valiente de la Fundación Raspberry Pi, que saca en su primera versión un producto muy digno y a un precio totalmente alucinante y que sin duda será una nueva revolución en el sector.
Pines/Pinout
- 30 GPIO
- 3 entradas analógicas
- 16 canalles PWM aplicable sobre cualquier pin
- 2 I2C
- 2 UARTs
- 2 SPI
Imagen de Hackter.io
Imagen de RaspberryPi.org
Puedes usar el módulo de frintzing de la Raspi Pico y su esquema de la página de raspberry.org
Más detalles en la página de hackter.io.
Uso micropython
El entorno de programación para micropython es Thonny que podemos instalar fácilmente desde su página o desde python con
pip3 install thonny
Debemos asegurarnos de usar la última versión (al menos la 3.3.3), con lo que si ya lo tenemos instalado debemos actualizarlo con
pip3 install --upgrade thonny
En este vídeo vemos los primeros pasos
Vídeo: primeros pasos con Raspberry Pi Pico en micropython
Ahora vamos a instalar el firmware de micropython a la Raspberry Pi Pico.
- Seleccionamos el intérprete de python adecuado desde el menú Run->Select Interpreter
Seleccionando «Micropython(Raspberry Pi Pico)
Desde esta opción tendremos acceso a la instalación del firmware (Dejamos la opción de seleccion automática del puerto de conexión)
Pulsamos «Install or update firmware»
En la ventana que aparece veremos que se detecta la placa
y pulsamos Install
Después de instalarse el firmaware se resetea la placa
Una vez instalado el firmware de micropython y tras pulsar la tecla Enter aparecerá la descripción del firmware instalado y el prompt de python «>>>»
Primera prueba: Hola Mundo
Escribimos nuestra pequeña prueba para ver que funciona el intérprete
print('Hola Mundo')
Ejemplo 1: Led On/Off
Vamos a probar ahora con un ejemplo para encender y apagar el led incluído en la Pico, que está conectado al pin 25
import machine # Todo lo relaciionado con el acceso al hardware
# Creamos un objeto led conectado al pin 25 y como salida
led = machine.Pin(25, machine.Pin.OUT)
led.on() # Encendemos
led.off() # Apagamos
Ejemplo 1.5: Parpadeo de led
Ahora introducimos un retardo y tenemos un led parpadeante. Para ello añadimos el módulo utime, una versión reducida del clásico módulo time. En micropython algunos módulos llevan una «u» (por la letra griega μ/micro) delante del nombre para indicar que son versiones reducidas
import machine # Todo lo relaciionado con el acceso al hardware
# Algunos módulos llevan una "u" (por la letra griega μ/micro )
# delante del nombre para indicar que son versiones reducidas
import utime
# Creamos un objeto led conectado al pin 25 y como salida
led = machine.Pin(25, machine.Pin.OUT)
while True:
led.on()
utime.sleep(0.5)
led.off()
utime.sleep(0.5)
Ejemplo 2: Conectando neopixels
Aprovechando los ejemplos de la guía «SDK para Python en Raspberry Pi Pico» vamos a ver cómo usar neopixels con la Raspberry Pi Pico en micropython. Podemos descargar el ejmplo del github de ejemplos de micropython para Raspberry Pi Pico
Vemos que en el código aparece una pequeña parte en ensamblador, es un ejemplo de cómo se pueden usar los PIO (Programable I/O) para hacer que un pin determinado (el 22 en este caso) para crear una máquina de estados que se comunique con un dispsitivo usando un protocolo, el de los neopixels.
He modificado levemente el fichero original añadiendo un par de funciones para agrupar el código.
# Example using PIO to drive a set of WS2812 LEDs.
import array, time
from machine import Pin
import rp2
# Configure the number of WS2812 LEDs.
NUM_LEDS = 16
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()
# Create the StateMachine with the ws2812 program, outputting on Pin(22).
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(22))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
def test1():
# Cycle colours.
for i in range(4 * NUM_LEDS):
for j in range(NUM_LEDS):
r = j * 100 // (NUM_LEDS - 1)
b = 100 - j * 100 // (NUM_LEDS - 1)
if j != i % NUM_LEDS:
r >>= 3
b >>= 3
ar[j] = r << 16 | b
sm.put(ar, 8)
time.sleep_ms(50)
def test2():
# Fade out.
for i in range(24):
for j in range(NUM_LEDS):
ar[j] >>= 1
sm.put(ar, 8)
time.sleep_ms(50)
Podemos encontrar más ejemplos de uso de PIO del mismo repositorio.
Desde Thonny podemos abrir el fichero original que hemos descargado, lo modificamos y adaptamos.
Al conectar desde Thonny con la Raspberry Pi Pico con el firmware de micropython, no sólo obtenemos una consola donde ejecutar codigo python en modo interactivo, conocida como REPL, sino que ademas podemos tenemos un explorador de archivos de la placa Raspberry, donde podremos subir y editar archivos.
Arriba vemos los ficheros locales y abajo los de la Raspi Pico. Podemos enviar cualquier fichero a la Raspberry Pi Pico pulsando sobre el fichero local y haciendo clic con el botón derecho del ratón seleccionamos «Upload to»
Podemos editar los ficheros tanto locales como los de la Raspi Pico que aparecen con el nombre entre corchetes
El montaje es muy sencillo, sólo hay que conectar el anillo led a GND y Vcc y el pin de control al pin 22
Ahora podemos ejecutar los test y veremos cómo se iluminan los leds