Painel Web de Controle para Placa ESP32 com 8 Relés de 30A

Em automação residencial de alta demanda, quadros de distribuição industrial, sistemas de irrigação e bancadas de testes de potência, controlar cargas elétricas pesadas — como motores trifásicos, bombas d’água, bancos de resistências, compressores e refletores — exige módulos de chaveamento muito robustos. Placas de relés convencionais de 10A muitas vezes sofrem desgaste prematuro de contatos ou colagem por arco elétrico, além de demandarem montagens complexas de fiação ou infraestrutura de rede externa.
O projeto de código aberto ROBOBUILDERS RB2553 resolve esse problema combinando a placa ESP-32_RELAY_30A_X8_V1.2 e seu microcontrolador ESP32-WROOM-32 a 8 relés industriais de alta potência de 30A com optoacopladores dedicados. Ao ligar a alimentação, o microcontrolador sobe um ponto de acesso sem fio autônomo com Portal Captivo. Você se conecta diretamente pelo celular ou computador — sem depender de roteadores ou internet — e ganha acesso a um painel gráfico em Dark Mode e a uma API REST para acionar saídas, ler entradas e calibrar pulsos em tempo real.
Neste artigo, vamos explorar a fundo o funcionamento do projeto disponível no repositório oficial da RoboBuilders no GitHub, detalhando o que cada recurso faz, como a arquitetura foi planejada e o passo a passo para compilar e usar na sua bancada.
1. Visão Geral do Projeto
O firmware do projeto ROBOBUILDERS RB2553 foi desenvolvido especificamente para extrair a máxima segurança e desempenho da placa ESP-32_RELAY_30A_X8_V1.2.
Principais Casos de Uso na Prática:
- Acionamento de Cargas de Alta Potência: Controle confiável de equipamentos de até 30A por canal (como chuveiros, aquecedores, motores elétricos, sistemas fotovoltaicos e estufas).
- Automação Autônoma sem Roteador: O modo SoftAP emite a rede sem fio
ESP32-RELAY-30A-8CH. Basta aproximar-se da máquina ou quadro de comando, conectar e operar diretamente pelo navegador. - Portal Captivo Plug-and-Play: Assim que o smartphone se conecta à rede da placa, a tela de acionamento abre instantaneamente em tela cheia, sem que o operador precise memorizar ou digitar endereços IP.
- Integração Industrial com API REST: Sistemas supervisórios (SCADA), scripts em Python, Node-RED ou automações via Home Assistant podem enviar requisições HTTP RESTful em JSON para ler estados ou comutar canais em milissegundos.
2. Especificações de Hardware
A placa foi projetada para suportar ambientes industriais severos, integrando circuitos de proteção, regulador de tensão step-down e barramentos reforçados:
| Item | Especificação Detalhada |
|---|---|
| Modelo da Placa | ESP-32_RELAY_30A_X8_V1.2 (ou ESP-32_RELAY_X8) |
| Código do Produto / SKU | RoboBuilders RB2553 |
| Microcontrolador Principal | ESP32-WROOM-32 / ESP32-WROOM-32E (Dual Core 32-bit LX6 @ 240 MHz, 4MB Flash, 520KB SRAM) |
| Canais de Chaveamento | 8 Relés de Alta Potência SONGLE SLA-05VDC-SL-C (30A) |
| Capacidade de Carga por Canal | 30A em 250V AC ou 30A em 30V DC |
| Isolamento de Circuito | Acopladores ópticos dedicados por canal (isolamento galvânico total entre o ESP32 e as bobinas/cargas) |
| Conectores dos Relés | Bornes de parafuso reforçados com terminais COM (Comum), NO (Normal Aberto) e NC (Normal Fechado) |
| LED Indicador Onboard | LED de status e diagnóstico acoplado à GPIO 5 |
| Botão Físico Onboard | Botão tátil multifunção / Bootloader acoplado à GPIO 0 (IO0) |
| Entrada de Alimentação Principal | Borne de alimentação DC de ampla faixa: 7V a 30V DC (com regulador chaveado onboard) |
| Entrada Secundária | Terminal conector de 5V DC |
| Porta USB Onboard | Conector USB dedicado exclusivamente para alimentação elétrica. A gravação de código exige conversor USB-Serial externo no header UART. |
| Header de Programação | Header serial de pinos (TXD0, RXD0, IO0, EN/RST, GND, 3V3/5V) |
⚠️ Atenção sobre a porta USB: Diferente dos kits comuns de prototipagem (como a ESP32 DevKit), a porta USB presente nesta placa não possui chip de conversão serial integrado. Ela é utilizada unicamente como porta de alimentação 5V DC. Para enviar novos firmwares, utiliza-se o header serial UART com um conversor USB-Serial externo.
3. Mapeamento de Pinos (Pinout Oficial)
A placa organiza as GPIOs do processador em três barramentos principais: controle dos 8 relés, periféricos onboard e pinos de expansão para sensores e atuadores adicionais.
3.1 Barramento dos 8 Canais de Relé (30A)
Todos os canais são acionados em nível lógico alto (Active HIGH). Quando a GPIO vai para HIGH (3.3V), o optoacoplador é polarizado, fechando o contato entre o terminal COM e o terminal NO do relé correspondente:
| Canal do Relé | GPIO (ESP32) | Direção | Lógica de Acionamento | Descrição |
|---|---|---|---|---|
| ⚡ Relé 1 (CH1) | GPIO 32 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 1 (30A) |
| ⚡ Relé 2 (CH2) | GPIO 33 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 2 (30A) |
| ⚡ Relé 3 (CH3) | GPIO 25 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 3 (30A) |
| ⚡ Relé 4 (CH4) | GPIO 26 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 4 (30A) |
| ⚡ Relé 5 (CH5) | GPIO 27 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 5 (30A) |
| ⚡ Relé 6 (CH6) | GPIO 14 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 6 (30A) |
| ⚡ Relé 7 (CH7) | GPIO 12 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 7 (30A) (Strapping Pin MTDI) |
| ⚡ Relé 8 (CH8) | GPIO 13 | OUTPUT | Active HIGH | Optoacoplador / Bobina do Relé 8 (30A) |
💡 Nota sobre a GPIO 12 (CH7): A GPIO 12 é um strapping pin do ESP32 responsável pela seleção de voltagem da memória Flash SPI durante o boot. O circuito da placa já inclui resistores de polarização adequados para assegurar a inicialização correta em 3.3V.
3.2 Recursos Onboard & Comunicação Serial
| Periférico | GPIO (ESP32) | Direção | Nível / Modo | Descrição Técnica |
|---|---|---|---|---|
| 🔵 LED Onboard | GPIO 5 | OUTPUT | Active HIGH | Indicador de atividade e sinalização de pulso |
| 🟡 Botão BOOT (IO0) | GPIO 0 | INPUT_PULLUP | Active LOW | Botão tátil físico e seleção de modo bootloader |
| 🔌 UART0 TX | GPIO 1 | UART | Transmissão | Linha de comunicação serial TX (115.200 bps) |
| 🔌 UART0 RX | GPIO 3 | UART | Recepção | Linha de comunicação serial RX (115.200 bps) |
3.3 Pinos de Expansão para Sensores e Atuadores Extras
A placa disponibiliza um barramento de expansão em fita de pinos que permite conectar sensores de temperatura (como DS18B20 ou DHT22), chaves fim de curso, receptores RF ou módulos adicionais:
| Grupo de Expansão | GPIOs Mapeadas | Modo Padrão | Observações de Projeto |
|---|---|---|---|
| I/O Digital Configurável | 2, 4, 15, 16, 17, 18, 19, 21, 22, 23 | OUTPUT | Entradas ou saídas de 3.3V configuráveis pela interface web |
| Input-Only (Sensores) | 34, 35 | INPUT | Entradas analógicas/digitais ADC1 (não possuem circuitos de saída) |
4. Recursos do Painel Web
A interface gráfica foi construída como uma Single Page Application (SPA) em modo escuro (Dark Mode), sendo compilada diretamente na memória Flash SPI do microcontrolador por meio da diretiva PROGMEM. Isso consome zero bytes de memória RAM dinâmica (DRAM), garantindo resposta veloz e estabilidade contínua:
4.1 Seção 1 — Controle dos 8 Relés de Alta Potência (30A)
- Controle Individual: Cada um dos 8 canais possui seu próprio cartão com feedback visual instantâneo (verde/azul quando ativo, escuro quando desligado).
- Modo Pulso Temporizado (1s): O botão Pulso 1s aciona o relé selecionado e agenda seu desligamento automático em 1000 ms sem travar a execução do código (usando temporizadores assíncronos não bloqueantes).
- Ações Rápidas em Lote: Dois botões centrais permitem ligar (”⚡ Ligar Todos os Relés”) ou desligar (”⛔ Desligar Todos os Relés”) os 8 canais simultaneamente com um único clique.
4.2 Seção 2 — Recursos Onboard & Diagnóstico
- Card do LED Onboard (GPIO 5): Permite alternar o estado da saída (Ligar/Desligar) ou disparar um pulso de teste (Piscar 500ms).
- Card Interativo do Botão BOOT (GPIO 0): Mostra em tempo real se o botão físico
IO0da placa está solto (SOLTO - HIGH) ou pressionado (PRESSIONADO - LOW), servindo como ferramenta de validação sem multímetro. - Telemetria do Microcontrolador: Exibe no cabeçalho a frequência do clock (240 MHz), o tempo ininterrupto de atividade (Uptime) e a quantidade de memória RAM Heap livre.
4.3 Seção 3 — Barramento de Expansão (Outras GPIOs)
- Controle das GPIOs Livres: Cada pino do barramento extra (2, 4, 15, 16, 17, 18, 19, 21, 22, 23) pode ser comutado individualmente.
- Configuração Dinâmica via Modal (⚙️): Permite alterar o papel de qualquer pino entre Saída Digital (OUTPUT) e Entrada com Pull-Up (INPUT_PULLUP).
- Proteção de Hardware: As entradas analógicas
GPIO 34e35são travadas automaticamente como apenas leitura (Input-Only), prevenindo configurações inadequadas.
5. Documentação da API REST JSON
A placa embarca um servidor HTTP que responde a requisições RESTful, retornando cabeçalhos Content-Type: application/json e Access-Control-Allow-Origin: * para permitir integração direta com qualquer aplicação externa:
5.1 GET /api/status
Retorna o tempo de atividade (uptime) em segundos e o estado atual de todas as portas e relés monitorados.
curl http://192.168.4.1/api/status
Exemplo de Resposta:
{
"uptime": 142,
"free_heap": 214580,
"chip_model": "ESP32-D0WD-V3",
"cpu_freq": 240,
"relays": [
{ "ch": 1, "pin": 32, "val": 1 },
{ "ch": 2, "pin": 33, "val": 0 },
{ "ch": 3, "pin": 25, "val": 1 },
{ "ch": 4, "pin": 26, "val": 0 },
{ "ch": 5, "pin": 27, "val": 0 },
{ "ch": 6, "pin": 14, "val": 0 },
{ "ch": 7, "pin": 12, "val": 0 },
{ "ch": 8, "pin": 13, "val": 0 }
],
"pins": [
{ "pin": 5, "mode": 0, "val": 1 },
{ "pin": 0, "mode": 1, "val": 1 },
{ "pin": 2, "mode": 0, "val": 0 }
]
}
5.2 GET /api/toggle?pin=<gpio>
Inverte imediatamente o estado lógico do pino digital indicado (comuta o relé correspondente):
# Alterna o estado do Relé 1 (GPIO 32)
curl "http://192.168.4.1/api/toggle?pin=32"
Resposta:
{ "pin": 32, "val": 1 }
5.3 GET /api/pulse?pin=<gpio>&ms=<duracao>
Dispara um pulso em nível alto (HIGH) na GPIO especificada pelo tempo informado em milissegundos (faixa permitida: 50 ms a 10.000 ms), retornando automaticamente para nível baixo:
# Aciona o Relé 3 (GPIO 25) durante 2,5 segundos
curl "http://192.168.4.1/api/pulse?pin=25&ms=2500"
# Dispara o LED onboard (GPIO 5) por 500 ms
curl "http://192.168.4.1/api/pulse?pin=5&ms=500"
Resposta:
{ "success": true, "pin": 25, "duration_ms": 2500 }
5.4 GET /api/relays?state=<0_ou_1>
Endpoint especializado de alto rendimento para acionar ou desligar simultaneamente todos os 8 canais de relé de 30A:
# Liga os 8 relés simultaneamente
curl "http://192.168.4.1/api/relays?state=1"
# Desliga os 8 relés simultaneamente
curl "http://192.168.4.1/api/relays?state=0"
Resposta:
{ "success": true, "relays_state": 1 }
5.5 GET /api/mode?pin=<gpio>&mode=<0_ou_1>
Modifica o modo de operação de uma GPIO do barramento de expansão:
mode=0: Configura como Saída Digital (OUTPUT).mode=1: Configura como Entrada com Pull-Up (INPUT_PULLUP).
# Configura o pino GPIO 16 como entrada com pull-up
curl "http://192.168.4.1/api/mode?pin=16&mode=1"
5.6 GET /api/all?state=<0_ou_1>
Altera o estado de todos os pinos de saída do barramento de expansão.
6. Esquema de Ligação Elétrica de Cargas AC/DC
Cada um dos 8 canais de relé SONGLE SLA-05VDC-SL-C possui bornes de parafuso industriais com 3 terminais:
- COM (Comum): Terminal central de alimentação do circuito que será chaveado.
- NO (Normalmente Aberto): O circuito permanece aberto em repouso e fecha quando o relé é acionado. Este é o terminal padrão para a grande maioria das automações.
- NC (Normalmente Fechado): O circuito fica fechado por padrão e abre quando o relé é ativado.
Tabela de Conexões dos Terminais de Alimentação e Relés
A tabela abaixo descreve com precisão cada conexão ilustrada no diagrama elétrico:
| Terminal de Origem | Terminal de Destino (Placa / Carga) | Cor do Fio | Tipo de Sinal | Observação Técnica |
|---|---|---|---|---|
| Fonte 12V DC (+) | Borne VIN (7-30V) da Placa | 🔴 Vermelho | Alimentação DC | Alimentação lógica e bobinas dos relés |
| Fonte 12V DC (-) | Borne GND da Placa | ⚫ Preto | Referência Comum | Unificar GNDs das fontes |
| Rede Elétrica (Fase - L) | Borne COM do Relé 1 (CH1) | 🟤 Marrom | Linha AC (110V/220V) | Fase da rede elétrica para chaveamento |
| Borne NO do Relé 1 (CH1) | Terminal 1 da Carga AC (30A) | 🔴 Vermelho | Fase Chaveada | Fecha contato quando o relé liga |
| Rede Elétrica (Neutro - N) | Terminal 2 da Carga AC (30A) | 🔵 Azul Claro | Retorno Neutro | Ligação direta à carga |
| Fonte de Carga 24V DC (+) | Borne COM do Relé 2 (CH2) | 🔴 Vermelho | Linha DC de Potência | Positivo da fonte de carga |
| Borne NO do Relé 2 (CH2) | Terminal (+) da Carga DC (Bomba/Motor) | 🟠 Laranja | Linha DC Chaveada | Fecha circuito no acionamento |
| Fonte de Carga 24V DC (-) | Terminal (-) da Carga DC (Bomba/Motor) | ⚫ Preto | Retorno Negativo | Ligação direta de retorno |
Recomendações Críticas de Segurança para Cargas de 30A:
⛔ Perigo de choque e incêndio elétrico:
- Dimensionamento dos Condutores: Uma corrente de 30A exige cabos de cobre de bitola mínima de 4,0 mm² a 6,0 mm² conforme a norma NBR 5410. Fios finos irão superaquecer rapidamente sob carga plena.
- Cargas Indutivas (Motores e Solenoides): Motores elétricos geram picos de tensão reversa na abertura dos contatos. Recomendamos utilizar filtros Snubber RC (em corrente alternada) ou diodos de roda-livre (Flyback em corrente contínua) em paralelo com as cargas indutivas para prolongar a vida útil dos contatos do relé.
- Aperto dos Bornes: Certifique-se de apertar firmemente os parafusos dos bornes verdes. Conexões frouxas geram resistência de contato e aquecimento excessivo.
7. Guia de Conexão e Gravação UART
Como a porta USB onboard da placa ESP-32_RELAY_30A_X8_V1.2 é exclusivamente para fornecimento de energia, a gravação do firmware é realizada conectando um módulo conversor USB-Serial externo (como CP2102, FTDI FT232RL, CH340 ou PL2303) ao header de pinos serial da placa:
Tabela de Conexões do Gravador USB-Serial
| Pino do Conversor USB-Serial | Pino do Header UART (Placa RB2553) | Cor do Fio | Função do Sinal | Regra de Ligação |
|---|---|---|---|---|
| 5V (ou 3.3V) | 5V (ou 3V3) | 🔴 Vermelho | Alimentação Lógica | Alimenta o microcontrolador durante a gravação |
| GND | GND | ⚫ Preto | Terra de Referência | Obrigatório interligar os GNDs |
| TXD (Transmissão) | RXD0 (GPIO 3) | 🟡 Amarelo | Recepção de Dados | Ligação cruzada: TX do gravador no RX da placa |
| RXD (Recepção) | TXD0 (GPIO 1) | 🟢 Verde | Envio de Telemetria | Ligação cruzada: RX do gravador no TX da placa |
Procedimento para Colocar o ESP32 em Modo Bootloader (Download Boot):
- Conecte os pinos do conversor USB-Serial à placa e plugue o cabo USB no computador.
- Pressione e mantenha pressionado o botão físico BOOT / IO0 (GPIO 0) na placa.
- Pressione e solte o botão EN / RST (ou desconecte e reconecte brevemente o pino de alimentação mantendo o botão BOOT pressionado).
- Solte o botão BOOT.
- O ESP32 estará no modo de recepção de firmware (waiting for download), pronto para receber a compilação do PlatformIO ou da Arduino IDE.
8. Estrutura do Repositório
O projeto na pasta RB2553 foi organizado de forma modular, permitindo compilar tanto pelo PlatformIO quanto pela Arduino IDE:
📁 RB2553/
│
├── 📁 include/
│ └── web_page.h --> Código da interface web em PROGMEM (HTML5/CSS3/JS)
│
├── 📁 src/
│ └── main.cpp --> Firmware principal PlatformIO (SoftAP, REST API, Relés 30A)
│
├── 📁 ROBOBUILDERS_RB2553/ --> Pacote pronto para compilação na Arduino IDE
│ ├── ROBOBUILDERS_RB2553.ino --> Sketch principal Arduino
│ └── web_page.h --> Interface web PROGMEM incluída no sketch
│
├── 📁 img/ --> Capturas de tela e diagramas da documentação
│ └── TELA-INICIAL.png
│
├── platformio.ini --> Arquivo de parâmetros do PlatformIO
└── README.md --> Documentação técnica oficial do hardware e pinout
9. Como Baixar o Projeto do GitHub
Você pode obter exclusivamente a pasta do projeto RB2553 sem clonar todo o repositório da RoboBuilders:
Opção A — Clonar apenas a pasta via Git Sparse-Checkout (Recomendado)
Abra o terminal do seu computador e execute:
mkdir esp32-rele-30a && cd esp32-rele-30a
git init
git remote add origin https://github.com/luanvieiramendes/ROBOBUILDERS.git
git config core.sparseCheckout true
git sparse-checkout set "RB2553/Documentação da placa e projeto WEB"
git pull --depth=1 origin main
cd "RB2553/Documentação da placa e projeto WEB"
Opção B — Download Direto em Arquivo ZIP
Se preferir baixar diretamente pelo navegador sem comandos Git: 👉 [Baixar pasta do projeto RB2553 via DownGit](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/luanvieiramendes/ROBOBUILDERS/tree/main/RB2553/Documentação da placa e projeto WEB)
10. Compilação e Gravação via PlatformIO CLI
O método mais rápido e automatizado utiliza o PlatformIO Core:
-
Compilar o Firmware:
pio run(O PlatformIO fará o download automático das dependências da biblioteca ArduinoJson e das ferramentas do ESP32).
-
Gravar na Placa (com ESP32 em modo Bootloader):
pio run -t upload -
Gravar Especificando a Porta Serial Manualmente:
pio run -t upload --upload-port COM4 -
Abrir o Monitor Serial (115.200 bps):
pio device monitor -
Limpar Arquivos de Build:
pio run -t clean
11. Compilação Alternativa via Arduino IDE
Caso utilize a Arduino IDE:
- Certifique-se de que o pacote de placas ESP32 está instalado em Ferramentas > Placa > Gerenciador de Placas.
- Abra o arquivo localizado na subpasta:
ROBOBUILDERS_RB2553/ROBOBUILDERS_RB2553.ino - Em Ferramentas > Placa > ESP32 Arduino, selecione ESP32 Dev Module.
- Em Ferramentas > Porta, selecione a porta COM do seu conversor USB-Serial.
- No Gerenciador de Bibliotecas (
Ctrl + Shift + I), instale a biblioteca ArduinoJson (versão 6.x). - Coloque a placa em modo bootloader (mantenha
BOOTpressionado, dê um toque emRST). - Clique em Carregar (Upload).
12. Acesso ao Painel Web e Teste em Bancada
Com a gravação finalizada, pressione o botão RST da placa para inicializar o firmware em modo de execução normal:
- Conecte-se à Rede Wi-Fi Gerada:
- No celular, tablet ou computador, localize a rede sem fio:
📶ESP32-RELAY-30A-8CH - Esta rede é aberta (não possui senha).
- No celular, tablet ou computador, localize a rede sem fio:
- Abra a Interface Web:
- Em dispositivos móveis, o Portal Captivo será acionado automaticamente em tela cheia.
- Caso prefira abrir manualmente no navegador (Chrome, Edge, Safari, Firefox), acesse:
👉http://192.168.4.1
- Teste os Acionamentos:
- Clique nos botões dos relés para ouvir o estalo mecânico dos contatos dos relés de 30A e acompanhar a sinalização visual.
- Utilize a rota
/api/statusou scripts externos para integrar o módulo ao seu sistema de automação.
Solução de problemas
Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o Painel Web de Controle para Placa ESP32 com 8 Relés de 30A e eu ajudarei a encontrar a solução.
O assistente usa IA e pode errar. Confirme informações críticas no datasheet oficial do fabricante.