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!