ESP-01 vs ESP32: NeoPixel (WS2812) Não é PWM

 

ESP32 ou ESP-01? Diferença REAL de PWM que muda seu projeto
Comparação prática entre ESP32 e ESP-01 mostrando a diferença entre PWM real (LEDC por hardware) e controle via protocolo digital com NeoPixel. O ESP32 oferece alta precisão e múltiplos canais, ideal para motores DC e controle fino, enquanto o ESP-01 utiliza comunicação digital para LEDs endereçáveis, permitindo controle individual com apenas um pino, mas sem PWM tradicional.

ESP-01 vs ESP32: quando usar, como gravar e por que NÃO é PWM

Se você trabalha com projetos eletrônicos ou está começando no mundo do IoT, provavelmente já se perguntou:

👉 Dá pra usar o ESP-01 no lugar do ESP32?
👉 Ele funciona bem com PWM?
👉 Por que às vezes ele nem grava?

Neste artigo, você vai entender de forma simples e prática:

  • Como gravar o ESP-01 corretamente
  • Diferença entre módulos de gravação
  • Por que o ESP-01 NÃO tem PWM real
  • Quando usar ESP-01 ou ESP32

O ESP-01 ainda vale a pena?

O ESP-01 é um dos módulos mais simples baseados no ESP8266.

👉 Ele é:

  • barato
  • pequeno
  • consome pouca energia
  • ideal para projetos simples

Mas tem uma limitação importante:

👉 Poucos pinos (basicamente 1 utilizável)


Problema comum: ESP-01 não grava

Se você já tentou usar ESP-01, provavelmente passou por isso:

  • não entra em modo flash
  • não conecta no computador
  • falha na gravação

👉 Isso não é defeito — geralmente é falta de hardware adequado


Módulos de gravação ESP-01 (diferença prática)

Para facilitar, usamos adaptadores USB com chips conversores.

Os principais são:

Comparativo de Adaptadores USB para ESP-01: CH340G vs CP2104 vs CH9102
Programar o ESP-01 pode ser um desafio se você não tiver o adaptador certo. Existem três modelos principais no mercado e a diferença vai além do preço.

💰 CH340G (mais barato)

  • custo baixo
  • precisa apertar botão para gravar
  • exige mais atenção

👉 Ideal para quem quer economizar


✅ CP2104 (mais confiável)

  • mais estável
  • instalação simples
  • geralmente funciona direto

👉 Melhor escolha para iniciantes


🚀 CH9102 (mais moderno)

  • versão mais nova
  • gravação automática em muitos modelos
  • menos dor de cabeça

👉 Ótima opção atual


O que é PWM?

PWM é uma técnica onde um sinal digital (ligado/desligado) é alternado rapidamente, variando o tempo em que permanece ligado (HIGH) dentro de um período fixo.

Esse tempo relativo é chamado de:

👉 Duty Cycle (Ciclo de Trabalho)


Como funciona o Duty Cycle?

Duty Cycle=TonTtotal×100%Duty\ Cycle = \frac{T_{on}}{T_{total}} \times 100\%

  • 0% → Sempre desligado
  • 50% → Metade do tempo ligado
  • 100% → Sempre ligado

Exemplo prático:

Duty CycleComportamento
25%LED fraco
50%LED médio
75%LED forte

Por que usar PWM?

A grande vantagem da PWM é controlar potência sem dissipar muita energia em forma de calor (diferente de resistores ou reguladores lineares).

Principais aplicações:

  • 💡 Controle de brilho de LEDs
  • 🔄 Controle de velocidade de motores DC
  • 🔊 Geração de áudio simples (buzzers)
  • ⚙️ Controle de servomotores
  • 🔌 Fontes chaveadas

PWM vs Sinal Analógico

Mesmo sendo um sinal digital, a PWM pode simular níveis analógicos:

  • Um LED não percebe a comutação rápida → parece ter brilho contínuo
  • Um motor recebe pulsos → gira com velocidade proporcional

👉 Isso acontece devido à inércia física dos componentes.


Frequência do PWM

Além do Duty Cycle, outro fator importante é a frequência:

  • Frequência baixa → pode causar tremulação (LED piscando)
  • Frequência alta → sinal mais suave

Valores típicos:

  • LED: 500 Hz a 1 kHz
  • Motores: 1 kHz a 20 kHz
  • Áudio: acima de 20 kHz (evitar ruído audível)

PWM vs Controle Linear

PWM               Controle Linear
Alta eficiência               Baixa eficiência
Pouco calor               Muito calor
Mais complexo               Mais simples

Conclusão

A PWM é uma técnica essencial para qualquer pessoa que trabalha com eletrônica e sistemas embarcados. Ela permite controle eficiente, preciso e econômico de diversos dispositivos, sendo base para projetos mais avançados como automação, robótica e IoT.



ESP-01 tem PWM igual ao ESP32?

👉 Resposta direta: NÃO


PWM no ESP32 (Mais avançado)

Diferente do Arduino, o ESP32 permite controle mais preciso:

  • Frequência configurável
  • Resolução maior (até 16 bits)
  • Múltiplos canais PWM
O ESP32 possui PWM por hardware chamado:

👉 LEDC

Isso significa que:

  • o próprio chip gera o sinal PWM
  • alta precisão
  • controle de frequência
  • vários canais independentes

👉 Ideal para:

  • motores DC
  • dimmer
  • controle de LED comum
ESP32 gerando PWM por hardware usando LEDC com controle de frequência, duty cycle e múltiplos canais para motores e LEDs

O ESP32 possui PWM por hardware (LEDC), permitindo gerar sinais precisos com controle de frequência e duty cycle, ideal para motores, LEDs e aplicações que exigem alta performance.


⚠️ Cuidados importantes

  • Nem todos os pinos suportam PWM
  • Frequência inadequada pode causar ruído ou aquecimento
  • Motores precisam de driver (ex: ponte H)
  • Evite usar PWM direto em cargas altas

ESP-01 + NeoPixel (WS2812) NÃO é PWM

Diagrama de fiação em protoboard mostrando a conexão entre um módulo ESP8266 ESP-01, um anel de 12 LEDs RGB WS2812, resistor de 10k e regulador de tensão AMS1117 de 3.3V.
Esquema elétrico detalhado para controle de anel de LEDs RGB usando ESP-01. Note o uso do regulador AMS1117 para garantir os 3.3V estáveis e o resistor de pull-up no GPIO2.


Código completo



/******************************************************
* Projeto: Controle WS2812 via Web (ESP-01)
* Autor: RodRobot
* Descrição:
* - Cria um servidor WEB no ESP-01 (modo AP)
* - Permite controlar cor e brilho via navegador
* - Utiliza LEDs endereçáveis WS2812 (NeoPixel)
* - Demonstra controle digital (não é PWM real)
******************************************************/

#include <ESP8266WiFi.h>          // WiFi ESP8266
#include <ESP8266WebServer.h>     // Servidor HTTP
#include <Adafruit_NeoPixel.h>    // WS2812 LED

#define PIN_LED 2                 
#define NUM_LEDS 12               

Adafruit_NeoPixel strip(NUM_LEDS, PIN_LED, NEO_GRB + NEO_KHZ800);
ESP8266WebServer server(80);      

/* ---------------- CORES ATUAIS ---------------- */
int corR = 255;                   
int corG = 0;                     
int corB = 0;                     

int brilho = 255;                 // Controle de brilho

/* ---------------- WIFI ---------------- */
const char* ssid = "ESP_LED";     
const char* password = "12345678";

/* ---------------- INTERFACE WEB ---------------- */
String pagina = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Controle WS2812 ESP-01</title>

<style>
body{
  font-family: Arial;
  text-align: center;
  background: #111;
  color: white;
}

button{
  width: 180px;
  height: 80px;
  margin: 12px;
  font-size: 22px;
  border: none;
  border-radius: 15px;
  cursor: pointer;
  font-weight: bold;
}

.red{background:red;color:white;}
.green{background:green;color:white;}
.blue{background:blue;color:white;}

input[type=range]{
  width: 80%;
}
</style>
</head>

<body>

<h2>Controle WS2812 ESP-01</h2>

<!-- SLIDER PRIMEIRO -->
<input type="range" min="0" max="255" value="255"
oninput="setBrilho(this.value)">

<h3>Brilho</h3>

<!-- BOTÕES -->
<button class="red" onclick="setCor('r')">VERMELHO</button>
<button class="green" onclick="setCor('g')">VERDE</button>
<button class="blue" onclick="setCor('b')">AZUL</button>

<script>
function setCor(c){
  fetch('/cor?c=' + c);
}

function setBrilho(v){
  fetch('/brilho?b=' + v);
}
</script>

</body>
</html>
)rawliteral";

/* ---------------- ATUALIZA LED ---------------- */
void atualizaLED() {

  int r = (corR * brilho) / 255;
  int g = (corG * brilho) / 255;
  int b = (corB * brilho) / 255;

  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, strip.Color(r, g, b));
  }

  strip.show();
}

/* ---------------- CONTROLE DE COR ---------------- */
void handleCor() {

  if (server.hasArg("c")) {
    String c = server.arg("c");

    if (c == "r") { corR = 255; corG = 0; corB = 0; }
    if (c == "g") { corR = 0; corG = 255; corB = 0; }
    if (c == "b") { corR = 0; corG = 0; corB = 255; }
  }

  atualizaLED();
  server.send(200, "text/plain", "OK");
}

/* ---------------- CONTROLE DE BRILHO ---------------- */
void handleBrilho() {

  if (server.hasArg("b")) {
    brilho = server.arg("b").toInt();
  }

  atualizaLED();
  server.send(200, "text/plain", "OK");
}

/* ---------------- SETUP ---------------- */
void setup() {

  strip.begin();
  strip.show();

  WiFi.softAP(ssid, password);

  server.on("/", []() {
    server.send(200, "text/html", pagina);
  });

  server.on("/cor", handleCor);
  server.on("/brilho", handleBrilho);

  server.begin();
}

/* ---------------- LOOP ---------------- */
void loop() {
  server.handleClient();
}




Quando você usa LEDs como WS2812 com biblioteca NeoPixel:

👉 você até controla:

  • brilho
  • cor
  • efeitos

Mas atenção:

isso NÃO é PWM tradicional


Como funciona então?

👉 É um protocolo digital extremamente rápido

  • os dados são enviados em sequência
  • cada LED recebe sua informação individual
  • tudo acontece em alta velocidade

Diferença prática

PWM (como no ESP32)

  • sinal elétrico variando
  • controla tensão média
  • ideal para motores e LEDs simples

NeoPixel (ESP-01)

  • envio de dados digitais
  • cada LED entende cor e brilho
  • usa apenas 1 pino
Diagrama mostrando como o ESP-01 controla LEDs WS2812 (NeoPixel) via dados digitais e a diferença para PWM tradicional baseado em pulsos
O ESP-01 controla LEDs WS2812 usando um protocolo digital em sequência, diferente do PWM tradicional que utiliza pulsos liga/desliga para ajustar o brilho. Cada LED recebe seus dados individualmente através de um único pino.


Quando usar cada um?

Use ESP32 quando precisar:

  • PWM real
  • controlar motores
  • múltiplos canais
  • precisão

Use ESP-01 quando quiser:

  • projeto simples
  • economia
  • poucos pinos
  • LEDs endereçáveis

Conclusão

O ESP-01 ainda é extremamente útil — desde que você entenda suas limitações.

👉 Resumo direto:

  • ESP-01 → simples e barato
  • ESP32 → potente e versátil
  • NeoPixel → não é PWM
  • PWM real → só no ESP32

🔧 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 Botão Touch: Como Usar o Sensor Touch (Tutorial com LED e Relé)

ESP32 para Iniciantes: Projeto LED Piscando Passo a Passo