Um guia para iniciantes em MicroPython com o Raspberry Pi Pico

O Raspberry Pi Pico é o mais novo membro da família Raspberry Pi. Antes disso, a linha de produtos Raspberry Pi eram computadores de placa única capazes de executar um sistema operacional.

Baseado no novo chip RP2040, o Raspberry Pi Pico suporta MicroPython e C / C ++. Com o Raspberry Pi Pico, iniciantes e entusiastas podem controlar hardware e dispositivos conectados. Os pinos GPIO do Raspberry Pi Pico podem ser usados ​​para diminuir as luzes, ler o estado dos interruptores e muito mais.

O que é MicroPython?

A programação em microcontroladores foi feita predominantemente na linguagem C, como pode ser visto nas placas de desenvolvimento do Arduino . Então, em 2014, uma nova linguagem de programação para microcontroladores, MicroPython, foi publicada. MicroPython permite que você escreva código Python no metal de um microcontrolador. Isso significa que você pode escrever código Python sem um sistema operacional.

Python é uma linguagem de programação de alto nível amigável para iniciantes que permite que os usuários se concentrem no aprendizado de conceitos de programação. O mesmo ocorre com o MicroPython.

Usando um LED

Para controlar o hardware, o Pico fala com a série de pinos ao longo de ambas as bordas. Eles são chamados de pinos de entrada de saída de uso geral (GPIO) e o LED on-board pode ser encontrado no GPIO 25. Para controlá-lo, primeiro importe as bibliotecas necessárias:

 import machine
 import utime

Em seguida, chame a função Pin usando a biblioteca da máquina para lidar com o pino GPIO do Pin, neste caso estamos configurando o Pin no GPIO 25, portanto, é o primeiro parâmetro. O segundo parâmetro o define como um pino de saída em vez de um pino de entrada, fazendo isso, o pino sabe o que deve estar fazendo:

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

Para continuar, no código a seguir, estamos dizendo ao Pico para então definir o valor do pino em GPIO 25 para 1, ou 'ligado'.

 while True:
onboard_led.value(1)

No entanto, você pode perceber que nada parece acontecer. Isso ocorre porque o Pico trabalha muito rápido, então o LED acende mais rápido do que você pode perceber a olho nu. Para corrigir isso, precisamos desacelerar o programa usando o comando sleep da biblioteca utime . O código completo onde o LED liga e desliga pode ser visto abaixo:

 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)

Ligar e desligar LEDs

Como alternativa, há outra maneira de ligar e desligar os LEDs, com o comando toggle :

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

No exemplo, o comando toggle substitui a necessidade de definir o valor do LED para 1 e depois 0. Ele ainda acenderá por 5 segundos e depois apagará por mais cinco, enquanto o programa estiver em execução.

Criação de funções

À medida que os programas ficam mais complexos, é útil agrupar pedaços de código para manter a coerência. Para fazer isso, MicroPython como Python permite o uso de funções. Funções são um grupo de instruções relacionadas que executam uma tarefa específica. Por exemplo, no código a seguir, uma função chamada printNames é definida:

 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()

A última linha do código chama a função para que ela realmente seja executada.

rotações

A lógica condicional executa ações diferentes dependendo se uma restrição booleana é avaliada como verdadeira ou falsa. Muitos projetos do Raspberry Pi Pico são baseados nessas afirmações lógicas. No exemplo a seguir, uma instrução if-else é usada para determinar se uma instrução print será executada:

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

No próximo exemplo, o loop for é usado com a função range . Esses loops podem ser usados ​​para repetir um bloco de código várias vezes.

Para este exemplo, o comando de impressão será executado cinco vezes com um atraso de cinco segundos entre cada uma delas com o comando de suspensão :

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

Conversor analógico para digital (ADC)

Embora você não seja capaz de ver, o Raspberry Pi Pico tem um conversor analógico para digital interno. No exemplo a seguir, um potenciômetro é conectado ao Raspberry Pi Pico no GPIO 26, que é capaz de funcionalidade ADC:

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

Aqui, antes de podermos usar este pino com capacidade ADC, ele precisa ser configurado com a função ADC. Então, enquanto o programa estiver em execução, o valor do potenciômetro será impresso a cada segundo. Outros pinos no Raspberry Pi Pico que são compatíveis com ADC incluem GPIO27, 28 e 29.

Modulação por largura de pulso (Pwm)

A saída digital de um microcontrolador só pode ser 1 ou 0. Para criar um sinal analógico, você precisa de um conversor digital para analógico. No entanto, outra maneira é criar artificialmente um sinal analógico, usando modulação por largura de pulso ou PWM para breve.

Ao ligar e desligar um sinal digital, isso é conhecido como pulso. Ao modular a largura de um pulso, isso cria artificialmente um sinal analógico, conforme visto no exemplo a seguir:

 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())

Primeiro, as bibliotecas da máquina e do utime foram importadas. Um objeto, onboard_led , é criado com uma saída PWM ativada no pino 21 do GPIO. Então, usando o comando freq , isso define a frequência para modular a largura de pulso. Imagine girar o potenciômetro, o LED ficará mais brilhante quando girado em uma direção.

Isso acontece porque o valor analógico do potenciômetro é usado como um valor para o ciclo de trabalho do sinal PWM, é um valor entre 0 e 65535. Porém, sem conversão, girar ligeiramente o potenciômetro já pode fazer com que o LED alcance seu nível de brilho máximo .

Para corrigir isso, de forma que o potenciômetro só atinja o brilho total quando girado até o fim, o valor é convertido com a função duty_u16 . Esta função o transforma em um inteiro de 16 bits que é um valor entre 0 e 1024, que é a mesma faixa de valores que você receberia do pino analógico do Pico.

Crie mais com Raspberry Pi Pico

Este artigo abordou os comandos básicos do MicroPython no Raspberry Pi Pico. Para obter mais informações, verifique a documentação oficial sobre a programação MicroPython com o Raspberry Pi Pico .

Se ainda não estiver configurado em seu Raspberry Pi Pico, obtenha o Thonny IDE para executar seu código MicroPython ou, alternativamente, verifique o emulador de CPU Unicorn para executar um microcontrolador virtual diretamente em seu computador.