Manual
do
Maker
.
com
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](https://www.manualdomaker.com/article/raspberry-pi-pico-rp2040/(abrir em uma nova aba)) e como programar a Raspberry Pi Pico, onde apresento o primeiro setup, feito na Raspberry Pi 4.
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();
}
}
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
}
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.
Aproveite se ainda não tem uma e pegue na RoboCore, que está com um preço realmente baixo.
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
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.