Raspberry Pi Pico Tutorial de primeiros passos com MicroPython

Tempo de leitura: 8 minutes

Visão geral

Neste tutorial de introdução, aprenderemos sobre o Raspberry Pi Pico, uma nova placa de microcontrolador empolgante baseada no microcontrolador RP2040 da Raspberry Pi Foundation. O Raspberry Pi Pico é um microcontrolador baseado em Arm de baixo custo que podemos programar usando C/C++ e MicroPython.

Ao longo dos anos, as pranchas de Raspberry Pi se tornaram uma ferramenta obrigatória para estudantes, amadores, ou industriais. Mas quando se trata de custo, a placa Raspberry Pi é superada por Arduino, ESP32, STM32 ou outros microcontroladores AVR, ARM, PIC. O computador Raspberry Pi custa cerca de 35-40$, enquanto os outros microcontroladores custam apenas 2-5$. Esta é a razão pela qual a Raspberry Pi Foundation lançou sua poderosa e competitiva Raspberry Pi Pico Board de baixo custo com RP2040, um microcontrolador Dual Core ARM Cortex-M0+.

O tutorial cobre o Microcontrolador RP2040, seus recursos e especificações. Também aprenderemos sobre a Raspberry Pi Pico Board, seu layout e especificações. O guia detalhado de Raspberry Pi Pico Pins como pinos ADC, pinos I2C, pinos SPI, UART, etc, pode ajudá-lo a fazer a interface de qualquer sensor ou módulo com esta placa poderosa.

Uma vez que é um tutorial de introdução ao Raspberry Pi Pico, iremos apenas programar o dispositivo usando Micropython. Para isso, você pode usar o Thonny IDE ou também o uPyCraft IDE. Em algum outro tutorial, aprenderemos como programar Raspberry Pi Pico com C/C++. Até mesmo o IDE do Arduino oferecerá suporte ao Raspberry Pie Pico no futuro, pois está em fase de desenvolvimento agora. Analisaremos o código básico do LED Blink do Raspberry Pi Pico e verificaremos a funcionalidade da placa.

O que é o microcontrolador RP2040?

Anteriormente, todas as placas Raspberry Pi como Raspberry Pi 3 ou 4 ou Raspberry Pi Zero apresentavam processadores Broadcom como BCM2835, BCM2836, BCM2711 etc. O chip RP2040 foi anunciado em 21 de janeiro de 2021 e é o primeiro processador projetado pela Raspberry Pi Foundation.

O RP2040 é um circuito integrado microcontrolador ARM Cortex-M0+ duplo de 32 bits lançado ao mesmo tempo como parte da placa Raspberry Pi Pico. O processador é um microcontrolador de baixo custo e custa cerca de US$4. O chip é de silício de 40nm em um pacote QFN-56 de 7×7 mm.

O RP2040 contém dois núcleos ARM Cortex-M0+ com clock de 133 MHz junto com 264 KB de RAM. A memória do programa é externa e suporta até 16 MB. O dispositivo tem tudo o que você espera de um microcontrolador moderno, como portas UARTS, SPI e I2C, e há temporizadores, PWM, DMA e um conversor analógico-digital (ADC) de 12 bits.

 

Significado de RP2040

O nome RP2040 tem um significado muito interessante explicado a seguir.
1. RP significa: Raspberry Pi
2. O número 2 significa: núcleos do processador, pois é um microcontrolador dual-core. Portanto, o valor é 2.
3. O número 0 significa: Tipo de núcleo do processador, pois é ARM Cortex-M0+. Portanto, o valor é 0.
4. O número 4 significa: Representa a RAM on-chip. RP2040 tem 264 KB de RAM. A fórmula para obter o valor 4 é: floor (log2(ram/16k)). Portanto, o valor é 4.
5. O número 0 significa: Representa o Flash On-chip. Como não há flash no chip, o valor é 0.

 

Características principais do RP2040:

1. núcleos ARM Cortex-M0+ duplos de 133 MHz
2. 264kB de SRAM em seis bancos independentes
3. Suporte para até 16 MB de memória Flash fora do chip por meio de barramento QSPI dedicado
4. Controlador DMA
5. Barra transversal AHB totalmente conectada
6. Periféricos interpoladores e divisores inteiros
7. LDO programável no chip (Low-dropout_regulator) para gerar tensão de núcleo
8. 2 PLLs no chip para gerar relógios USB e centrais
9. 30 pinos GPIO, 4 dos quais podem ser usados como entradas analógicas

 

Introdução ao Raspberry Pi Pico

A Raspberry Pi Pico é a primeira placa microcontrolada baseada no RP2040. Ele se parece muito com outras placas de microcontrolador com o MCU no centro, um conector micro-USB em uma extremidade e uma fileira de contatos ao longo de cada lado. Um conector de depuração de 3 pinos está disponível na outra extremidade da placa.

O Raspberry Pi Pico mede 51 por 21 mm, que é exatamente o mesmo tamanho de um ESP32 Pico Kit e um pouco maior do que um Arduino Nano ou Micro. O Pico vem com 2 MB de memória Flash QSPI e 25 dos 30 pinos GPIO do RP2040 foram trazidos para os conectores de extensão. A placa é amigável e se encaixa perfeitamente na placa de ensaio.

 

Características do Raspberry Pi Pico

A seguir estão os recursos do Raspberry Pi Pico Board.
1. Baseado no microcontrolador RP2040
2. 2 MB de memória Flash SPI
3. Porta micro USB tipo B para alimentação e programação
4. 40 pinos IO estilo DIP
5. Interface ARM Serial Wire Debug (SWD) de 3 pinos
6. Oscilador de cristal de 12 MHz
7. Botão de seleção de inicialização
8. LED programável conectado ao GPIO 25
9. Conversor SMPS Buck-Boost de saída fixa de 3,3V

 

Raspberry Pi Pico Pinout

Esta é uma vista superior das pinagens no Raspberry Pi Pico. As etiquetas dos pinos estão na parte inferior da placa.

Existem 40 pinos no Raspberry Pi Pico. Destes 40 pinos, 26 pinos são de entrada-saída (pinos IO). Todos esses 14 pinos são analógicos, digitais e outros pinos seriais. Existem 14 pinos relacionados à alimentação e ao sistema. Os 3 pinos restantes são usados para depuração SWD.

Existem dois periféricos I2C disponíveis, I2C0 e I2C1. Da mesma forma, existem dois periféricos SPI, SPI0 e SPI1. O número de pinos UART também é dois, UART0 e UART1. Você pode atribuir qualquer um deles aos pinos nos quais estão disponíveis.

Antes de começar a usar o Raspberry Pi Pico, você deve soldar 40 pinos de cabeçote macho, 20 de cada lado da placa.

 

Programação Raspberry Pi Pico

O Pi Pico pode ser programado em C/C++ ou Python, entre outras linguagens. O Pico é adaptável a uma vasta gama de aplicações e níveis de habilidade, e começar é tão fácil quanto arrastar e soltar um arquivo. Se você estiver trabalhando com C, é recomendável usar um sistema baseado em Linux, como um computador Raspberry Pi, pois é fácil baixar o SDK e escrever programas C no Linux.

Mas vou recomendar o uso de MicroPython para programar o Raspberry Pi Pico Board. MicroPython é um intérprete de linguagem Python desenvolvido para microcontroladores e sistemas embarcados. A sintaxe para MicroPython é muito semelhante a Python. Portanto, se você trabalhou com Python, trabalhar com MicroPython será muito fácil.

Para programar o Raspberry Pi Pico usando Micropython, você pode usar:
1. Thonny IDE
2. uPyCraft IDE

Mas antes de começar a usar o Raspberry Pi Pico, você deve instalar o MicroPython no Raspberry Pi Pico Board.

 

Instalando MicroPython no Raspberry Pi Pico

1. Pressione e segure o botão BOOTSEL no Pico e imediatamente o Pico Board no seu computador usando um cabo micro USB. Libere o BOOTSEL assim que o drive RPI-RP2 aparecer no seu computador.

2. Abra o inversor RPI-RP2 que aparece na guia Unidades.

3. Visite a página de documentação oficial do Raspberry Pi Pico aqui: Documentação do Raspberry Pi.

4. Baixe o arquivo MicroPython UF2 na guia MicroPython.

5. Arraste e solte o arquivo UF2 no inversor RPI-RP2. O Raspberry Pi Pico com RP será reiniciado e agora executará o MicroPython.

 

Introdução ao Raspberry Pi Pico usando MicroPython no Thonny IDE

1. Agora vamos começar com Raspberry Pi Pico usando MicroPython no Thonny IDE. Primeiro você tem que baixar Thonny em https://thonny.org/

2. Conecte o Raspberry Pi Pico ao seu computador. Em seguida, em Thonny, vá para Tools > Options e clique na guia Interpreter. Na lista suspensa do intérprete, selecione MicroPython (Raspberry Pi Pico). O menu suspenso da porta pode ser deixado para detectar automaticamente o Pico. Clique Ok para fechar.

 

3. Quando você pluga a placa pico, uma guia de instalação do firmware aparecerá para o raspberry pi pico. Clique em Install e alguns arquivos serão baixados.

4. Após a instalação bem-sucedida, a versão MicroPython e a placa Raspberry aparecerão no Python Shell. Para testar, podemos escrever uma função de impressão rápida para dizer “Hello World”. Pressione Enter para executar o código. Você receberá Hello World como resposta.

 

Escrevendo um programa de piscar para o LED integrado do pico

O LED integrado no Raspberry Pi Pico está conectado ao GPIO25. Copie o código a seguir e cole-o na janela do editor.

from machine import Pin
import utime
led = Pin(25, Pin.OUT)
led.low()
while True:
    led.toggle()
    print("Toggle")
    utime.sleep(1)

Salve o programa no computador e dê um nome exclusivo, como blink.py

3. O programa será executado e você pode ver o LED alternando na placa

Agora desconecte o USB do Raspberry Pi Pico e conecte novamente. Você verá que o LED não está piscando. Isso ocorre porque o programa é salvo no computador, não no Raspberry Pi Pico Board.

Para fazer o sistema funcionar mesmo depois de conectar e desconectar o cabo USB, você precisa salvar o programa na Placa Pico. Para fazer isso, abra uma nova aba e cole o mesmo programa e clique em salvar. Desta vez, guarde no Pico Board.

Ao salvar, dê a ele um nome main.py conforme mostrado na imagem abaixo.

Desta vez, o LED piscará mesmo após conectar e remover o cabo de alimentação. Isso ocorre porque o programa é salvo no Pi Board.

 

Escrevendo um programa de piscar para o LED externo

Agora vamos escrever um código Raspberry Pi Pico LED Blink para piscar um LED externo conectado ao Raspberry Pi Pico GPIO Pin28. O esquema é fornecido abaixo. Conecte um LED ao GPIO28 via resistor de 330ohm.

Copie o seguinte código e carregue-o no Pico Board.

from machine import Pin
import utime
led = Pin(28, Pin.OUT)
led.low()
while True:
    led.toggle()
    print("Toggle")
    utime.sleep(1)

Assim que o código for executado, o LED começará a piscar a cada intervalo de 1 segundo.

 

Escrevendo um programa para piscar os LEDs internos e externos

Agora vamos escrever um código Raspberry Pi Pico para piscar o LED interno e externo. O código é muito simples. Copie o código a seguir e execute.

from machine import Pin
import utime
led1 = Pin(25, Pin.OUT)
led2 = Pin(28, Pin.OUT)
led1.low()
led2.low()
while True:
    led1.toggle()
    led2.toggle()
    print("Toggle")
    utime.sleep(1)

Assim que o código for executado, os dois LEDs piscarão, ou seja, o LED integrado e também o LED externo.