ESP32 e Arduino

ESP32 vs Raspberry Pi Pico W para IoT: Wi-Fi, MicroPython, Arduino e TLS Comparados

Uma comparação prática entre o ESP32 e o Raspberry Pi Pico W para projetos conectados, cobrindo hardware, Wi-Fi e Bluetooth, opções de programação, desempenho de TLS, modos de baixo consumo e código MQTT nas duas placas.

Placas ESP32 e Raspberry Pi Pico W lado a lado, ambas publicando dados de sensores em um broker MQTT
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

ESP32 vs Raspberry Pi Pico W é uma das dúvidas mais comuns no início de um projeto IoT com Wi-Fi, e as duas placas conseguem publicar dados de sensores em um broker MQTT com poucas linhas de código. Esta comparação analisa o que realmente importa em dispositivos conectados: a pilha sem fio, os ambientes de programação, o desempenho do TLS, a economia de energia e o ecossistema, e termina com uma recomendação clara para cada tipo de projeto.

A Resposta Curta

Escolha o ESP32 quando o dispositivo for essencialmente um dispositivo de rede: ele precisa de TLS, Bluetooth, operação a bateria com deep sleep ou bibliotecas maduras de Arduino e ESP-IDF. Escolha o Pico W quando você valoriza a excelente documentação da Raspberry Pi, o I/O programável (PIO) do RP2040 ou uma curva de aprendizado suave em MicroPython, e o dispositivo fica a maior parte do tempo ligado na tomada, como um painel de monitoramento em uma bancada de laboratório ou em uma estação de saneamento. Os dois são clientes MQTT perfeitamente capazes.

Hardware em Resumo

ESP32 (clássico, ex.: ESP32-WROOM-32) Raspberry Pi Pico W
CPU Xtensa LX6 dual-core, até 240 MHz Arm Cortex-M0+ dual-core (RP2040), 133 MHz
SRAM 520 KB 264 KB
Flash Normalmente 4 MB nos módulos 2 MB
Wi-Fi 802.11 b/g/n, 2,4 GHz, integrado 802.11n, 2,4 GHz, Infineon CYW43439 via SPI
Bluetooth Classic e BLE Pelo CYW43439: BLE no MicroPython, BLE e Classic no SDK C (adicionado após o lançamento)
Aceleração criptográfica Hardware para AES, SHA e RSA/números grandes Nenhuma
I/O especial Sensor de toque, DAC no ESP32 clássico, muitos periféricos Máquinas de estado PIO para protocolos personalizados
Baixo consumo Deep sleep com memória RTC, despertar por timer e GPIO Modos dormant e sleep, menos prontos para uso em dispositivos Wi-Fi
Variedade de placas Centenas de placas de vários fabricantes Placa oficial e placas compatíveis de terceiros

A família ESP32 tem muitos membros: o S3 acrescenta instruções vetoriais para IA e USB, o C3 e o C6 são chips RISC-V de baixo custo e o C6 acrescenta Wi-Fi 6 e Thread. A Raspberry Pi também lançou o Pico 2 W, baseado no RP2350, com núcleos Cortex-M33 mais rápidos, mais SRAM e recursos de segurança. Se você vai decidir hoje, compare também os chips mais novos; a maior parte das contrapartidas abaixo continua valendo.

Pilha Wi-Fi e Rede

No ESP32, o Wi-Fi faz parte do chip, e a pilha de rede (lwIP mais os drivers da Espressif) já foi usada em um número enorme de produtos comercializados. Reconexões, múltiplos sockets, TLS e recursos como provisionamento de Wi-Fi são caminhos bem conhecidos. O próprio componente ESP-MQTT da Espressif suporta MQTT 3.1.1 e MQTT 5 de fábrica quando você usa o ESP-IDF.

O Pico W conecta o rádio CYW43439 por um barramento semelhante a SPI e roda o lwIP no RP2040. Funciona de forma confiável em projetos típicos de sensores e controle, e o SDK da Raspberry Pi e o port de MicroPython são bem mantidos. O driver do rádio consome parte dos recursos do RP2040, e há menos opções de bibliotecas de rede maduras em C do que no ESP32.

As duas placas são apenas 2,4 GHz, então nenhuma delas entra em uma rede somente 5 GHz.

Opções de Programação

Ambiente ESP32 Pico W
Arduino Core oficial da Espressif, ecossistema de bibliotecas muito grande (PubSubClient, AsyncMqttClient, ArduinoJson) Core comunitário arduino-pico de Earle Philhower; a PubSubClient funciona
MicroPython Suportado, umqtt.simple disponível Suportado e documentado oficialmente pela Raspberry Pi
CircuitPython Suportado em muitas placas Suportado
SDK nativo ESP-IDF com FreeRTOS, cliente MQTT integrado Pico SDK com lwIP, cliente MQTT dos apps do lwIP

Para iniciantes em MicroPython, a documentação do Pico W é uma vantagem real: os guias da Raspberry Pi explicam gravação do firmware, Wi-Fi e os primeiros programas com pouquíssimas surpresas. Para usuários de Arduino, o ESP32 tem o ecossistema de bibliotecas mais profundo. Se você está pendendo para MicroPython no ESP32, o guia de MicroPython umqtt no ESP32 mostra a configuração equivalente.

MQTT no Pico W com MicroPython

Este script conecta um Pico W ao servidor MQTT público (gratuito) em broker.connectmq.com, pensado para testes e protótipos, e publica a leitura do sensor de temperatura interno a cada dez segundos. O mesmo código roda em um ESP32 com MicroPython se você remover as linhas do sensor de temperatura.

import time
import network
import machine
from umqtt.simple import MQTTClient   # instale com: import mip; mip.install("umqtt.simple")

SSID = "YOUR_WIFI"
PASSWORD = "YOUR_WIFI_PASSWORD"
BROKER = "broker.connectmq.com"
CLIENT_ID = b"picow-5b2e"                      # não pode ser vazio e deve ser único
TOPIC = b"connectmq/demo/picow-5b2e/telemetry"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
for _ in range(30):
    if wlan.isconnected():
        break
    time.sleep(1)
if not wlan.isconnected():
    machine.reset()
print("Wi-Fi OK:", wlan.ifconfig()[0])

sensor = machine.ADC(4)                        # sensor de temperatura interno do RP2040


def read_temp_c():
    volts = sensor.read_u16() * 3.3 / 65535
    return 27 - (volts - 0.706) / 0.001721


client = MQTTClient(CLIENT_ID, BROKER, port=1883, keepalive=60)
client.set_last_will(b"connectmq/demo/picow-5b2e/status", b"offline", retain=True, qos=1)
client.connect()
client.publish(b"connectmq/demo/picow-5b2e/status", b"online", retain=True, qos=1)

while True:
    try:
        payload = '{"temp_c":%.2f,"rssi":%d}' % (read_temp_c(), wlan.status("rssi"))
        client.publish(TOPIC, payload.encode())
        print("sent", payload)
    except OSError as e:
        print("MQTT error, reconnecting:", e)
        time.sleep(5)
        client.connect()
    time.sleep(10)

Verifique a partir de qualquer computador:

mosquitto_sub -h broker.connectmq.com -p 1883 -i picow-5b2e-viewer -t "connectmq/demo/picow-5b2e/#" -v

O equivalente em Arduino para o ESP32 com PubSubClient é explicado passo a passo no tutorial de IoT com ESP32.

Desempenho do TLS: Onde as Placas Mais Diferem

MQTT em produção deve rodar sobre TLS na porta 8883, e é aqui que a diferença de hardware aparece. Um handshake TLS envolve operações de chave pública (RSA ou curvas elípticas) e verificação de certificado, que são pesadas para um microcontrolador.

  • O ESP32 roda o mbedTLS com aceleração por hardware para AES, SHA e aritmética de números grandes. Os handshakes terminam rápido o suficiente para que a reconexão após uma queda de Wi-Fi mal seja percebida, e há RAM suficiente para os buffers TLS junto com a sua aplicação.
  • O Pico W executa as mesmas operações em software, em núcleos Cortex-M0+ de 133 MHz, que não têm algumas das instruções que aceleram essa aritmética. O TLS funciona, mas os handshakes levam visivelmente mais tempo, e a RAM fica mais apertada com 264 KB para dividir.

Na prática, isso pesa mais em dispositivos a bateria que acordam, conectam, publicam e dormem: cada despertar paga por um handshake completo, então um handshake mais lento custa diretamente autonomia de bateria. Em dispositivos sempre ligados, uma primeira conexão mais lenta raramente é um problema.

Duas dicas valem para as duas placas: acerte o relógio do sistema (NTP) antes de conectar, porque a validação do certificado precisa da data atual, e carregue apenas a CA raiz necessária (ISRG Root X1 para brokers baseados em Let's Encrypt) para economizar memória. O guia de MQTT com SSL no ESP32 mostra em detalhes o lado do ESP32.

Consumo de Energia e Autonomia de Bateria

O deep sleep do ESP32 foi pensado exatamente para o padrão "acordar, medir, publicar, dormir": os núcleos principais desligam, o domínio RTC mantém um timer e alguns bytes de memória, e o chip acorda por timer ou GPIO. Sensores a bateria funcionando por meses com uma única célula são comuns. Veja deep sleep no ESP32 com MQTT para um exemplo completo.

O Pico W consegue entrar nos modos sleep e dormant, mas o chip de Wi-Fi precisa ser gerenciado separadamente e as ferramentas são menos prontas para uso. Muitos projetos com Pico W a bateria preferem cortar a alimentação completamente com um chip timer externo. Se o seu dispositivo é alimentado pela rede elétrica ou por USB, a diferença praticamente desaparece.

Checklist de Decisão

  1. Alimentado por bateria e publicando sobre TLS? ESP32.
  2. Precisa de Bluetooth Classic ou de uma pilha BLE madura? O ESP32 tem o histórico mais longo.
  3. Aprendendo MicroPython do zero com tutoriais oficiais? O Pico W é uma escolha muito amigável.
  4. Protocolos personalizados com timing crítico (fitas de LED, formatos seriais incomuns)? O PIO do Pico W é excelente.
  5. Precisa de muitas bibliotecas Arduino? ESP32.
  6. Quer o silício mais novo? Compare ESP32-S3/C6 com o Pico 2 W antes de decidir.

Vindo do ESP8266? A comparação ESP32 vs ESP8266 cobre esse caminho de upgrade.

O Lado do Broker É o Mesmo para as Duas

Seja qual for a placa escolhida, o dispositivo é apenas um cliente MQTT. O broker cuida da autenticação, da distribuição para dashboards e backends e do estado retido. Isso significa que você pode misturar dispositivos ESP32 e Pico W nos mesmos topics sem mudar nada no resto do sistema. Comece testando no servidor MQTT público, que não deve receber dados de produção, e, quando o projeto entrar em produção, migre para um broker MQTT na nuvem privado e protegido por TLS, para que seus dispositivos tenham credenciais próprias. A ConnectMQ suporta tanto MQTT 3.1.1 (usado por umqtt.simple e PubSubClient) quanto MQTT 5.

Comece a Usar a ConnectMQ

As duas placas funcionam de imediato com a ConnectMQ, um broker MQTT gerenciado: TCP na 1883, TLS na 8883 com certificado Let's Encrypt e um cliente MQTT no navegador para testar suas mensagens. Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito, e conecte seu ESP32 ou Pico W em minutos.

Perguntas frequentes

O ESP32 ou o Pico W é melhor para iniciantes?

Os dois são amigáveis para iniciantes. O Pico W tem uma documentação oficial de MicroPython excelente, enquanto o ESP32 tem uma oferta maior de tutoriais e bibliotecas Arduino.

O Raspberry Pi Pico W pode usar MQTT sobre TLS?

Sim, pelo módulo ssl do MicroPython ou pelo cliente seguro do core arduino-pico. Espere handshakes mais lentos que no ESP32, porque não há aceleração criptográfica.

Qual placa consome menos energia?

Para dispositivos a bateria que dormem entre as leituras, o deep sleep do ESP32 é mais fácil de usar e muito eficiente. Em dispositivos sempre ligados, a diferença é menor do que a influência da escolha dos sensores e do intervalo de publicação.

Posso misturar dispositivos ESP32 e Pico W em um mesmo sistema MQTT?

Sim. O MQTT é independente de hardware, então os dois podem publicar e assinar no mesmo broker e nos mesmos topics.

Artigos relacionados

Exemplo de MQTT com ESP-IDF: Monte um Cliente esp-mqtt do Zero

Monte um projeto ESP-IDF a partir de uma pasta vazia com o componente esp-mqtt: configuração do Wi-Fi em modo station, o handler de eventos MQTT, publicação e inscrição, propriedades do MQTT 5 e TLS com o bundle de certificados.

8 min de leitura

Usando os Recursos do MQTT 5 do esp-mqtt no ESP32 com ESP-IDF

Um projeto ESP-IDF prático que ativa o MQTT 5.0 no esp-mqtt e usa user properties, expiração de mensagens, topic aliases, expiração de sessão e response topics com um broker MQTT 5 real.

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.