12 de abril de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Como configurar GPIO e serial na Raspberry Pi Pico

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

A partir desse artigo vamos começar a organizar os conceitos de programação para a Raspberry Pi Pico. É bastante semelhante ao processo da API do Arduino, mas é mais fácil ainda, por isso, não tenha preguiça de inovar! Começaremos a série vendo como configurar GPIO e serial na Raspberry Pi Pico.

Se não viu ainda os artigos anteriores, recomendo a leitura da apresentação da Pico e como programar a Raspberry Pi Pico, onde apresento o primeiro setup, feito na Raspberry Pi 4.

Estrutura do programa

Na Raspberry Pi Pico não utilizamos setup() e loop() como no Arduino, mas podemos fazê-lo, se desejado. A estrutura padrão é igual a qualquer programa em C/C++:

int main(){
    ...
}

Se quisermos usar as funções como no Arduino, basta declará-las previamente e fazer a chamada assim:

void setup(){
    ...
}
void loop(){
 ...
}
int main(){
    setup();
    while (true){
        loop();
    }
}

Configurar GPIO na Raspberry Pi Pico

Para configurar um pino, basta inicializá-lo, então configurar a direção e o estado. Os últimos dois passos são os mesmos que utilizamos no Arduino. Para configurar e ligar o LED onboard, basta fazer isso:

int main(){
    const uint PIN_LED = 25;
    gpio_init(PIN_LED); //iniciamos o GPIO 25
    gpio_set_dir(PIN_LED,GPIO_OUT); //usamos a macro GPIO_OUT para definir a direção
    gpio_put(PIN_LED,1); // ligamos o LED
    
    while (true) sleep_ms(10);
    return 0; //nunca deve chegar aqui
}

Como configurar a serial na Raspberry Pi Pico

A UART padrão é a 0. A tabela a seguir descreve o pinout:

UART0Pino físicoGPIO
GND3
TX1GP0
RX2GP1

A saída da serial pode ser direcionada para UART, USB ou ambos. Essa configuração pode ser ajustada usando diretivas do CMake e a configuração deve ser feita no arquivo CMakeList.txt contido no diretório do projeto. Veremos isso posteriormente em detalhes, mas para não faltar informação:

(esse exemplo é do hello world)

pico_enable_stdio_usb(hello_world 1)
pico_enable_stdio_uart(hello_world 0)

No caso, ativamos a saída para a USB-serial e desabilitamos a saída via UART.

Desse modo, sequer precisamos mexer no código C.

Podemos editar o código de exemplo “hello world” e adicionar o GPIO, ou então editar o código de exemplo “blink” e adicionar a serial. Para configurar a serial usamos:

int main(){
    stdio_init_all(); //inicializa a serial
    while(true){
        printf("Ola mundo\n");
        sleep_ms(1000);
    }
    return 0; //nunca deve chegar aqui
}

Se olhar no diretório de exemplo, vai ver que no hello_world tem o diretório hello_usb e hello_serial. Abrindo o código, verá que são idênticos. A diferença está no arquivo CMakeLists.txt, como citado anteriormente.

O procedimento para compilação e upload é o mesmo citado o artigo anterior, mas vamos lá. Entre no diretório de um exemplo, modifique o código e então digite:

make -j4

Os arquivos de saída serão o hello_usb.uf2 e hello_serial.uf2. Agora basta liberar o acesso à área de armazenamento da Raspberry Pi Pico pressionando o botão BOOTSEL e soltando-o após conectar o Raspberry Pi Pico à porta USB. Se estiver utilizando um desktop a montagem será automática, senão, monte o dispositivo manualmente, caso esteja em um Linux. Identifique o dispositivo:

dmesg |tail

Supondo que seja sda, a partição será /dev/sda1. Para montar:

sudo mount /dev/sda1 /mnt

Copie o arquivo para a Raspberry Pi Pico, que reiniciará automaticamente. Feito isso, desmonte a partição:

cp hello_usb.uf2 /mnt && sync
sleep 1 && umount /mnt

O programa é gravado de forma persistente, ou seja, quando reconectar a Raspberry Pi Pico, o programa ainda estará lá. Gere seu novo programa e repita o processo para sobrescrevê-lo.

Para acessar a porta serial, use seu programa favorito. Pode ser a IDE do Arduino, CuteCom, GTKTerm, minicom, screen, (com todo o respeito) cu ou outro que desejar.

Em outro artigo veremos como fazer a comunicação direta UART entre o Raspberry Pi 4 e o Raspberry Pi Pico. Por enquanto é isso.

Adquira sua Raspberry Pi Pico

Aproveite se ainda não tem uma e pegue na RoboCore, que está com um preço realmente baixo.

Vídeo

Assista o vídeo relacionado para ver essa configuração e entender como fazer o acesso à serial pelo console ou através de qualquer programa de comunicação serial.

A velocidade padrão da comunicação é 115200. Até a próxima!

Revisão: Ricardo Amaral de Andrade