



Lançada em 2021, Raspberry Pi Pico é a primeira placa microcontrolada da série Raspberry Pi. Diferentemente das demais, seu chip principal é o RP2040, o primeiro microcontrolador desenvolvido pela empresa. Tendo baixo custo quando comparada com as demais placas com chips de 32 bits, é bem versátil e, portanto, tem potencial para integrar diversos projetos. A seguir, algumas características destacadas no datasheet da placa:

A forma mais simples de programar o Raspberry Pi Pico é utilizando o MicroPython. Este interpretador pode ser carregado como firmware na placa e usado para traduzir os códigos em Python salvos em sua memória flash. Já o software que melhor funciona com este interpretador é o Thonny Python, que pode ser baixado pelo link.

Enquanto o mantém pressionado, conecte a placa, via USB, ao computador, que irá percebe-la como um dispositivo de armazenamento. Então, abra a IDE e, no canto inferior direito, clique na versão do Python mostrada.
No menu que será aberto, selecione "MicroPython (Raspberry Pi Pico)".
A partir daí, prossiga com o processo de instalação.
Ao término, você poderá controlar sua placa pela IDE. Para testar, digite, no terminal que aparece no canto inferior da tela, "from machine import Pin", pressione enter, "led = Pin(25, Pin.OUT)", pressione enter e "led.value(1)" e pressione enter. Neste momento, o Led embutido na placa deverá estar aceso. Para apaga-lo, digite "led.value(0)" e tecle enter. Caso algo dê errado no processo, verifique se as etapas de instalação foram executadas adequadamente.


No nome, inclua, ao fim, a extensão ".py". Com o arquivo salvo, basta clicar em "Run current script" (circulo verde ao lado da opção de salvar) com ele aberto na IDE para que o Raspberry Pi Pico o execute. Para que o código seja executado automaticamente na energização do Pico, mesmo que desconectado do computador, basta nomear o arquivo como "main.py".
Em todos os exemplos utilizaremos a montagem vista a seguir. Nela serão utilizados: Materiais necessários para os projetos de exemplo

#importa as classes a serem utilizadas
from machine import Pin, Timer
#instancia o pino 15 como uma saída para led
led = Pin(15, Pin.OUT)
#instancia timer como um objeto do tipo Timer()
timer = Timer()
#descreve a função blink
def blink(timer): #colocar timer como parâmetro é necessário para indicar que a função é callback deste objeto
led.toggle() #inverte o estado do led
#inicia o timer com frequencia de 1 Hz, modo periódico (não encerra após o primeiro ciclo) e callback para blink
timer.init(freq = 1, mode = Timer.PERIODIC, callback = blink)
Repare que não há rotinas de delay ou sleep neste código. Portanto, é possível atribuir instruções para que o processador execute nos intervalos entre as mudanças de estado do led.
A seguir, o funcionamento do código:
#importa as classes que serão utilizadas
from machine import Pin, PWM
from time import sleep
#instancia o pino 15 como saída PWM
pwm = PWM(Pin(15))
#define a frequencia, em Hz, da saída
pwm.freq(1000)
#ciclo infinito
while True:
for duty in range(65025): #varia duty de 0 a 2^16
pwm.duty_u16(duty) #define o duty-cicle como igual a duty
sleep(0.0001) #delay de 100 us
for duty in range(65025, 0, -1): #realiza o mesmo processo
pwm.duty_u16(duty) #do ciclo anterior, mas com
sleep(0.0001) #duty variando decrescentemente
O funcionamento:
#importa as classes que serão utilizadas
from machine import Pin
from time import sleep
#instancia led como saida digital
#e button como entrada digital
led = Pin(15, Pin.OUT)
button = Pin(16, Pin.IN)
#ciclo infinito
while True:
if not button.value(): #se o botao não estiver em nível alto
#e, portanto, estiver apertado
#já que liga a entrada ao GND
led.toggle() #inverte o valor do led
sleep(0.5) #delay para debounce
O funcionamento pode ser visto abaixo:
#importa as classes que serão utilizadas
from pico_i2c_lcd import I2cLcd
from machine import I2C, Pin, ADC
from time import sleep
#instancia o pino de entrada analógica
adc = ADC(Pin(26))
#instancia a conexão I2C, utilizando a interface 0
#o pino 1 como scl, o 0 como sda e a frequencia de
#medições como 100000 Hz
i2c = I2C(id=0,scl=Pin(1),sda=Pin(0),freq=100000)
#instancia o LCD com a conexão i2c iniciada anteriormente,
#o endereço 0x27 do barramento e 2 linhas de 16 caracteres
lcd = I2cLcd(i2c, 0x27, 2, 16)
#ciclo infinito
while True:
lcd.putstr('V: ') #escreve a partir da primeira posição
lcd.putstr(str(adc.read_u16() * 3.3 / 65535)) #escreve a leitura do ADC convertida p/ tensão
sleep(0.5) #aguarda meio segundo
lcd.clear() #limpa o LCD e volta p/ primeira posição
Para descobrir o endereço do LCD, rode o seguinte código com ele conectado ao Pico.
import machine
sda=machine.Pin(0)
scl=machine.Pin(1)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000)
print('I2C address:')
print(i2c.scan(),' (decimal)')
print(hex(i2c.scan()[0]), ' (hex)')
O endereço será mostrado no terminal da IDE.
Funcionamento:
Neste post, vimos algumas funcionalidades do Raspberry Pi Pico e uma forma diferente de programar um microcontrolador. O MicroPython também pode ser utilizado junto aos ESP's e outros chips. Futuramente, veremos como explorar sua divisão de núcleos e como programa-lo com linguagens compiladas, aumentando sua eficiência e aproveitando melhor seu armazenamento. Obrigado pela leitura!
|
Neste post, conheceremos o Raspberry Pi Pico e exploraremos alguns de seus recursos mais básicos.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200