Comunicação Raspberry Pi e Raspberry Pi Pico usando interface serial
No post de hoje vamos mostrar como realizar a comunicação entre placas Raspberry, mais especificamente entre a Raspberry Pi 4 Model B e a Raspberry Pi Pico, a versão microcontrolada lançada recentemente pela Fundação Raspberry.
Os motivos para se fazer esse tipo de conexão é praticamente o mesmo da comunicação entre Raspberry Pi e Arduino: você pode usar componentes como módulos e sensores que se “comportam melhor” em uma placa microcontrolada como a Raspberry Pi Pico, e enviar apenas os dados dos sensores para a Raspberry Pi 4, que tem maior poder de armazenamento e processamento.
Dessa maneira, fica muito fácil coletar os dados dos sensores e armazenar em um banco de dados como o MySQL por exemplo, e também enviar esses dados para a nuvem ou um servidor externo.
Pré-requisitos e o que vamos construir
Como dissemos anteriormente, vamos usar nesse projeto uma placa Raspberry Pi 4 e também uma Raspberry Pi Pico com os pinos soldados, como essa da imagem abaixo.

A lista de material é bem simples, já que vamos enviar para a Pi 4 os dados do sensor de temperatura interno da Raspberry Pi Pico, e faremos isso conectando diretamente as placas, então separe as placas, uma protoboard e jumpers para conexão.
Como pré-requisito, tenha a sua Raspberry Pi 4 configurada e conectada na internet, e para isso recomendo a leitura do post Raspberry Pi Imager: um jeito fácil de instalar o Raspbian, que tem todos os passos para deixar sua placa pronta para uso.
Sobre a Raspberry Pi Pico, temos um post falando mais sobre as características da placa e também como utilizá-la com a IDE do Arduino. Confira em Como usar a Raspberry Pi Pico com IDE Arduino.
Habilitando a interface serial por hardware na Raspberry Pi 4
Com a placa Raspberry Pi 4 configurada, a primeira coisa que temos que fazer é habilitar a interface serial, que é o meio de comunicação que vamos usar para que as duas placas “conversem”. Faremos isso usando o comando:
sudo raspi-config
Na tela do raspi-config, acesse a opção 3 Interface Options e em seguida a opção P6 Serial Port:

Na tela seguinte, selecione NO/NÃO para a pergunta “Would you like a login shell to be acessible over serial?” e YES/SIM para a pergunta “Would you like the serial port hardware to be enabled?”. A primeira pergunta se refere à exigência de login para acesso da placa via interface serial, e a segunda para confirmar se realmente você quer habilitar a interface serial via hardware (GPIO).
Ao final da configuração, sua tela deve estar assim:

Login shell via serial desabilitado e interface serial habilitada. Clique em OK para sair do raspi-config e reinicie a placa.
Conexão das placas Raspberry Pi
Vamos conectar diretamente as placas pois ambas trabalham com nível de sinal de 3.3V, para isso conecte os pinos da serial da Pi 4 (pinos 8 (TX) e 10 (RX)) nos pinos da serial1 da Pico (pinos 12 (TX) e 11 (TX)).

Observe que interligamos também o GND das 2 placas.
Programas comunicação Raspberry Pi 4 e Pi Pico
Agora basta carregarmos os programas para testar a comunicação. Na Pico vamos usar a IDE do Arduino para carregar o programa abaixo:
//Programa: Comunicação Raspberry Pi 4 e Pi Pico
//Autor: Arduino e Cia
void setup()
{
//Inicializacao das portas seriais
Serial.begin(115200);
Serial2.begin(9600);
delay(3000);
}
void loop()
{
//Envia os dados de temperatura para o serial monitor
Serial.printf("Temperatura Core: %2.1f ºC\n", analogReadTemp());
//Envia os dados de temperatura para a serial1
Serial2.printf("%2.1f C\n", analogReadTemp());
delay(3000);
}
O programa é bem simples e basicamente inicializa as seriais para envios dos dados. A porta serial padrão é setada com velocidade de 115200 e permite que você acompanhe a medição pelo Serial Monitor da IDE do Arduino.
Já a Serial1 (aquela dos pinos 11 e 12 da Pico) é setada com a velocidade de 9600 e temos que setar a mesma velocidade no nosso próximo programa, em Python, que será colocado na Raspberry Pi 4.
Crie um novo arquivo usando o editor de textos de sua preferência (recomendo o nano) e salve com o nome de leitura_serial.py depois de copiar/digitar o código abaixo:
#Programa: Comunicacao Raspberry Pi 4 e Pi Pico
#Autor: Arduino e Cia
# !/usr/bin/python3
from tkinter import *
from tkinter import messagebox
from tkinter import font
import time
import serial
top = Tk()
top.geometry("515x190+140+140")
top.title("TEMPERATURA Pi PICO")
top.configure(background='grey')
helv36 = font.Font(family='Helvetica', size=105, weight='bold')
SERIAL_PORT = "/dev/serial0" # Raspberry Pi 4
ser = serial.Serial(SERIAL_PORT, baudrate = 9600, timeout = 5)
def desenha_botao1():
E = Button(top, text = (x.rstrip().lstrip()), fg = "black", bg = "white", font = helv36)
E.config(width="6",height="1")
E.place(x = 10,y = 10)
top.update()
while 1:
#aguarda os dados na serial
x=ser.readline()
#mostra na janela de terminal o valor recebido
print (x.rstrip().lstrip())
#mostra o valor na tela em formato grafico
desenha_botao1()
Execute o programa acima com:
sudo python3 leitura_serial.py
O programa monitora a porta serial e aguarda o envio dos dados. Quando o valor da temperatura for recebido, ele é mostrado tanto na janela de terminal como em uma interface gráfica como essa abaixo:

Gostou? Confira outros posts usando Raspberry Pi aqui mesmo no Arduino e Cia!