Comunicação Serial com Raspberry Pi Pico: UART na Prática em Sistemas Embarcados

Após consolidar aquisição de dados, controle de hardware, persistência e controle de potência, o próximo passo em sistemas embarcados é a comunicação entre dispositivos.

UART (Universal Asynchronous Receiver/Transmitter) é um dos mecanismos mais fundamentais para isso — simples, direto e amplamente suportado.


O que é Comunicação Serial

Comunicação serial consiste no envio de dados:

  • Bit a bit
  • Em sequência
  • Sem necessidade de clock compartilhado (assíncrono)

Conceitos Fundamentais

Baud Rate

9600 baud = 9600 bits por segundo

Valores típicos:

  • 9600
  • 19200
  • 38400

Estrutura de Frame

[Start] [8 bits de dados] [Stop]

Formato padrão:

  • 8 bits
  • Sem paridade
  • 1 bit de parada (8N1)

Linhas Físicas

  • TX → Transmissão
  • RX → Recepção
  • GND → Referência comum

UART no Raspberry Pi Pico

Características:

  • 2 interfaces UART disponíveis
  • Configuração flexível via software
  • Integração direta com MicroPython

Inicialização

from machine import UART

uart = UART(0, 9600)

Operações Básicas

uart.write("Hello")
uart.read()
uart.readline()

Projeto 1: Envio de Temperatura

from machine import ADC, UART
import utime

adc = ADC(4)
uart = UART(0, 9600)

conv = 3.3 / 65535

while True:
    v = adc.read_u16() * conv
    temp = 27 - (v - 0.706) / 0.001721

    uart.write(str(temp)[:5])
    uart.write(" C\n")

    utime.sleep(10)

Arquitetura:

  • Entrada: sensor interno
  • Processamento: conversão térmica
  • Saída: transmissão serial

Projeto 2: Recepção de Dados

from machine import UART

uart = UART(0, 9600)

while True:
    if uart.any():
        data = uart.readline()
        print(data)

Ponto crítico:

  • uart.any() evita leitura inválida
  • readline() depende de \n

Projeto 3: Comunicação Pico ↔ Arduino

Envio (Pico)

uart = UART(0, 9600)
uart.write("25.5 C\n")

Recepção (Arduino)

if(Serial.available()) {
    String data = Serial.readStringUntil('\n');
    Serial.println(data);
}

Aplicação:

  • Integração entre plataformas
  • Sistemas híbridos

Projeto 4: Recebendo Dados Externos

from machine import UART

uart = UART(0, 9600)

while True:
    data = uart.readline()
    if data:
        print(data)

Projeto 5: Comunicação com Raspberry Pi

Pico

from machine import UART
import utime

uart = UART(0, 9600)

while True:
    uart.write("Hello from Pico\n")

    if uart.any():
        response = uart.readline()
        print(response)

    utime.sleep(5)

Raspberry Pi

import serial
import time

ser = serial.Serial("/dev/serial0", 9600)

while True:
    data = ser.readline()
    print(data)

    ser.write(b"Hello back\n")
    time.sleep(5)

Boas Práticas

Sincronização de Baud Rate

UART(0, 9600)

Ambos os lados devem usar o mesmo valor.


Controle de Nível Elétrico

  • Pico: 3.3V
  • Interfaces industriais podem usar níveis diferentes

Nunca conectar diretamente sem validação.


Uso de Delimitadores

uart.write("data\n")

Permite parsing confiável com readline().


Arquitetura de Sistema Real

Com UART, o sistema evolui para comunicação distribuída:

  • Módulos independentes
  • Troca de dados estruturada
  • Integração entre dispositivos

Integração com Outros Blocos

UART conecta todos os pilares anteriores:

  • Sensores → leitura local
  • Processamento → decisão
  • PWM → atuação
  • Data logging → histórico
  • UART → comunicação externa

Insight Técnico Final

Sem comunicação, o sistema é isolado.

Com UART, ele passa a:

  • Compartilhar dados
  • Integrar sistemas
  • Escalar arquitetura

Encerramento Geral

Neste ponto, o conjunto está completo:

  • Entrada (ADC)
  • Processamento (lógica)
  • Saída (GPIO / PWM)
  • Persistência (arquivos)
  • Comunicação (UART)

Isso define a base de qualquer sistema embarcado moderno.