Tutorial ESP32 30/55 - Controle de Servo pela web usando MQTT com o serviço Adafruit IO | Kit de Aprendizagem IoT ESP32 da SunFounder
Neste tutorial, aprenderemos como controlar a posição de um motor de passo usando o microcontrolador ESP32 e o protocolo MQTT pela web. Aproveitando o serviço Adafruit IO, você poderá posicionar o servo em vários ângulos, como 0°, 90° ou 180°, remotamente. Este projeto demonstra as capacidades do ESP32, que inclui Wi-Fi e Bluetooth embutidos, tornando-o uma ferramenta poderosa para aplicações de IoT.

Neste projeto, configuraremos um broker MQTT usando Adafruit IO, criaremos um painel para controlar o servo e conectaremos o ESP32 a ele. A posição do servo será ajustável por meio de um controle deslizante no painel, permitindo o controle em tempo real de qualquer dispositivo com acesso à internet (no vídeo às 5:30).
Hardware Explicado
Os componentes principais deste projeto incluem o microcontrolador ESP32 e o motor de servo. O ESP32 é um microcontrolador versátil com capacidades integradas de Wi-Fi e Bluetooth, tornando-o ideal para aplicações de IoT. Ele se comunica com o serviço Adafruit IO usando o protocolo MQTT, que é leve e eficiente para transmissão de mensagens pela internet.
O motor de servo é um atuador rotativo que permite o controle preciso da posição angular. Ele funciona recebendo um sinal de modulação por largura de pulso (PWM) que dita sua posição. Neste projeto, conectaremos o servo a um dos pinos digitais no ESP32, permitindo-nos controlar seu ângulo remotamente.
Detalhes da Ficha Técnica
| Fabricante | Paralaxe |
|---|---|
| Número da peça | SG90 |
| Tensão de Lógica/IO | 3,3 V - 5 V |
| Tensão de alimentação | 4,8 V - 6,0 V |
| Corrente de saída (por canal) | 1 A max |
| Orientação sobre a frequência PWM | 50 Hz |
| Limiares de lógica de entrada | 0,3 V - 0,7 V |
| Queda de tensão / RDS(on)/ saturação | 0,2 V máx |
| Limites térmicos | Temperatura de operação: -10°C a 60°C |
| Pacote | Capa de plástico |
| Notas / variantes | Mini servo, rotação de 180° |
- Garanta o fornecimento de tensão adequado ao servo (4,8 V - 6,0 V).
- Use um terra comum entre o ESP32 e o servo.
- Monitore o sinal PWM para evitar exceder os limites do servomotor.
- Conecte o servo de forma segura para evitar desconexões durante a operação.
- Atualize a biblioteca Adafruit MQTT para garantir compatibilidade.
Diagramas MQTT
Instruções de Fiação

Para conectar o motor servo ao ESP32, comece ligando o fio de aterramento do servo ao pino de aterramento no ESP32. Em seguida, conecte o fio de alimentação (geralmente vermelho) do servo ao pino de 5V no ESP32. Por fim, conecte o fio de sinal (frequentemente amarelo ou branco) ao pino digital 25 no ESP32. Certifique-se de que as conexões estejam seguras para evitar desconexões durante a operação.
Se você estiver usando uma bateria para alimentar o ESP32, certifique-se de que a voltagem da bateria esteja dentro da faixa aceitável tanto para o ESP32 quanto para o servo. Além disso, verifique novamente se a fiação corresponde às definições das portas usadas em seu código para evitar quaisquer problemas (no vídeo às 12:45).
Exemplos de Código e Passo a Passo
No texto fornecido, primeiro incluímos as bibliotecas necessárias para o ESP32 e MQTT. Definimos o objeto servo e especificamos o pino ao qual está conectado comconst int servoPin = 25;. O ângulo padrão também é configurado comconst int defaultServoAngle = 90;, que será a posição inicial quando o ESP32 iniciar.
Servo myServo;
const int servoPin = 25;
const int defaultServoAngle = 90;
int servoAngle = defaultServoAngle;
Este trecho inicializa o servo na porta 25 e define seu ângulo padrão para 90°. A variávelservoAngleserá atualizado com base nas mensagens recebidas do broker MQTT.
In thesetup()função, conectamos ao Wi-Fi e configuramos o cliente MQTT. As credenciais para Adafruit IO são definidas aqui, incluindo o nome de usuário e a chave:
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_xmIW58uNNsjJCSOqzZ9QoHyq29wu"
Esta seção estabelece a conexão com o serviço Adafruit IO. Certifique-se de substituir esses valores pelas suas próprias credenciais do Adafruit IO ao implementar o código.
Finalmente, o loop principal garante que a conexão com o servidor MQTT permaneça ativa e processe as mensagens recebidas. A posição do servo é atualizada com base no ângulo recebido:
mqtt.processPackets(500);
int pulseWidth = map(servoAngle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
Este código mapeia o ângulo do servo para a largura de pulso correspondente e a envia para o motor servo. AprocessPackets()a função permite que o ESP32 trate mensagens MQTT recebidas, garantindo que o servo reaja a comandos enviados através do painel do Adafruit IO.
Demonstração / O que Esperar
Uma vez que tudo esteja configurado, você deve ser capaz de controlar o servo a partir do painel do Adafruit IO usando o controle deslizante que você criou. À medida que você move o controle deslizante, o servo ajustará seu ângulo em tempo real. Certifique-se de que seu ESP32 esteja conectado ao Wi-Fi e que a conexão MQTT esteja estável. Se o servo não responder, verifique a fiação e a fonte de alimentação do servo (no vídeo às 20:15).
Esteja ciente dos limites de alcance do servo; enviar um valor fora de 0° a 180° pode fazer com que ele se comporte de maneira inesperada. O código inclui verificações para evitar tais ocorrências, limitando o ângulo dentro desse intervalo.
Marcação de Vídeo
- 00:00 Início
- 1:54 Introdução do projeto
- 2:52 Introdução ao MQTT
- 6:50 Configuração do Adafruit IO
- 9:54 Cabeamento do servo
- 11:07 Código explicado
- 18:59 Selecionando a placa ESP32 e a porta COM
- 22:10 Demonstração do projeto
Common Course Links
Common Course Files
Coisas que você pode precisar
-
AliExpressCompre o motor Servo SG90 180 ou 360 no AliExpresss.click.aliexpress.com
Recursos e referências
-
DocumentaçãoTutorial ESP32 17/55 - Documentação do motorservo SunFunderdocs.sunfounder.com
-
ExternoSG90 servo na Amazon EUAamzn.to
Arquivos📁
Outros arquivos
-
Folha de dados do motor SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB