Manual da Placa ESP32 com 1 Relé de 30A: Pinout, Ligação e Programação Completa

Placa ESP32 com 1 Relé de 30A RB2556 — manual técnico completo

A Placa Controladora ESP32 com 1 Relé de 30A (código de engenharia esp32_relay_30a_x1_v1.1, identificada comercialmente como RoboBuilders RB2556) é um módulo eletrônico de automação industrial e predial que integra o microcontrolador ESP32-WROOM-32E a um estágio de potência eletromecânico de alta capacidade nominal. O sistema foi desenvolvido especificamente para comandar circuitos de carga pesada de até 30A em 250V AC ou 30A em 30V DC (tais como motores de indução monofásicos, compressores, bombas de poço artesiano, resistências térmicas e sistemas de iluminação de grande porte) com isolamento galvânico por optoacoplador, supressão de ruídos transitórios e imunidade eletromagnética superior à dos módulos de relé residenciais convencionais de 10A.

Este documento foi estruturado como guia de referência técnica e manual prático para engenheiros eletricistas, projetistas de sistemas embarcados, integradores de automação e técnicos em eletrônica. Ao longo das seções seguintes, são apresentadas a arquitetura de silício, a pinagem oficial detalhada do barramento de expansão, as normas de segurança conforme a NBR 5410, os esquemas de ligação elétrica em corrente alternada e contínua, o procedimento de gravação de firmware via barramento serial UART (Universal Asynchronous Receiver-Transmitter) e exemplos completos de código-fonte em linguagem C++ para o ecossistema Arduino e PlatformIO.

O que você vai aprender:

  • Compreender a arquitetura interna, o estágio de optoisolamento e as especificações elétricas da placa RB2556.
  • Identificar a pinagem exata do processador ESP32-WROOM-32E, do canal de relé, periféricos onboard e pinos de expansão livres.
  • Dimensionar condutores de cobre e dispositivos de proteção externa segundo a norma técnica brasileira NBR 5410.
  • Executar a ligação de cargas monofásicas em 127V/220V AC e circuitos em corrente contínua de 12V/24V DC com proteção contra picos indutivos.
  • Realizar a gravação de programas via gravador externo USB-Serial operando o modo ROM Bootloader.
  • Desenvolver rotinas de acionamento em C++ com filtragem por software (debounce), chaveamento temporizado não-bloqueante por millis() e controle via Wi-Fi Ponto de Acesso (SoftAP) com API RESTful JSON.
  • Conhecer o projeto pronto de painel web de controle autônomo com portal captivo disponível para esta placa.

Material utilizado:

  • Placa de Controle ESP32 com 1 Relé de 30A (RB2556 / esp32_relay_30a_x1_v1.1) — disponível no catálogo oficial da loja RoboBuilders.
  • Módulo Conversor USB-Serial externo (chips CP2102, FT232RL, CH340 ou compatíveis).
  • Fonte de alimentação DC regulada de 7V a 30V (12V DC ou 24V DC / 1A recomendada) ou cabo Micro-USB com fonte estabilizada de 5V DC / 1A.
  • Cabos flexíveis de cobre com bitola entre 2,5 mm² e 6,0 mm² e terminais ilhós tubulares para as conexões de potência.
  • Circuito snubber RC externo (resistor de 100 Ω 2W em série com capacitor de poliéster 100 nF / 630V) e Varistor MOV de 275V para cargas indutivas severas.

1. Descrição Geral do Produto

A placa controladora RB2556 soluciona uma das limitações mais críticas encontradas em projetos de Internet das Coisas (IoT — Internet of Things) e automação predial: a comutação direta de equipamentos elétricos de consumo elevado. Módulos genéricos azuis de 10A (como SRD-05VDC) possuem pistas de circuito impresso estreitas e lâminas de contato frágeis, que sofrem desgaste rápido por faiscamento elétrico (micro-soldagem de contatos), aquecem excessivamente e colocam em risco a integridade dos painéis de distribuição.

A placa RB2556 adota o relé selado de alta potência SONGLE SLA-05VDC-SL-C, estruturado com contatos de liga de prata-óxido de estanho (AgSnO₂) capazes de suportar correntes térmicas contínuas de até 30A, além de trilhas reforçadas com camada dupla de cobre estanhado na placa de circuito impresso (PCB — Printed Circuit Board).

Para que serve?

Serve como unidade autônoma de sensoriamento, conectividade sem fio e chaveamento de potência. O dispositivo permite ligar, desligar, programar horários, monitorar tempos de funcionamento e criar lógicas de segurança para equipamentos monofásicos pesados por meio de comandos enviados via Wi-Fi, Bluetooth LE ou rotinas internas gravadas em sua memória Flash.

Por que devo usar?

  • Segurança Elétrica e Confiabilidade: Conta com isolador óptico (optoacoplador) que separa o circuito digital sensível de 3.3V do ESP32 da malha analógica de 5V da bobina do relé, prevenindo que ruídos eletromagnéticos propagados por retorno indutivo atinjam o microcontrolador.
  • Diminuição de Componentes no Quadro: A capacidade de 30A permite alimentar diretamente bombas d’água de até 2 HP (em 220V) ou resistências elétricas de até 6.600W sem demandar contatores magnéticos adicionais em instalações compactas.
  • Conectividade Wi-Fi e Bluetooth Nativas: O microcontrolador dual-core ESP32 opera tanto como cliente conectado à rede local de roteadores quanto como Ponto de Acesso sem fio autônomo (SoftAP) dotado de servidor web e portal captivo.
  • Flexibilidade de Expansão: Além do canal de relé onboard, a placa disponibiliza 17 pinos de entrada e saída digital (GPIO) e 2 pinos analógicos dedicados para acoplamento de sensores de temperatura, umidade, nível, corrente e vazão.

Quando devo usar?

O uso da placa RB2556 é recomendado em cenários onde é necessário comandar um único equipamento elétrico crítico de alta corrente com inteligência programada, tais como:

  1. Automação de motobombas de recalque predial ou drenagem de caixas pluviais.
  2. Controle de temperatura em caldeiras elétricas, fornos industriais e cervejarias artesanais.
  3. Acionamento de aparelhos de ar-condicionado de grande porte e sistemas de exaustão mecânica.
  4. Quadros de comando para irrigação agrícola e estufas automatizadas.
  5. Chaveamento de bancos de baterias e sistemas fotovoltaicos em corrente contínua de até 30V DC.

Comparativo da Família de Placas com Relés de 30A RoboBuilders

A RoboBuilders desenvolveu uma linha completa de placas industriais equipadas com relés SONGLE de 30A para diferentes graus de complexidade de projeto:

ModeloCanais de Relé (30A)GPIOs dos RelésAlimentação SuportadaPinos Livres no HeaderAplicação Recomendada
RB2556 (Este manual)1 CanalGPIO 167V a 30V DC / Micro-USB 5V17 Digitais + 2 ADCsCargas individuais pesadas, bombas, aquecedores
RB25552 CanaisGPIO 13, GPIO 127V a 30V DC / Micro-USB 5V16 Digitais + 2 ADCsIntertravamento motor/reversão, aquecimento duplo
RB25544 CanaisGPIO 12, 13, 14, 1590V-250V AC / 7-30V DC / USB8 Digitais + 2 ADCsQuadros prediais híbridos, 4 setores industriais
RB25538 CanaisGPIO 13, 12, 14, 27, 26, 25, 33, 327V a 30V DC / Micro-USB 5V8 Digitais + 2 ADCsPainéis elétricos completos, automação predial

2. Especificações Técnicas

A tabela abaixo compila todos os parâmetros elétricos, mecânicos e operacionais do modelo RB2556 (esp32_relay_30a_x1_v1.1):

ParâmetroValor Nominal / Descrição
MicrocontroladorEspressif ESP32-WROOM-32E (Arquitetura Xtensa Dual-Core 32-bit LX6 @ 240 MHz)
Memória de Programa e Dados4 MB (32 Mbits) SPI Flash / 520 KB SRAM interna
Conectividade Sem FioWi-Fi 802.11 b/g/n (2.4 GHz, até 150 Mbps) e Bluetooth v4.2 BR/EDR + BLE
Quantidade de Relés de Potência1 Canal Eletromecânico de Alta Capacidade
Modelo do ReléSONGLE SLA-05VDC-SL-C (Bobina de 5V DC)
Tensão de Isolamento dos Contatos250V AC / 30V DC
Corrente Máxima de Contato30A contínuos (Carga Resistiva pura)
Potência Máxima de Chaveamento7.500 VA em rede alternada / 900 W em corrente contínua
Resistência Inicial de Contato100 mΩ\le 100\text{ m}\Omega (medida em 1A / 6V DC)
Vida Útil Mecânica / Elétrica10.000.00010.000.000 ciclos (sem carga) / 100.000100.000 operações (sob carga nominal máxima)
Tempo de Comutação (Pick-up / Release)15 ms\le 15\text{ ms} para fechar / 10 ms\le 10\text{ ms} para abrir
Tensão de Alimentação DC (Borne)7V a 30V DC (conversor chaveado buck integrado de alta eficiência)
Tensão de Alimentação USB5V DC ±5%\pm 5\% via porta Micro-USB (apenas alimentação, sem chip serial)
Consumo em Repouso (Relé Desligado)45 mA@12V DC\approx 45\text{ mA} @ 12\text{V DC} (ESP32 com rádio Wi-Fi ativo)
Consumo com Relé Atracado185 mA@12V DC\approx 185\text{ mA} @ 12\text{V DC} (energia exigida pela bobina e optoacoplador)
Temperatura de Operação25C-25^\circ\text{C} a +70C+70^\circ\text{C}
Dimensões Físicas da PlacaAproximadamente 70 mm×60 mm×22 mm70\text{ mm} \times 60\text{ mm} \times 22\text{ mm}

Limites Operacionais de Chaveamento por Categoria de Carga

Em engenharia elétrica, cargas com características físicas distintas exigem cálculo de redução de capacidade (derating) para assegurar a vida útil dos contatos:

Categoria da CargaExemplos PráticosLimite Recomendado na RB2556Fator de Atenção
Resistiva Pura (AC-1 / DC-1)Aquecedores, resistências blindadas, fornos elétricosAté 30A (6.600W em 220V)Carga ideal, sem transitórios de partida
Indutiva Moderada (AC-3)Motores de bomba d’água, compressores, ventiladoresAté 16A (Motores de até 2 HP / 1,5 kW)Corrente de partida atinge de 5 a 7 vezes a nominal
Lâmpadas com Reator / DriverRefletores LED industriais, lâmpadas a vapor de sódioAté 10AAlta corrente de irrupção capacitiva (inrush current)
Cargas em Corrente ContínuaVálvulas solenoides 24V DC, motores DC, atuadoresAté 15A (sob 24V DC)O arco voltaico em DC não passa por zero e desgasta contatos

⚠️ Atenção: Em motores elétricos monofásicos acima de 1,5 HP (ou cargas indutivas severas operando próximas a 16A de regime contínuo), utilize obrigatoriamente um circuito Snubber RC em paralelo com os terminais do relé ou com a carga para amortecer a força contra-eletromotriz gerada na abertura do circuito.


3. Pinagem e Terminais de Conexão (Pinout)

O microcontrolador ESP32-WROOM-32E montado na placa possui pinos dedicados aos periféricos internos soldados na PCB e exporta todos os pinos restantes para as barras de conexão lateral (headers de 2,54 mm).

3.1 Pinos Dedicados Onboard

Periférico IntegradoGPIO do ESP32DireçãoNível Lógico de DisparoFunção Técnica
Relé de Potência 30A (K1)GPIO 16OUTPUTActive HIGH (3.3V)Dispara o transistor do optoacoplador e energiza a bobina do relé
LED Indicador de StatusGPIO 5OUTPUTActive HIGH (3.3V)LED azul para sinalização visual de operação ou conexão Wi-Fi
Botão Tátil Onboard (S1 / BOOT)GPIO 0INPUT_PULLUPActive LOW (0V)Pressionado conecta o pino ao terra (GND). Usado também para entrar em modo bootloader
UART0 Transmissão (TX)GPIO 1OUTPUT3.3V TTLEnvio de mensagens de telemetria serial e resposta ao gravador
UART0 Recepção (RX)GPIO 3INPUT3.3V TTLRecepção de código-fonte binário durante o upload de firmware

💡 Dica: O canal de acionamento do relé opera em lógica positiva (Active HIGH). Isso significa que ao inicializar o ESP32, colocar a GPIO 16 em nível lógico baixo (digitalWrite(16, LOW)) mantém a carga desligada e segura contra acionamentos intempestivos durante a reinicialização (boot).

3.2 Barramento de Expansão para Sensores e Periféricos

Ao contrário de placas comerciais lacradas, a RB2556 disponibiliza 19 portas do ESP32 para acoplamento de sensores externos, displays e módulos de rádio:

Grupo de GPIOsPinos DisponíveisTipo SuportadoRestrições e Cuidados Técnicos
Entradas/Saídas Digitais LivresGPIO 2, GPIO 4, GPIO 12, GPIO 13, GPIO 14, GPIO 15, GPIO 17, GPIO 18, GPIO 19, GPIO 21, GPIO 22, GPIO 23, GPIO 25, GPIO 26, GPIO 27, GPIO 32, GPIO 33Entrada / Saída Digital, PWM, I2C, SPIPinos totalmente configuráveis. As portas 21 e 22 são comumente configuradas como barramento I2C (SDA e SCL).
Portas de Entrada Analógica PurasGPIO 34, GPIO 35Apenas Entrada (INPUT)Pertencem ao ADC1 interno. Não possuem resistores de pull-up/pull-down internos e não funcionam como saída digital. Ideais para sensores de umidade, temperatura e corrente (transformadores de corrente SCT-013).

3.3 Terminais de Parafuso do Relé de Potência (Borne Verde K1)

O borne de três vias com parafusos reforçados localizado na saída do relé possui a serigrafia padrão industrial:

  • COM (Comum): Ponto comum do circuito de chaveamento. Deve receber a fase da rede elétrica em corrente alternada ou o polo positivo da fonte de carga em corrente contínua.
  • NO (Normalmente Aberto — Normally Open): Permanece isolado do comum enquanto a bobina do relé estiver desenergizada (GPIO 16 = LOW). Conecta-se mecanicamente ao terminal COM quando o relé é acionado (GPIO 16 = HIGH). Este é o terminal padrão para 99% das aplicações.
  • NC (Normalmente Fechado — Normally Closed): Conectado ao pino COM quando o relé está desligado, e se desconecta quando o relé é acionado. Utilizado em sistemas de emergência ou sinalizadores de estado desligado.

4. Instalação Elétrica e Dimensionamento

4.1 Dimensionamento de Condutores Conforme NBR 5410

A norma brasileira de instalações elétricas de baixa tensão (ABNT NBR 5410) estipula critérios rigorosos para capacidade de condução de corrente em função da elevação de temperatura e queda de tensão:

  1. Para Correntes de até 30A contínuos: Utilize obrigatoriamente condutores de cobre eletrolítico isolados em PVC (70°C) ou EPR/XLPE (90°C) com seção transversal mínima de 4,0 mm² (para distâncias curtas até 15 metros) ou 6,0 mm² (para circuitos mais longos, mitigando queda de tensão superior a 2%).
  2. Terminação dos Condutores: É expressamente proibido inserir fios de cobre desencapados com pontas desfiadas sob os parafusos dos bornes. Utilize alicates de crimpagem e terminais do tipo ilhós tubular (bootlace ferrule). Isso assegura contato uniforme em toda a superfície metálica e impede pontos quentes por efeito Joule.
  3. Disjuntor de Proteção: Instale na linha de alimentação da carga um disjuntor termomagnético monopolar curva B (para cargas resistivas puras) ou curva C (para motores e compressores) dimensionado entre 25A e 32A.

4.2 Supressão de Transitórios (Circuito Snubber RC e Varistor)

O desligamento abrupto de cargas indutivas gera picos de alta tensão reversa que podem ultrapassar 1.000V. Para proteger os contatos do relé contra queima e eliminar ruídos eletromagnéticos que possam resetar o microcontrolador ESP32:

  • Conecte em paralelo com a carga indutiva (ou em paralelo entre os bornes COM e NO do relé) um circuito Snubber RC composto por um resistor de 100 Ω\Omega / 2W em série com um capacitor de poliéster metalizado de 100 nF (0,1 μ\muF) / 630V.
  • Instale um Varistor de Óxido Metálico (MOV) de 275V AC (para rede de 220V) em paralelo com os polos de alimentação da carga para absorver surtos de tensão da rede.

Diagrama de ligação elétrica

O diagrama abaixo ilustra a conexão profissional da placa RB2556, alimentada por uma fonte industrial de 12V DC no conector de força e acionando um motor elétrico monofásico de alta potência em rede 220V AC:

Diagrama esquemático oficial de ligação elétrica da placa ESP32 RB2556 acionando carga de potência com relé de 30A

Tabela de Conexões dos Terminais Elétricos

A tabela abaixo descreve detalhadamente cada condutor do circuito ilustrado no diagrama:

Terminal de OrigemTerminal de Destino (Placa / Carga)Cor do FioTipo de LinhaRequisito de Instalação
Fonte 12V DC (+)Borne 7-30V DC da Placa🔴 VermelhoAlimentação DCFio flexível 0,75 mm² para alimentação da placa
Fonte 12V DC (-)Borne GND da Placa⚫ PretoReferência ComumInterligar ao referencial de terra da fonte
Rede AC (Fase - L)Borne COM (Comum) do Relé K1🟤 MarromLinha AC AtivaFio 4,0 mm² ou 6,0 mm² com terminal ilhós
Borne NO do Relé K1Terminal 1 da Carga AC (Motor / Bomba)🔴 VermelhoLinha AC ChaveadaLinha energizada quando GPIO 16 estiver em HIGH
Rede AC (Neutro - N)Terminal 2 da Carga AC (Motor / Bomba)🔵 Azul ClaroRetorno NeutroLigação direta à carga, sem passar pelos contatos
Barramento PE (Terra)Carcaça Metálica do Motor🟢 Verde/AmareloProteção ElétricaCondutor de aterramento de proteção obrigatório

Perigo de Choque Elétrico: O condutor de Neutro da rede elétrica residencial ou industrial NUNCA deve ser ligado a nenhum terminal do relé. O relé comuta exclusivamente o condutor de Fase. Conectar Fase e Neutro nos terminais do relé provocará um curto-circuito franco imediato ao atracar o contato.


Gravação de Firmware via Gravador USB-Serial (UART)

A porta Micro-USB integrada na placa RB2556 é conectada somente ao regulador de tensão de 5V para fornecimento de energia, não contando com chip conversor USB-Serial onboard (como CP2102 ou CH340). Para gravar novos códigos ou atualizar o firmware:

Diagrama de ligação entre o conversor USB-Serial e o header UART da placa ESP32 RB2556 para gravação de código

Tabela de Conexões do Gravador USB-Serial

Pino no Módulo USB-SerialPino no Header da Placa RB2556Cor do CaboSinal LógicoRegra de Comunicação
5V (ou 3V3)5V (ou 3V3)🔴 VermelhoAlimentaçãoAlimenta a placa durante o processo de gravação
GNDGND⚫ PretoTerraObrigatório unificar os terras
TX / TXDRX / RXD (GPIO 3)🟡 AmareloEnvio de DadosLigação Cruzada: Saída TX do conversor entra no RX do ESP32
RX / RXDTX / TXD (GPIO 1)🟢 VerdeRetorno de DadosLigação Cruzada: Saída TX do ESP32 entra no RX do conversor

Passo a Passo para Entrar no Modo Bootloader (Download Mode)

  1. Com a placa completamente desenergizada da rede elétrica de 220V, conecte os 4 cabos jumpers do conversor USB-Serial ao header da RB2556 conforme a tabela acima.
  2. Pressione e mantenha pressionado o botão BOOT (GPIO 0) localizado na placa.
  3. Conecte o cabo USB do gravador à porta USB do seu computador (ou aperte e solte o botão RST/EN mantendo o BOOT pressionado).
  4. Solte o botão BOOT após 2 segundos. O chip ESP32 estará no modo ROM Download Bootloader, pronto para receber o código via PlatformIO ou Arduino IDE na taxa de 115.200 bps ou 921.600 bps.

5. Configuração e Programação com ESP32

5.1 Configuração de Ambiente no PlatformIO (platformio.ini)

Para projetos no PlatformIO Core / VS Code, crie ou configure o arquivo platformio.ini:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
build_flags = 
    -DCORE_DEBUG_LEVEL=0
lib_deps =
    bblanchon/ArduinoJson @ ^6.21.3

5.2 Exemplo 1: Teste Básico Sequencial com Relé e LED Onboard

O código abaixo inicializa a porta de potência e o LED onboard, demonstrando a inicialização segura com o relé em repouso e comutações a cada 5 segundos:

/**
 * ============================================================================
 * Projeto: Teste Básico de Chaveamento - Placa ESP32 1 Relé 30A (RB2556)
 * Autor: RoboBuilders (https://www.robobuilders.com.br)
 * Placa: esp32_relay_30a_x1_v1.1
 * ============================================================================
 */

#include <Arduino.h>

// Definição dos pinos oficiais da RB2556
const uint8_t PINO_RELE_30A = 16;  // Relé K1 de 30A na GPIO 16 (Active HIGH)
const uint8_t PINO_LED_STATUS = 5; // LED onboard na GPIO 5 (Active HIGH)

void setup() {
  // Inicialização segura: manter saídas em nível baixo antes de ativar os drivers
  digitalWrite(PINO_RELE_30A, LOW);
  digitalWrite(PINO_LED_STATUS, LOW);

  pinMode(PINO_RELE_30A, OUTPUT);
  pinMode(PINO_LED_STATUS, OUTPUT);

  // Inicializa comunicação serial para telemetria de bancada
  Serial.begin(115200);
  delay(1000);

  Serial.println("\n[RB2556] Sistema Inicializado com Sucesso!");
  Serial.println("[RB2556] Relé K1 (GPIO 16) configurado em modo de repouso (Aberto).");
}

void loop() {
  // 1. Acionar o relé de 30A e acender o LED indicador
  Serial.println("\n>>> [AÇÃO] Acionando Relé K1 (30A) - Contato Fechado...");
  digitalWrite(PINO_RELE_30A, HIGH);  // Fecha o contato COM com NO
  digitalWrite(PINO_LED_STATUS, HIGH); // Liga o LED azul onboard
  delay(5000);                         // Mantém a carga ligada por 5 segundos

  // 2. Desligar o relé de 30A e apagar o LED indicador
  Serial.println(">>> [AÇÃO] Desligando Relé K1 (30A) - Contato Aberto...");
  digitalWrite(PINO_RELE_30A, LOW);   // Abre o contato COM com NO
  digitalWrite(PINO_LED_STATUS, LOW);  // Desliga o LED azul onboard
  delay(5000);                         // Mantém a carga desligada por 5 segundos
}

5.3 Exemplo 2: Acionamento Não-Bloqueante com Leitura de Botão e Temporizador

Em aplicações reais de automação, utilizar funções bloqueantes como delay() interrompe a execução de tarefas críticas e o atendimento de conexões de rede. O exemplo a seguir emprega a função millis() para ler o botão físico onboard (GPIO 0) com filtro de vibração mecânica (debounce) e desligar a carga automaticamente após um período configurável:

/**
 * ============================================================================
 * Projeto: Acionamento Temporizado com Debounce por millis() - RB2556
 * Autor: RoboBuilders (https://www.robobuilders.com.br)
 * ============================================================================
 */

#include <Arduino.h>

const uint8_t PINO_RELE     = 16; // Relé de 30A na GPIO 16
const uint8_t PINO_LED      = 5;  // LED indicador na GPIO 5
const uint8_t PINO_BOTAO    = 0;  // Botão físico BOOT na GPIO 0 (Active LOW)

// Configuração do temporizador automático
const unsigned long TEMPO_LIGADO_MS = 10000; // Mantém ligado por 10 segundos
const unsigned long TEMPO_DEBOUNCE_MS = 50;  // Filtro de ruído mecânico do botão

bool estadoRele = false;
unsigned long tempoInicioAcionamento = 0;
int ultimoEstadoBotao = HIGH;
unsigned long ultimoTempoDebounce = 0;

void alternarRele(bool ligar) {
  estadoRele = ligar;
  digitalWrite(PINO_RELE, estadoRele ? HIGH : LOW);
  digitalWrite(PINO_LED, estadoRele ? HIGH : LOW);

  if (estadoRele) {
    tempoInicioAcionamento = millis();
    Serial.println("[TIMER] Relé LIGADO! Desligará automaticamente em 10 segundos.");
  } else {
    Serial.println("[TIMER] Relé DESLIGADO.");
  }
}

void setup() {
  Serial.begin(115200);

  digitalWrite(PINO_RELE, LOW);
  digitalWrite(PINO_LED, LOW);
  pinMode(PINO_RELE, OUTPUT);
  pinMode(PINO_LED, OUTPUT);

  // O botão onboard precisa do resistor pull-up interno ativado
  pinMode(PINO_BOTAO, INPUT_PULLUP);

  Serial.println("\n[RB2556] Sistema pronto. Pressione o botão BOOT para acionar.");
}

void loop() {
  int leituraAtual = digitalRead(PINO_BOTAO);

  // Filtro de ruído mecânico (debounce) do botão
  if (leituraAtual != ultimoEstadoBotao) {
    ultimoTempoDebounce = millis();
  }

  if ((millis() - ultimoTempoDebounce) > TEMPO_DEBOUNCE_MS) {
    // Detecta a transição de solto (HIGH) para pressionado (LOW)
    if (leituraAtual == LOW && !estadoRele) {
      alternarRele(true);
    }
  }
  ultimoEstadoBotao = leituraAtual;

  // Verificação temporizada não-bloqueante de desligamento
  if (estadoRele && (millis() - tempoInicioAcionamento >= TEMPO_LIGADO_MS)) {
    Serial.println("[TIMER] Tempo limite atingido.");
    alternarRele(false);
  }
}

5.4 Exemplo 3: Servidor Web Autônomo (SoftAP) com API RESTful JSON

Este sketch configura a placa RB2556 para gerar sua própria rede Wi-Fi ROBOBUILDERS-RB2556 sem necessitar de roteador externo. Um servidor HTTP embutido responde a requisições de controle e telemetria através de endpoints RESTful com objetos JSON estruturados:

/**
 * ============================================================================
 * Projeto: Servidor Web SoftAP com API RESTful JSON - RB2556
 * Autor: RoboBuilders (https://www.robobuilders.com.br)
 * ============================================================================
 */

#include <Arduino.h>
#include <WiFi.h>
#include <WebServer.h>
#include <ArduinoJson.h>

const uint8_t PINO_RELE = 16;
const uint8_t PINO_LED  = 5;

// Configuração do Ponto de Acesso Wi-Fi
const char* SSID_AP = "ROBOBUILDERS-RB2556";
const char* PASS_AP = ""; // Rede aberta (ou adicione senha de no mínimo 8 dígitos)

WebServer servidor(80);

void enviarJSON(int codigoHTTP, const JsonDocument& doc) {
  String resposta;
  serializeJson(doc, resposta);
  servidor.send(codigoHTTP, "application/json", resposta);
}

// Endpoint GET /api/status - Retorna telemetria da placa
void handleStatus() {
  StaticJsonDocument<256> doc;
  doc["placa"] = "RB2556";
  doc["hardware"] = "esp32_relay_30a_x1_v1.1";
  doc["uptime_s"] = millis() / 1000;
  doc["rele_pin16"] = digitalRead(PINO_RELE) == HIGH ? 1 : 0;
  doc["led_pin5"]   = digitalRead(PINO_LED) == HIGH ? 1 : 0;
  enviarJSON(200, doc);
}

// Endpoint GET /api/toggle?pin=16 - Inverte o estado do relé
void handleToggle() {
  if (!servidor.hasArg("pin")) {
    StaticJsonDocument<128> erro;
    erro["erro"] = "Parametro 'pin' obrigatorio";
    enviarJSON(400, erro);
    return;
  }

  int pino = servidor.arg("pin").toInt();
  if (pino == 16) {
    int novoEstado = !digitalRead(PINO_RELE);
    digitalWrite(PINO_RELE, novoEstado);
    digitalWrite(PINO_LED, novoEstado);

    StaticJsonDocument<128> doc;
    doc["pin"] = pino;
    doc["estado"] = novoEstado;
    enviarJSON(200, doc);
  } else {
    StaticJsonDocument<128> erro;
    erro["erro"] = "Pino invalido. Utilize pin=16";
    enviarJSON(404, erro);
  }
}

// Endpoint GET /api/pulse?pin=16&ms=2000 - Dispara pulso temporizado
void handlePulse() {
  int duracaoMs = servidor.hasArg("ms") ? servidor.arg("ms").toInt() : 1000;
  
  digitalWrite(PINO_RELE, HIGH);
  digitalWrite(PINO_LED, HIGH);
  delay(duracaoMs); // Para pulsos rápidos de bancada
  digitalWrite(PINO_RELE, LOW);
  digitalWrite(PINO_LED, LOW);

  StaticJsonDocument<128> doc;
  doc["pin"] = 16;
  doc["pulso_executado_ms"] = duracaoMs;
  enviarJSON(200, doc);
}

void setup() {
  Serial.begin(115200);

  digitalWrite(PINO_RELE, LOW);
  digitalWrite(PINO_LED, LOW);
  pinMode(PINO_RELE, OUTPUT);
  pinMode(PINO_LED, OUTPUT);

  // Inicializa o modo Ponto de Acesso (Access Point)
  WiFi.mode(WIFI_AP);
  WiFi.softAP(SSID_AP, PASS_AP);

  Serial.println("\n[RB2556] Ponto de Acesso Wi-Fi Iniciado!");
  Serial.print("[RB2556] SSID: ");
  Serial.println(SSID_AP);
  Serial.print("[RB2556] Endereço IP do Servidor: http://");
  Serial.println(WiFi.softAPIP());

  // Registro das rotas da API REST
  servidor.on("/api/status", HTTP_GET, handleStatus);
  servidor.on("/api/toggle", HTTP_GET, handleToggle);
  servidor.on("/api/pulse", HTTP_GET, handlePulse);

  servidor.begin();
  Serial.println("[RB2556] Servidor HTTP REST ativo na porta 80.");
}

void loop() {
  servidor.handleClient();
}

6. Exemplos de Aplicação Prática

6.1 Automação de Motobomba Predial com Sensor de Nível Líquido

Em instalações prediais de poço artesiano ou reservatório inferior, a placa RB2556 aciona diretamente a motobomba monofásica de 220V / 2 HP através da GPIO 16. Um sensor boia de nível elétrico de contato seco tipo reed switch é conectado à GPIO 34 (com resistor de pull-up externo de 10 kΩ ligado a 3.3V).

  • Quando o reservatório atinge o nível mínimo, a interrupção externa do ESP32 detecta o fechamento do circuito e ativa o relé de 30A.
  • A telemetria de vazão e tempo acumulado de funcionamento do motor é transmitida via Wi-Fi para o sistema central da edificação.

6.2 Controle Térmico Proporcional de Caldeira / Resistência Elétrica

Em sistemas de aquecimento onde uma resistência tubular blindada de 4.000W em 220V AC (~18A contínuos) mantém fluidos aquecidos, um sensor digital de temperatura DS18B20 à prova d’água é acoplado à GPIO 4 com resistor pull-up de 4,7 kΩ. O microcontrolador processa uma rotina de controle térmico com histerese:

  • Se a temperatura estiver abaixo de 60°C, a GPIO 16 fecha os contatos do relé SONGLE.
  • Ao atingir 65°C, a placa desenergiza a resistência, mantendo a temperatura uniforme e evitando oscilações rápidas que diminuam a vida útil do elemento de comutação.

7. Solução de Problemas (Troubleshooting)

A tabela abaixo resume as ocorrências mais comuns em bancada e campo com suas respectivas causas e soluções práticas:

Sintoma ObservadoCausa Mais ProvávelAção Corretiva Recomendada
O ESP32 reseta espontaneamente ao atracar o reléQueda abrupta na tensão de alimentação durante a partida da bobina do reléUtilizar fonte DC de bancada de pelo menos 12V / 1A. Se alimentar via Micro-USB, assegurar que a porta ou fonte forneça 5V reais sem quedas sob 1A.
O ESP32 trava ou reseta no momento em que a carga de 220V desligaRuído eletromagnético transitório de alta frequência gerado pela força contra-eletromotriz da carga indutivaInstalar circuito Snubber RC (100 Ω\Omega + 100 nF / 630V) e Varistor MOV de 275V em paralelo com a carga. Afastar cabos de sinal do cabeamento de potência.
Falha no upload do firmware (Failed to connect to ESP32: Timed out)Pinos TX/RX invertidos ou o microcontrolador não entrou no modo ROM Bootloader1. Inverter os cabos: conectar TX do gravador no RX (GPIO 3) da placa e RX do gravador no TX (GPIO 1).
2. Garantir que o pino GND do gravador está ligado ao GND da placa.
3. Manter o botão BOOT (GPIO 0) pressionado durante o início do upload.
O LED onboard (GPIO 5) acende, mas o relé não atracaTensão de alimentação insuficiente para magnetizar a bobina do relé de 5VVerificar se a tensão no circuito do regulador está fornecendo 5.0V estáveis. Fontes abaixo de 7V no borne DC podem desestabilizar a bobina de 5V do relé SONGLE.
Aquecimento anormal no borne verde do reléParafuso frouxo, condutor com bitola inferior a 4,0 mm² ou ausência de terminal ilhósDesligar a energia imediatamente, crimpar terminais ilhós tubulares nos fios e reapertar os parafusos do borne com torque firme.
Leituras analógicas instáveis na GPIO 34 ou GPIO 35Ausência de resistor pull-up ou ruído no barramento ADC1As GPIOs 34 e 35 são Input-Only e não têm resistores internos. Adicione resistor externo de 10 kΩ e utilize capacitor cerâmico de 100 nF entre o pino analógico e o GND.

Projetos

Para quem deseja utilizar esta placa imediatamente em campo sem necessidade de escrever código do zero, a equipe da RoboBuilders desenvolveu um projeto de código aberto completo com firmware profissional pronto para gravação:

  • Painel Web de Controle para Placa ESP32 com 1 Relé de 30A (RB2556): Um guia passo a passo detalhado que ensina como compilar e utilizar o firmware oficial de supervisão da placa RB2556. O firmware gera automaticamente um Ponto de Acesso Wi-Fi com Portal Captivo, interface web responsiva em tema escuro (Dark Mode), botões de teste rápido com pulsos temporizados, monitor do botão de usuário onboard, comutação global de GPIOs e uma API RESTful JSON pronta para integração com Home Assistant, Node-RED e supervisórios industriais.

Conclusão

A placa RoboBuilders RB2556 consolida uma plataforma industrial compacta e extremamente robusta para controle de cargas monofásicas pesadas com o consagrado SoC ESP32-WROOM-32E. Através deste manual, você aprendeu:

  • A arquitetura elétrica do módulo esp32_relay_30a_x1_v1.1, destacando o optoacoplador de isolamento e a capacidade de comutação do relé SONGLE SLA de 30A.
  • O mapeamento oficial de periféricos, com o relé atrelado à GPIO 16 (Active HIGH), LED na GPIO 5, botão de boot na GPIO 0 e barramento livre com 17 GPIOs digitais e 2 analógicas.
  • O dimensionamento e instalação segura de condutores e elementos de proteção segundo a NBR 5410, incluindo terminais ilhós, disjuntores e filtros Snubber RC contra ruído eletromagnético.
  • O procedimento de gravação do microcontrolador via módulo externo USB-Serial utilizando o modo ROM Bootloader.
  • Exemplos práticos em linguagem C++ para Arduino IDE e PlatformIO, cobrindo rotinas básicas, acionamentos temporizados sem bloqueio por millis() e arquitetura de servidor web Ponto de Acesso com API RESTful JSON.

Solução de problemas

Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o Manual da Placa ESP32 com 1 Relé de 30A: Pinout, Ligação e Programação Completa 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.