Una guía para principiantes de MicroPython con Raspberry Pi Pico

Raspberry Pi Pico es el miembro más nuevo de la familia Raspberry Pi. Antes de esto, la línea de productos Raspberry Pi eran computadoras de placa única capaces de ejecutar un sistema operativo.

Basado en el nuevo chip RP2040, Raspberry Pi Pico es compatible con MicroPython y C / C ++. Con Raspberry Pi Pico, los principiantes y entusiastas pueden controlar el hardware y los dispositivos conectados. Los pines GPIO de Raspberry Pi Pico se pueden usar para atenuar luces, leer el estado de los interruptores y mucho más.

¿Qué es MicroPython?

La programación en microcontroladores se realizó principalmente en lenguaje C, como se ve en las placas de desarrollo Arduino . Luego, en 2014, se publicó un nuevo lenguaje de programación para microcontroladores, MicroPython. MicroPython le permite escribir código Python en el metal desnudo de un microcontrolador. Esto significa que puede escribir código Python sin un sistema operativo.

Python es un lenguaje de programación de alto nivel para principiantes que permite a los usuarios concentrarse en aprender conceptos de programación. Esto es muy parecido con MicroPython.

Usando un LED

Para controlar el hardware, el Pico habla con la serie de pines a lo largo de ambos bordes. Estos se denominan pines de salida de entrada de propósito general (GPIO) y el LED integrado se puede encontrar en GPIO 25. Para controlarlo, primero importe las bibliotecas necesarias:

 import machine
 import utime

Luego llame a la función Pin usando la biblioteca de la máquina para manejar el pin GPIO del Pin, en este caso estamos configurando el Pin en GPIO 25, por lo que es el primer parámetro. El segundo parámetro lo establece como un pin de salida en lugar de un pin de entrada, al hacerlo, el pin sabe lo que debería estar haciendo:

 onboard_led = machine.Pin(25, machine.Pin.OUT)

Para continuar, en el siguiente código, le estamos diciendo al Pico que luego establezca su valor de pin en GPIO 25 a 1, o 'encendido'.

 while True:
onboard_led.value(1)

Sin embargo, es posible que se dé cuenta de que no parece suceder nada. Esto se debe a que el Pico funciona muy rápido, por lo que el LED se enciende más rápido de lo que puede percibir con el ojo. Para solucionar esto, necesitamos ralentizar el programa usando el comando sleep de la biblioteca utime . El código completo donde el LED se encenderá y apagará se puede ver a continuación:

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
onboard_led.value(1)
utime.sleep(5)
onboard_led.value(0)
utime.sleep(5)

Activar y desactivar los LED

Alternativamente, hay otra forma de encender y apagar los LED, con el comando de alternancia :

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
led_onboard.toggle()
utime.sleep(5)

En el ejemplo, el comando alternar reemplaza la necesidad de establecer el valor del LED en 1 y luego en 0. Seguirá encendido durante 5 segundos y luego se apagará durante otros cinco, siempre que el programa esté en ejecución.

Creando funciones

A medida que los programas se vuelven más complejos, es útil agrupar fragmentos de código para mantener la coherencia. Para hacerlo, MicroPython como Python permite el uso de funciones. Las funciones son un grupo de declaraciones relacionadas que realizan una tarea específica. Por ejemplo, en el siguiente código, se define una función llamada printNames :

 def printNames:
print(“Raspberry Pi 1”)
print(“Raspberry Pi 2”)
print(“Raspberry Pi 3”)
print(“Raspberry Pi 4”)
print(“Raspberry Pi Compute Module”)
print(“Raspberry Pi 400”)
print(“Raspberry Pi Pico”)
printNames()

La última línea del código llama a la función para que realmente se ejecute.

Bucles

La lógica condicional realiza diferentes acciones dependiendo de si una restricción booleana se evalúa como verdadera o falsa. Muchos proyectos de Raspberry Pi Pico se basan en estas declaraciones lógicas. En el siguiente ejemplo, se usa una instrucción if-else para determinar si se ejecutará una instrucción de impresión :

 i = 17
def printNames():
if i > 15:
print("i is greater than 15!")
else:
print("i is not greater than 15")
printNames()

En el siguiente ejemplo, el bucle for se usa con la función de rango . Estos bucles se pueden utilizar para repetir un bloque de código varias veces.

Para este ejemplo, el comando de impresión se ejecutará cinco veces con un retraso de cinco segundos entre cada uno de ellos con el comando de suspensión :

 import utime
def printNames():
for i in range(5):
print("Raspberry Pi Pico")
utime.sleep(5)
printNames()

Convertidor analógico a digital (ADC)

Aunque no podrá verlo, la Raspberry Pi Pico tiene un convertidor interno de analógico a digital. En el siguiente ejemplo, un potenciómetro está conectado a la Raspberry Pi Pico en GPIO 26, que es capaz de la funcionalidad ADC:

 import machine
import utime
pot = machine.ADC(26)
while True:
print(pot.read_u16())
utime.sleep(1)

Aquí, antes de que podamos usar este pin compatible con ADC, debe configurarse con la función ADC. Luego, mientras se ejecuta el programa, el valor del potenciómetro se imprimirá cada segundo. Otros pines en la Raspberry Pi Pico que son compatibles con ADC incluyen GPIO27, 28 y 29.

Modulación de ancho de pulso (Pwm)

La salida digital de un microcontrolador solo puede ser 1 o 0. Para crear una señal analógica, necesitaría un convertidor de digital a analógico. Sin embargo, otra forma es crear artificialmente una señal analógica, utilizando modulación de ancho de pulso o PWM para abreviar.

Al encender y apagar una señal digital, esto se conoce como pulso. Modulando el ancho de un pulso, esto crea artificialmente una señal analógica como se ve en el siguiente ejemplo:

 import machine
import utime
pot = machine.ADC(26
led = machine.PWM(machine.Pin(21))
led.freq(1000)
while True:
led.duty_u16(pot.read_u16())

Primero, se importaron las bibliotecas de máquina y utime . Se crea un objeto, onboard_led con una salida PWM activada en el pin 21 de GPIO. Luego, usando el comando freq , esto establece la frecuencia para modular el ancho del pulso. Imagínese girando el potenciómetro, el LED se volverá más brillante cuando lo gire en una dirección.

Esto sucede porque el valor analógico del potenciómetro se usa como valor para el ciclo de trabajo de la señal PWM, es un valor entre 0 y 65535. Sin embargo, sin conversión, girar ligeramente el potenciómetro ya puede hacer que el LED alcance su nivel máximo de brillo. .

Para solucionar esto, de modo que el potenciómetro solo alcance el brillo completo cuando se gira hasta el final, el valor se convierte con la función duty_u16 . Esta función lo convierte en un entero de 16 bits, que es un valor entre 0 y 1024, que es el mismo rango de valores que recibiría del pin analógico del Pico.

Crea más con Raspberry Pi Pico

Este artículo ha cubierto los comandos básicos en MicroPython en Raspberry Pi Pico. Para obtener más información, consulte la documentación oficial sobre la programación de MicroPython con Raspberry Pi Pico .

Si aún no está configurado en su Raspberry Pi Pico, obtenga Thonny IDE para ejecutar su código MicroPython o, alternativamente, consulte el emulador de CPU Unicorn para ejecutar un microcontrolador virtual directamente en su computadora.