USB vs UART: Entenda as Diferenças e Por Que o ESP32 Precisa de um Conversor USB para UART.

USB ou UART? A diferença que todo iniciante precisa entender!
Comparação entre USB e UART utilizada nas placas ESP32. Enquanto a USB é um protocolo completo que identifica dispositivos, organiza os dados em pacotes e detecta erros, a UART é uma comunicação serial simples que transmite um byte por vez através dos pinos TX e RX.

UART vs USB — Entenda de forma simples (e prática com ESP32)

Se você já programou um ESP32, provavelmente percebeu que ele possui uma porta USB. Mas será que o ESP32 realmente entende USB?

A resposta é: na maioria das placas, não.

Na verdade, o ESP32 se comunica utilizando UART, e é justamente por isso que existe um componente muito importante na placa: o conversor USB para UART, como o CH340, CP2102, CP2104, FT232 ou CH9102.

Neste artigo você vai entender, de forma simples, como funciona a UART, como funciona a USB e por que esses conversores são indispensáveis.


O que é UART?

UART significa:

Universal Asynchronous Receiver Transmitter

É um dos meios mais antigos e utilizados para comunicação serial entre dispositivos eletrônicos.

Ela é extremamente simples.

Imagine duas pessoas conversando por rádio.

Uma fala.
A outra escuta.

Não existe identificação.
Não existe negociação.
Não existe protocolo complexo.

Apenas transmissão de dados.

A UART funciona exatamente assim.

Ela envia os bits um após o outro.

Exemplo:

ESP32 ------------> Computador
01010110

Como a UART transmite dados?

A comunicação utiliza apenas dois fios.

  • TX (Transmit)
  • RX (Receive)

Além do GND comum.

ESP32

TX ------------------> RX

RX <------------------ TX

GND ---------------- GND

O TX de um equipamento sempre vai no RX do outro.


A UART é assíncrona

Uma característica muito importante é que ela não possui sinal de clock.

Por isso ela é chamada de comunicação assíncrona.

Em vez de usar um relógio compartilhado, os dois lados combinam previamente a velocidade.

Por exemplo:

  • 9600 bps
  • 115200 bps
  • 921600 bps

Se um estiver configurado para 115200 e o outro para 9600, a comunicação simplesmente não funciona.


Como um byte é enviado?

Quando a UART envia um caractere, ela não transmite apenas os 8 bits.

Ela envia uma estrutura completa.

Start | D0 D1 D2 D3 D4 D5 D6 D7 | Stop

0 Dados (8 bits) 1

Por exemplo, a letra:

A

ASCII = 65

Binário = 01000001

Ela será enviada junto com:

  • Bit de início (Start)
  • 8 bits de dados
  • Bit de parada (Stop)

Algumas configurações ainda utilizam um bit de paridade para detectar erros.

O que é UART? Aprenda Como os Dados São Enviados Byte por Byte
A UART transmite os dados de forma serial, enviando um caractere por vez através dos pinos TX e RX. Na imagem, a palavra "HELLO" é enviada letra por letra até chegar ao microcontrolador.

Vantagens da UART

A UART continua extremamente popular porque possui várias vantagens.

  • Muito simples
  • Poucos fios
  • Baixo custo
  • Baixo consumo
  • Fácil implementação
  • Presente em praticamente todos os microcontroladores

É por isso que praticamente todo ESP32 possui UART.


Limitações da UART

Apesar de simples, ela possui limitações importantes.

Ela não consegue:

  • identificar dispositivos
  • fornecer alimentação inteligente
  • conectar vários equipamentos na mesma linha
  • negociar velocidade automaticamente
  • reconhecer quando um dispositivo foi conectado

Ela apenas envia e recebe bytes.

Nada mais.


Projeto didático: “Máquina de escrever serial”

Agora vamos simular uma máquina de escrever:

  • O usuário digita no Serial Monitor
  • O ESP866 recebe caractere por caractere
  • Mostra em um display tipo “typewriter”

Circuito Completo do Projeto UART: ESP-12F, OLED SSD1306 e Comunicação Serial

Esquema de ligação do projeto utilizado para demonstrar a comunicação UART no ESP8266 ESP-12F. O circuito utiliza um display OLED SSD1306 via I²C para exibir os caracteres recebidos pela porta serial, simulando uma máquina de escrever. Um LED pisca a cada caractere recebido, mostrando de forma visual como a UART transmite os dados byte por byte. O conversor USB para UART (CP2102) faz a interface entre o computador e o microcontrolador.



 Código (ESP866 + efeito máquina de escrever)


/***************************************************************************
 *                                                                         *
 * Projeto : UART vs USB - Máquina de Escrever                             *
 *                                                                         *
 * Placa   : ESP8266 ESP-12F                                                *
 * Display : OLED SSD1306 128x64 I2C                                       *
 *                                                                         *
 * Canal   : RodRobot                                                      *
 *                                                                         *
 * Descrição:                                                              *
 * Recebe uma frase pela Serial e mostra no OLED um caractere por vez,     *
 * simulando uma máquina de escrever. A cada caractere enviado um LED      *
 * pisca para demonstrar a transmissão serial byte a byte.                 *
 *                                                                         *
 *--------------------------- Ligações ------------------------------------*
 *                                                                         *
 * OLED      ESP-12F                                                       *
 * VCC   ->  3.3V                                                          *
 * GND   ->  GND                                                           *
 * SDA   ->  GPIO4                                                         *
 * SCL   ->  GPIO5                                                         *
 *                                                                         *
 * LED interno -> GPIO2                                                    *
 *                                                                         *
 ***************************************************************************/

#include <Wire.h>                     // Biblioteca I2C
#include <Adafruit_GFX.h>             // Biblioteca gráfica
#include <Adafruit_SSD1306.h>         // Biblioteca OLED

#define SCREEN_WIDTH    128           // Largura do display
#define SCREEN_HEIGHT    64           // Altura do display

#define OLED_SDA          4           // GPIO4
#define OLED_SCL          5           // GPIO5

#define LED_SERIAL        2           // LED interno

Adafruit_SSD1306 display(SCREEN_WIDTH,
                         SCREEN_HEIGHT,
                         &Wire,
                         -1);

String frase = "";                    // Frase recebida
String texto = "";                    // Texto exibido

//=========================================================================
// Configuração
//=========================================================================

void setup()
{
  pinMode(LED_SERIAL, OUTPUT);        // Configura LED
  digitalWrite(LED_SERIAL, HIGH);     // LED apagado (ativo em LOW)

  Serial.begin(115200);               // Inicializa UART

  Wire.begin(OLED_SDA, OLED_SCL);     // Inicializa I2C

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);

  display.setCursor(0,0);
  display.println("UART vs USB");
  display.println("----------------");
  display.println("Digite no");
  display.println("Monitor Serial");
  display.display();
}

//=========================================================================
// Atualiza OLED
//=========================================================================

void mostraTexto()
{
  display.clearDisplay();

  display.setCursor(0,0);
  display.println("UART vs USB");
  display.println("----------------");

  display.println(texto);

  display.display();
}

//=========================================================================
// Pisca LED
//=========================================================================

void piscaLED()
{
  digitalWrite(LED_SERIAL, LOW);

  delay(20);

  digitalWrite(LED_SERIAL, HIGH);
}

//=========================================================================
// Loop principal
//=========================================================================

void loop()
{

  // Recebe frase enviada pelo computador

  if (Serial.available())
  {

    frase = Serial.readStringUntil('\n');

    frase.trim();

    texto = "";

    for (int i = 0; i < frase.length(); i++)
    {

      texto += frase[i];              // Adiciona um caractere

      mostraTexto();                  // Atualiza OLED

      piscaLED();                     // Pisca LED

      delay(340);                     // Velocidade da máquina de escrever

    }

  }

}




O que é USB?

USB: O Protocolo Completo que Permite a Comunicação com o ESP32
A USB utiliza um protocolo completo que identifica automaticamente os dispositivos, organiza os dados em pacotes, detecta erros durante a transmissão e fornece alimentação elétrica pelo mesmo cabo. No ESP32 clássico, um conversor como o CP2102 ou CH340 traduz essa comunicação USB para UART.


USB significa:

Universal Serial Bus

Apesar do nome conter "Serial", ela é muito mais sofisticada do que uma UART.

Na verdade, a USB é um protocolo completo de comunicação.

Ela possui:

  • identificação do dispositivo
  • negociação automática
  • controle de erros
  • gerenciamento de energia
  • reconhecimento automático
  • diferentes velocidades
  • comunicação inteligente

O que acontece quando você conecta um cabo USB?

Assim que o cabo é conectado, o computador inicia um processo chamado enumeração.

Ele pergunta ao dispositivo:

  • Quem é você?
  • Qual sua velocidade?
  • Qual driver devo usar?
  • Você é teclado?
  • Mouse?
  • Webcam?
  • Porta serial?
  • Pendrive?

Somente depois dessa conversa a comunicação começa.


Por que o ESP32 não conversa diretamente com USB?

O ESP32 tradicional foi projetado para conversar usando UART.

Ele não possui hardware USB nativo.

Ou seja...

Ele não entende esse protocolo complexo.

Se você ligar diretamente os fios USB ao ESP32, nada acontecerá.

É como ligar duas pessoas falando idiomas diferentes.


Entra em cena o conversor USB-UART

É justamente aqui que entram componentes como:

  • CH340
  • CP2102
  • CP2104
  • FT232
  • CH9102

Eles funcionam como um tradutor.

De um lado:

USB

Do outro:

UART

Diagrama mostrando como o conversor USB para UART (CH340 ou CP2102) faz a comunicação entre o computador e o ESP32 utilizando as linhas TX e RX.
Diagrama simplificado da comunicação entre o computador e o ESP32. O computador envia dados pela interface USB, que são convertidos pelo CH340 ou CP2102 para UART (TX/RX), permitindo a gravação de programas e a comunicação serial com o microcontrolador.

O computador conversa usando USB.

O conversor entende USB.

Depois ele transforma tudo em UART para o ESP32.

Quando o ESP32 responde, acontece exatamente o inverso.

UART → Conversor → USB → Computador.


Então quem aparece como Porta COM?

Quando você conecta uma placa ESP32 ao computador, normalmente quem aparece como:

COM5

COM8

/dev/ttyUSB0

não é o ESP32.

É o CH340, CP2102 ou outro conversor USB-UART.

O computador acredita que está conversando com uma porta serial.

Na realidade, existe um chip fazendo toda a tradução.


Então por que algumas placas ESP32 possuem USB nativa?

Os modelos mais modernos, como o ESP32-S2, ESP32-S3 e alguns ESP32-C3, possuem controlador USB integrado.

Neles, o próprio microcontrolador entende USB.

Por isso algumas placas nem precisam de CH340 ou CP2102.

O próprio ESP32 conversa diretamente com o computador.

Mesmo assim, muitos fabricantes continuam adicionando um conversor USB-UART porque ele facilita a gravação do firmware, o monitor serial e aumenta a compatibilidade com diferentes sistemas.


Comparação rápida

UARTUSB
Simples                      Muito complexa
Apenas envia bytes                      Protocolo completo
Não identifica dispositivos                      Identifica automaticamente
Não negocia velocidade                      Negocia automaticamente
Não possui gerenciamento                      Gerencia energia e comunicação
Usa TX e RX                      Usa protocolo USB completo
Muito leve                      Muito sofisticada

Conclusão

Embora a porta USB esteja presente em praticamente todas as placas de desenvolvimento ESP32, isso não significa que o microcontrolador esteja se comunicando diretamente por USB.

Na maioria das placas, o ESP32 continua utilizando UART internamente. O chip conversor, como o CH340 ou o CP2102, faz o papel de intérprete entre o computador e o microcontrolador, convertendo os dados do protocolo USB para UART e vice-versa.

Entender essa diferença ajuda a compreender melhor como funciona a gravação do firmware, o monitor serial e até mesmo a resolver problemas de conexão e drivers.

Se você pretende desenvolver projetos com ESP32, conhecer o funcionamento da UART e da USB é um conhecimento fundamental que facilitará muito a criação e a depuração dos seus projetos. 


🔧 Acompanhe o RodRobot

Projetos maker com ESP32, Arduino, eletrônica e programação.

RodRobot – Projetos maker, eletrônica e programação na prática.

Comentários

Postagens mais visitadas deste blog

ESP32-C3 Super Mini: Características, Vantagens, Pinagem, Matter.

ESP32 Botão Touch: Como Usar o Sensor Touch (Tutorial com LED e Relé)

ESP32 para Iniciantes: Projeto LED Piscando Passo a Passo