ESP8266 - Driver de Motor DC DRV8833
Este tutorial ensina você a usar o ESP8266 junto com o pequeno driver DRV8833 para girar motores DC para frente e para trás em qualquer velocidade. Em detalhes, vamos aprender:
- O que é o módulo DRV8833 e o que cada um de seus pinos faz
- Como conectar o ESP8266 NodeMCU ao DRV8833 e a um motor DC
- Como programar o ESP8266 para mudar a velocidade, o sentido, a roda livre e o freio desse motor
- Como estender a mesma montagem para dois motores DC, como as duas rodas de um carrinho robô
Sugerimos:
- Ler o tutorial ESP8266 - Motor DC se você quer a versão com L298N ou uma explicação básica de como um motor DC funciona.
- Usar o DRV8833 se o seu projeto funciona com baterias entre 3V e 9V, já que ele desperdiça muito menos energia do que o L298N.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Driver de Motor DRV8833
O DRV8833 é um minúsculo chip de ponte H dupla fabricado pela Texas Instruments. Um módulo consegue acionar dois motores DC com escovas de forma independente (ele também pode acionar um motor de passo bipolar, mas isso não é abordado aqui). Suas saídas são MOSFETs com uma baixa resistência em condução de cerca de 360 mΩ, então o motor recebe quase toda a tensão da alimentação e o chip fica frio. Isso é um grande avanço em relação ao antigo L298N, que perde cerca de 2V dentro de si mesmo.
Fatos principais:
| DRV8833 | |
|---|---|
| Alimentação do motor (pino VCC) | 2.7V a 10.8V |
| Corrente de saída | cerca de 1.5A RMS por canal, 2A de pico (com boa refrigeração) |
| Número de motores | 2 motores DC (ou 1 motor de passo bipolar) |
| Nível das entradas lógicas | 3.3V ou 5V (não precisa de alimentação lógica separada) |
| Frequência PWM | até 50 kHz |
| Proteção | bloqueio por subtensão, sobrecorrente, desligamento térmico |
O chip gera sua própria tensão lógica interna a partir da alimentação do motor. Por causa disso, os sinais de 3.3V do ESP8266 podem acioná-lo diretamente, sem conversor de nível. Se você precisa de mais corrente para um motor grande, os dois canais podem ser ligados em paralelo para cerca de 3A, mas isso é opcional.
Pinagem do Driver de Motor DRV8833

A placa breakout DRV8833 comum, vermelha ou azul, tem 12 pinos:
- Pino VCC: deve ser conectado à fonte de alimentação do motor (2.7V a 10.8V). Este NÃO é o pino 3.3V do ESP8266.
- Pino GND: deve ser conectado ao terra da alimentação do motor E ao GND do ESP8266
- Pinos IN1, IN2: entradas de controle do motor A, devem ser conectados a dois pinos PWM do ESP8266
- Pinos IN3, IN4: entradas de controle do motor B, devem ser conectados a dois outros pinos PWM
- Pinos OUT1, OUT2: saídas para o motor A
- Pinos OUT3, OUT4: saídas para o motor B
- Pino EEP: o pino de sleep (nSLEEP). Ele deve estar em HIGH para ligar o driver. Conecte-o ao 3.3V do ESP8266. Se estiver em LOW, o chip dorme e os motores não se movem.
- Pino ULT: o pino de falha (nFAULT). Ele vai para LOW quando o chip detecta um problema (sobrecorrente, superaquecimento, tensão baixa). É opcional e pode ficar desconectado.
※ Nota:
Os rótulos dos pinos mudam de um fabricante para outro. Algumas placas imprimem AIN1/AIN2/BIN1/BIN2, AOUT1/AOUT2/BOUT1/BOUT2, SLP e FLT no lugar dos nomes acima. A função de cada pino é a mesma. Sempre siga os rótulos impressos no seu próprio módulo.
Como o DRV8833 Controla um Motor
Diferente do L298N, o DRV8833 não tem pino de velocidade ENA/ENB. Cada motor é controlado apenas por seus dois pinos de entrada. A tabela abaixo é para o motor A (IN1, IN2). O motor B funciona da mesma forma com IN3 e IN4.
| IN1 | IN2 | Motor A |
|---|---|---|
| LOW | LOW | Roda livre (o motor é solto e gira livre até parar) |
| HIGH | LOW | Gira para frente |
| LOW | HIGH | Gira para trás |
| HIGH | HIGH | Freio (o motor para rápido) |
Para controlar a velocidade, enviamos um sinal PWM para uma entrada e mantemos a outra em LOW:
- Para frente com velocidade: PWM em IN1, IN2 = LOW
- Para trás com velocidade: IN1 = LOW, PWM em IN2
Por causa disso, os dois pinos de entrada de cada canal devem ser pinos do ESP8266 com capacidade PWM.
Escolhendo os Pinos do ESP8266
Quase todo GPIO do NodeMCU pode gerar PWM com analogWrite(), mas alguns pinos são uma má escolha para um driver de motor:
- O D0 (GPIO16) não consegue gerar PWM.
- D3 (GPIO0), D4 (GPIO2) e D8 (GPIO15) são pinos de modo de boot. Um dispositivo que os puxe para o lado errado na hora de ligar pode impedir o ESP8266 de iniciar.
Então, neste tutorial usamos D5 e D6 para o motor A. Para o motor B usamos D1 e D2. D1 e D2 são os pinos I2C padrão, mas estão livres aqui porque nenhum dispositivo I2C está conectado. Se você adicionar um módulo I2C mais tarde, mova o motor B para o D7 e outro pino livre.
Sobre a faixa do PWM: desde o ESP8266 Arduino core 3.0, analogWrite() recebe por padrão um valor de 0 a 255. O core 2.x mais antigo usava de 0 a 1023. O código abaixo chama analogWriteRange(255) no setup(), então 255 sempre significa velocidade máxima, não importa qual versão do core você tenha instalada.
Como Programar o DRV8833
- O primeiro passo é definir os pinos do ESP8266 que estão conectados a IN1 e IN2:
- Defina os dois pinos como saídas e fixe a faixa do PWM em 0 - 255:
- Gire para frente em uma dada velocidade (0 a 255):
- Gire para trás em uma dada velocidade:
- Roda livre (deixe o motor rolar até parar):
- Freio (pare rapidamente):
Parte 1 - O ESP8266 Controla Um Motor DC via DRV8833
Diagrama de Ligação
O motor é alimentado por um adaptador externo de 5V através do DC power jack. O ESP8266 apenas envia os sinais de controle.

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
| Módulo DRV8833 | ESP8266 NodeMCU / Outro |
|---|---|
| IN1 | D5 |
| IN2 | D6 |
| EEP | 3.3V |
| GND | GND (ESP8266) e negativo (-) da fonte de 5V |
| VCC | positivo (+) da fonte de 5V |
| OUT1, OUT2 | os dois fios do motor DC |
| ULT | não conectado |
※ Nota:
- Nunca alimente o motor pelo pino 3.3V ou VIN do ESP8266. Motores puxam corrente alta e geram ruído elétrico que pode reiniciar a placa.
- O GND da fonte do motor, o do DRV8833 e o do ESP8266 devem estar todos conectados entre si. Sem um terra comum, o motor não vai responder.
Código ESP8266 para o DRV8833 - Um Motor
Este código acelera o motor no sentido para frente, mantém a velocidade máxima, deixa-o em roda livre, gira-o para trás a cerca de 70% da velocidade e depois o freia. Cada etapa é impressa no Serial Monitor.
Passos Rápidos
Para começar com o ESP8266 na Arduino IDE, siga estes passos:
- Confira o tutorial como configurar o ambiente para o ESP8266 na Arduino IDE se esta é a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama. Mantenha o adaptador de 5V desconectado por enquanto.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
- Copie o código acima e cole-o na Arduino IDE. Nenhuma biblioteca extra é necessária.
- Clique no botão Upload na Arduino IDE para compilar e fazer o upload do código para o ESP8266.
- Conecte o adaptador de 5V para alimentar o motor.
- Abra o Serial Monitor e observe o motor:
- Ele acelera devagar e depois funciona em velocidade máxima por 2 segundos.
- Ele é solto e rola até parar.
- Ele gira para o outro lado em uma velocidade mais baixa.
- Ele para bruscamente quando o freio é aplicado.
※ Nota:
Se o motor girar no sentido "errado", basta trocar os dois fios do motor em OUT1 e OUT2. Nenhuma mudança no código é necessária.
Parte 2 - O ESP8266 Controla Dois Motores DC via DRV8833
Agora vamos usar os dois canais do DRV8833. Pense no motor A como a roda esquerda e no motor B como a roda direita de um pequeno carrinho robô.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
| Módulo DRV8833 | ESP8266 NodeMCU / Outro |
|---|---|
| IN1 | D5 |
| IN2 | D6 |
| IN3 | D1 |
| IN4 | D2 |
| EEP | 3.3V |
| GND | GND (ESP8266) e negativo (-) da fonte de 5V |
| VCC | positivo (+) da fonte de 5V |
| OUT1, OUT2 | motor A (roda esquerda) |
| OUT3, OUT4 | motor B (roda direita) |
Código ESP8266 para o DRV8833 - Dois Motores
Para manter o loop() curto, o código usa duas funções auxiliares, motorA(speed) e motorB(speed). A velocidade é um número com sinal de -255 a 255:
- Um valor positivo gira o motor para frente
- Um valor negativo gira o motor para trás
- 0 o deixa em roda livre
O carrinho anda para frente, anda para trás, vira à esquerda (roda esquerda para trás, roda direita para frente), vira à direita e depois para.
Passos Rápidos
- Ligue o segundo motor em OUT3 e OUT4 e conecte IN3 e IN4 a D1 e D2, como mostrado no diagrama.
- Conecte o ESP8266 ao seu PC com o cabo USB.
- Copie o código acima para a Arduino IDE.
- Clique no botão Upload para fazer o upload dele para o ESP8266.
- Conecte o adaptador de 5V.
- Abra o Serial Monitor. A saída é parecida com esta:
- Se uma roda girar no sentido oposto durante "Car: forward", troque os dois fios desse motor.
Vídeo
Conhecimento Adicional
Vamos comparar o DRV8833 com o driver L298N usado no tutorial ESP8266 - Motor DC.
| DRV8833 | L298N | |
|---|---|---|
| Tensão do motor | 2.7V a 10.8V | 5V a 35V |
| Corrente por canal | cerca de 1.5A (2A de pico) | cerca de 2A |
| Tipo de chave | MOSFET (baixa perda) | BJT (cerca de 2V de perda) |
| Controle de velocidade | PWM nos pinos IN | PWM nos pinos ENA/ENB |
| Pinos necessários por motor | 2 | 3 |
| Tamanho | muito pequeno | grande, com dissipador de calor |
É evidente que o DRV8833 é a melhor escolha para pequenos robôs a bateria de 3V a 9V, enquanto o L298N ainda é útil quando os motores precisam de 12V ou mais.