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:
UART0 | Pino físico | GPIO |
GND | 3 | – |
TX | 1 | GP0 |
RX | 2 | GP1 |
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