19 de setembro de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Como programar a Raspberry Pi Pico

configurar a UART no Raspberry | Raspberry Pi Pico no Linux | serial na Raspberry Pi Pico | programar a Raspberry Pi Pico

Nesse primeiríssimo artigo mão-na-massa vamos ver como preparar o ambiente de compilação para o Raspberry Pi Pico usando o Raspberry Pi 4 como host. Se não leu o artigo introdutório, veja a apresentação do Raspberry Pi Pico RP2040, pode ser importante conhecer um pouco da placa antes de seguir. Sem mais delongas, vejamos como programar a Raspberry Pi Pico.

Preparando o Raspberry Pi 4

É fundamental que antes de começar a configurar o ambiente, o sistema esteja atualizado. Também é fundamental que seja o sistema oficial, o Raspberry Pi OS, se o objetivo for programar a Raspberry Pi Pico no RPi4.

No vídeo demonstro a configuração de um sistema recém instalado. Todo o processo será feito por SSH para não precisar conectar teclado, mouse e monitor ao Raspberry.

Após gravar um novo sistema no SD, abra a partição de boot. No Windows será a única partição do SD disponível. Dentro dessa partição devemos criar 2 arquivos.

wpa_supplicant.conf

Esse arquivo conterá as configurações para conexão WiFi. Durante o boot ele será copiado para o destino correto, que no sistema é /etc/wpa_supplicant/wpa_supplicant.conf. Como estamos criando-o durante o boot, não precisaremos mais refazer a conexão à posteriori.

Coloque esse conteúdo nele:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 
update_config=1 
country=<Insert 2 letter ISO 3166-1 country code here> 
 
network={ 
 ssid="seu_ssid" 
 psk="sua_senha" 
}
 

No vídeo demonstro essa configuração com minhas credenciais de laboratório.

Salve o arquivo e então crie um arquivo vazio chamado ssh. Com isso, teremos acesso por ssh após o boot. Coloque o SD no RPi4, inicie-o e aguarde uns 5 minutos para que o sistema se configure no SD, fazendo o redimensionamento e outros ajustes. Depois disso, entre na interface de seu roteador WiFi e veja qual o IP que a RPi4 pegou. No vídeo eu demonstro o processo também, mas cada roteador tem sua própria interface, você deverá procurar por algo semelhante.

Para se conectar ao Raspberry Pi 4 por SSH, use o comando:

ssh pi@192.168.1.251

Troque o IP pelo IP do seu Raspberry. A senha padrão é raspberry.

Após ter se conectado ao sistema:

sudo su
apt-get update
apt-get upgrade
exit
wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
chmod +x pico_setup.sh
./pico_setup.sh

O script fará a instalação das dependências, como o SDK, os exemplos e o playground. Também definirá os paths de sistema e os inserirá no ~/.bashrc. Depois, compilará o exemplo blink e hello_world no diretório pico-examples/build/{blink,hello_world}.

Ainda, baixará e instalará a ferramenta picotool para um path binário do sistema e compilará o picoprobe. Uma parte magnífica da qual trataremos amplamente – ele fará o download e compilará o OpenOCD para suporte a debug, então baixará e instalará o VS Code e as extensões necessárias.

Também será configurada a UART do Raspberry para usar com a Raspberry Pi Pico.

Esse setup completo deve consumir em torno de 2.5G de SD e levará um tempo enorme, mas é praticamente automático. Essa é provavelmente uma tarefa para se fazer no fim de semana.

O diretório pico será criado no nível de diretório que o script foi executado, portanto é recomendado que esteja no diretório /home/pi para facilitar as coisas.

Terminado o processo, reinicie o Raspberry Pi 4:

sudo shutdown -r now

O VSCode estará disponível no menu Programming, mas o binário se chama code, caso deseje executá-lo remotamente através de uma conexão ssh, como demonstro no vídeo.

Como compilar um exemplo

Programar a Raspberry Pi Pico é fácil, o procedimento mais complicado é preparar o ambiente de compilação.

Entrando no já citado diretório de exemplos, por exemplo, o blink, basta digitar make -j4 (para usar os 4 núcleos para compilar). Ao final teremos dois arquivos importantes: O blink.elf, que usaremos para debug, e o blink.uf2, que é o programa a ser arrastado para a área de armazenamento da RP2040, como se fosse um pendrive. Assim sendo, podemos usar um dos exemplos como base, copiando-o e modificando-o como desejado. Contenha o desejo de fazer qualquer coisa ainda, vamos concluir o raciocínio e depois seguimos com mais passos. Abaixo, o código de exemplo do blink:

/**
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

 #include "pico/stdlib.h"

int main() {
    const uint LED_PIN = 25;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(250);
        gpio_put(LED_PIN, 0);
        sleep_ms(250);
    }
}

O código é um pouco diferente do que normalmente usamos com o SDK do Arduino, que utiliza o padrão setup() e loop(), mas o arquivo principal do Arduino também é um main() que chama o setup() e faz um loop infinito na função loop(), ou seja, é tudo a mesma coisa.

As funções de interação com os pinos de IO têm nomes diferentes, mas fazem a mesma coisa. Repare que é até mais simples que programar em Arduino. A parte que estaria em setup() precede o loop while() e o loop while() corresponde à função loop() do Arduino. Ponto.

Como carregar programas para a Raspberry Pi Pico

O método mais rápido é acessá-la como dispositivo de massa (um dispositivo de armazenamento, como se fosse um HD ou um pendrive na USB). Desse modo bastará arrastar (ou copiar) o programa.uf2 para a área de armazenamento. Para fazê-lo, segure o botão BOOTSEL e conecte a Raspberry Pi Pico à USB. Isso forçará a inicialização como dispositivo de massa.

Se estiver utilizando o desktop na Raspberry Pi 4, a montagem será automática. Para fazer a montagem por linha de comando, assista o vídeo onde mostro a identificação do dispositivo quando conectado. Esse modo é bom para o caso de estar acessando a Raspberry Pi 4 por SSH.

Arrastando ou copiando o arquivo para a área de armazenamento, a Raspberry Pi Pico reiniciará, executando o programa copiado para ela.

O blink acontecerá no LED onboard, conectado ao GPIO 25.

Para fazer a montagem por linha de comando, identifique o dispositivo:

dmesg|tail

Isso trará a informação do novo dispositivo encontrado quando conectada a Raspberry Pi Pico. Algo como sda. Supondo que seja /dev/sda1 (sendo sda o dispositivo), faça a montagem como é o padrão no Linux:

sudo mkdir -p /mnt/pico
sudo mount /dev/sda1 /mnt/pico

Listando o conteúdo do diretório deverão aparecer os arquivos INDEX.HTM e INFO_UF2.TXT. Para listar, use o comando:

ls /mnt/pico

Para copiar o programa (por exemplo, blink.uf2) faça:

sudo cp blink.uf2 /mnt/pico && sudo sync

O comando sync força a sincronização da cópia, evitando que fique em uma área de cache antes de gravar de facto na Raspberry Pi Pico.

Apesar da Raspberry Pi Pico já estar executando o código pouco depois da cópia, ainda será necessário “desmontar” o dispositivo. Ele já não está mais realmente conectado como dispositivo de armazenamento, mas o processo continua existindo no sistema operacional. Simplesmente digite:

sudo umount /mnt/pico

Para substituir o programa, basta repetir o processo, colocando o novo programa na área de armazenamento.

Adicionando botão de reset na Raspberry Pi Pico

Para entrar em modo de dispositivo de massa é necessário desconectar, segurar o botão BOOTSEL e reconectar a Raspberry Pi Pico. Para evitar esse processo podemos adicionar um botão que feche o circuito entre o pino RUN e o GND.

Para não estender demais o artigo, vamos ficar por aqui. Já no próximo artigo (que deve ser exatamente o próximo depois desse, ou seja, 1 dia de diferença) veremos como instalar o ambiente de compilação em desktop Linux e Windows.

Vídeo

No vídeo “Raspberry Pi 4 & Raspberry Pi Pico” mostro todo esse processo descrito nesse artigo, confira. Aproveitando, se não é inscrito ainda, inscreva-se em nosso canal DobitaobyteBrasil no Youtube e acompanhe essa aventura incrível que será disposta pelos próximos dias!

Onde comprar a Raspberry Pi Pico?

Se ainda não comprou aproveite para fazê-lo com a RoboCore, que está com um preço incrível, chegando a 1/3 do preço do mesmo produto no MercadoLivre. Sério, vai acabar logo, não perca a oportunidade de acompanhar os tutoriais aqui com sua placa em mãos!

Revisão: Ricardo Amaral de Andrade