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!

5/5 - (1 voto)

Related posts

Apache Web Server com Raspberry Pi

by Arduino e Cia
9 anos ago

Como usar um display LCD I2C com Raspberry Pi

by Arduino e Cia
8 anos ago

Como usar o AnyDesk na Raspberry Pi: acesse sua placa remotamente

by Arduino e Cia
4 anos ago
Sair da versão mobile