Placa Desenvolvimento Wi-Fi IoT ESP32 2 Canais Relé 10A RB2558: Manual Técnico Completo

Placa ESP32 2 Canais Relé 10A RB2558 — manual técnico completo

Introdução

Neste manual, será apresentado como instalar, configurar e utilizar a Placa Desenvolvimento Wi-Fi IoT ESP32 2 Canais Relé 10A (RB2558). Se desejar adquirir este produto, clique aqui.

A placa controladora RB2558 (identificada na engenharia pelos códigos ESP32_Relay_X2 e 303E32DC210) é uma plataforma compacta de automação residencial, predial e industrial que integra o microcontrolador ESP32-WROOM-32 / ESP32-WROOM-32E (Dual-Core 32 bits até 240 MHz com Wi-Fi e Bluetooth integrados) a 2 canais independentes de relé eletromecânico selado SONGLE SRD-05VDC-SL-C de 10A. Projetada para substituir montagens frágeis em protoboards por uma única placa de circuito impresso de padrão industrial com rasgo fresado de isolamento elétrico, a RB2558 incorpora estágio regulador step-down para alimentação direta de 7V a 30V DC (ou entrada dedicada de 5V DC) via borne parafusável e exposição completa das portas GPIO para acoplamento de sensores e barramentos externos.


Especificações técnicas

Principais especificações

ParâmetroEspecificação Técnica
Identificador ComercialPlaca Desenvolvimento Wi-Fi IoT ESP32 2 Canais Relé 10A (SKU: RB2558)
Modelo da Placa Base / RevisãoESP32_Relay_X2 (303E32DC210)
Microcontrolador PrincipalESP32-WROOM-32 / ESP32-WROOM-32E (Espressif Systems)
Arquitetura do ProcessadorDual-Core 32-bit Xtensa® LX6 operando a até 240 MHz
Memória Flash Integrada4 MB (SPI Flash)
Memória SRAM Interna520 KB
Conectividade Sem FioWi-Fi 802.11 b/g/n (2,4 GHz) e Bluetooth v4.2 BR/EDR + BLE
Tensão de Entrada Ampla (Borne VCC)7 VDC a 30 VDC (conversor regulador step-down integrado)
Tensão de Entrada Direta (Borne 5V)5 VDC regulados (terminal separado no borne de 3 vias)
Tensão Lógica de Operação3,3 VDC (regulador linear AMS1117-3.3 onboard)
Relés de Potência Onboard2 Canais Independentes SONGLE SRD-05VDC-SL-C (bobina de 5V DC)
Pinos de Controle dos RelésGPIO 16 (Relé 1 — K1) e GPIO 17 (Relé 2 — K2), lógica Active HIGH
Capacidade dos Contatos (AC)10A em 250V AC / 10A em 125V AC por canal (carga resistiva)
Capacidade dos Contatos (DC)10A em 30V DC / 10A em 28V DC por canal (carga resistiva)
Configuração dos Contatos2 Blocos SPDT independentes: Canal 1 (NC1, COM1, NO1) e Canal 2 (NC2, COM2, NO2)
Sinalização Visual OnboardLED de Alimentação + LED Programável no GPIO 23 + LEDs individuais dos relés K1 e K2
Interface de Gravação (P4)Barra UART de 6 pinos passo 2,54 mm (IO0, GND, GND, RX, TX, 5V) — sem porta USB onboard
Botões Físicos OnboardEN (Reset de hardware) e IO0 (Bootloader / Botão de usuário no GPIO 0)
Pinos de GPIO Expandidos16 GPIOs I/O bidirecionais livres + 2 entradas puras (GPIO 34 e GPIO 35)
Dimensões Físicas (C×L×AC \times L \times A)~74,3 × 48,1 × 19 mm (4 furos de fixação nos cantos, massa ~40 g)

Características elétricas e operacionais

A placa RB2558 incorpora um conversor abaixador chaveado (buck) composto por indutor SMD blindado (470), diodo retificador Schottky de comutação rápida e capacitores eletrolíticos de filtragem, seguido por um regulador linear AMS1117-3.3 dedicado ao barramento lógico do ESP32. Esse arranjo em duplo estágio mantém o microcontrolador estável mesmo durante o chaveamento simultâneo das duas bobinas e picos de transmissão de rádio Wi-Fi.

  • Consumo de corrente em repouso (Wi-Fi ativo, ambos os relés desligados): ~40 mA a 70 mA em 5V (~25 mA a 40 mA em 12V DC);
  • Consumo nominal por bobina de relé: ~70 mA a 80 mA em 5V DC por canal acionado;
  • Consumo com os 2 relés atracados simultaneamente + Wi-Fi em transmissão: ~200 mA a 250 mA em 5V (~95 mA a 130 mA em 12V DC);
  • Corrente máxima por pino GPIO (expansão): 12 mA recomendados (limite absoluto de 40 mA em 3,3V);
  • Tempo de comutação mecânica dos relés: fechamento (operate time) em ~10 ms e abertura (release time) em ~5 ms;
  • Isolamento físico na PCB: rasgo fresado no circuito impresso entre o módulo de radiofrequência ESP32 e o bloco dos relés de potência para mitigação de ruído eletromagnético e aumento da distância de escoamento (creepage);
  • Temperatura de operação: -20 °C a +70 °C (umidade relativa de 5% a 90% sem condensação);
  • Vida útil dos contatos: mínimo de 10.000.000 de manobras mecânicas em vazio e 100.000 ciclos sob carga resistiva nominal.

Descrição do produto

O que é a Placa Desenvolvimento Wi-Fi IoT ESP32 2 Canais Relé 10A (RB2558)?

A Placa ESP32 com 2 Relés RB2558 (ESP32_Relay_X2 / 303E32DC210) é uma controladora embarcada all-in-one que unifica processamento de 32 bits, conectividade sem fio Wi-Fi/BLE e duplo estágio de chaveamento eletromecânico em um único PCB compacto de dupla face. Cada canal de saída dispõe de transistor driver dedicado, diodo de roda-livre (flyback) em antiparalelo com a bobina de 5V, LED indicador de atracamento e borne parafusável de três vias com contatos secos reversores Comum (COM), Normalmente Aberto (NO) e Normalmente Fechado (NC).

Para máxima versatilidade em projetos de Internet das Coisas e telemetria industrial, a placa posiciona a antena impressa do módulo ESP32-WROOM-32E na extremidade oposta aos bornes de carga — minimizando interferências de RF — e expõe duas fileiras laterais de furos metalizados com passo de 2,54 mm (identificados na face inferior da placa), permitindo acoplar sensores digitais, transdutores analógicos, displays I2C/SPI e interfaces RS-485. De fábrica, a placa vem gravada com uma rotina inicial de autoteste das bobinas: ao ser energizada pela primeira vez, ela liga e desliga os relés de forma ininterrupta (comutação cíclica contínua), interrompendo esse ciclo imediatamente quando colocada em modo de gravação serial ao manter pressionado o botão IO0 (BOOT) durante a energização ou reset.

Para que serve?

  • Comutação independente ou intertravada de 2 circuitos elétricos AC ou DC de até 10A (iluminação dupla, fechaduras eletromagnéticas + portão eletrônico, válvulas solenoides de irrigação, ventiladores, exaustores e aquecedores compactos);
  • Desenvolvimento de controladores IoT autônomos compatíveis com Arduino IDE, PlatformIO, ESP-IDF, ESPHome, Tasmota, Home Assistant, Node-RED e brokers MQTT/HTTP REST;
  • Automação embarcada com sensoriamento local, utilizando as 16 GPIOs bidirecionais livres e 2 entradas analógicas puras para monitorar temperatura, umidade, fim de curso, nível de reservatórios e botões de parede em paralelo com os relés.

Por que devo usar?

  • Duplo canal independente com isolamento físico na PCB: integra dois relés de 10A com contatos secos reversores (NO, COM, NC) e rasgo fresado de isolamento entre a seção de potência e o módulo Wi-Fi/BLE;
  • Alimentação industrial flexível (7V a 30V DC ou 5V DC): aceita fontes chaveadas padrão de painéis elétricos de 12V ou 24V DC no borne VCC sem necessidade de reguladores externos adicionais;
  • Barramento GPIO integralmente acessível e botões dedicados IO0 + EN: diferentemente de módulos simplificados de 1 botão, conta com chaves táteis independentes para Reset (EN) e Boot/Usuário (IO0), agilizando gravações seriais e rotinas de diagnóstico.

Quando devo usar?

A placa RB2558 é ideal quando o projeto exige o acionamento independente de 2 cargas elétricas de até 10A (ou o controle reversível de um atuador DC/motor de persiana usando par de relés SPDT) aliado a processamento Wi-Fi/Bluetooth e expansão de sensores em espaço reduzido.

Quando avaliar outras soluções do catálogo RoboBuilders:

  • Apenas 1 carga de até 10A com alimentação rápida via cabo Micro-USB: opte pela Placa ESP32 com 1 Relé RB2557;
  • 2 cargas pesadas acima de 10A ou motores indutivos de partida severa (até 30A por canal): utilize a Placa ESP32 com 2 Relés de 30A RB2555 (com isolamento por optoacopladores e relés SLA-05VDC-SL-C) ou comute a bobina de contatores auxiliares externos através da RB2558;
  • Quadros multicanais com até 8 circuitos de 10A: utilize a Placa ESP32 com 8 Relés RB2559;
  • Chaveamento silencioso em alta frequência ou controle proporcional PWM: utilize relés de estado sólido (SSR) ou módulos MOSFET, pois relés eletromecânicos possuem limite mecânico de comutação.

Pinout e diagrama de entradas/saídas

A placa RB2558 organiza seus conectores em bornes de parafuso para alimentação e potência, um barramento serial P4 de 6 pinos para gravação UART e duas fileiras laterais de GPIOs (cuja serigrafia detalhada encontra-se impressa no verso da PCB):

Terminal / PeriféricoIdentificação na PlacaPino ESP32Direção / TipoNível Elétrico / LógicaFunção Detalhada
Alimentação AmplaBorne VCC—Entrada DC7 V a 30 V DCEntrada principal conectada ao conversor step-down
Terra de AlimentaçãoBorne GND—Referência0 VTerra comum da fonte DC e da lógica da placa
Alimentação 5VBorne 5V—Entrada DC5 V DC reguladosEntrada alternativa direta de 5V (não usar junto com VCC)
Relé 1 (K1)Bornes NC1 / COM1 / NO1GPIO 16Saída DigitalActive HIGH (3,3V liga)Aciona a bobina do Relé 1 (borne externo superior)
Relé 2 (K2)Bornes NC2 / COM2 / NO2GPIO 17Saída DigitalActive HIGH (3,3V liga)Aciona a bobina do Relé 2 (borne interno superior)
LED OnboardLED de StatusGPIO 23Saída DigitalActive HIGH (3,3V acende)Sinalização luminosa programável pelo usuário
Botão Boot / UsuárioChave tátil IO0GPIO 0Entrada Pull-UpActive LOW (0V pressionado)Seleção de modo Download Bootloader e entrada tátil
Botão ResetChave tátil ENCHIP_PU (EN)Reset HardwareActive LOWReinicialização física imediata do microcontrolador
Header Serial P4IO0 | GND | GND | RX | TX | 5VGPIO 3 (RX) / GPIO 1 (TX)UART0 TTLNível lógico 3,3 VGravação de firmware e monitor serial via conversor externo
Grade de GPIOs LivresFileiras laterais 2,54 mm2, 4, 5, 12, 13, 14, 15, 18, 19, 21, 22, 25, 26, 27, 32, 33I/O Configurável3,3 V TTLBarramentos I2C (21/22), SPI, PWM, ADC e entradas/saídas digitais
Entradas PurasFileiras laterais 2,54 mmGPIO 34 e GPIO 35Input-Only (ADC1)0 V a 3,3 VApenas leitura digital/analógica (sem pull-up/pull-down interno)

💡 Dica de Hardware: O conector de gravação P4 de 6 pinos (IO0, GND, GND, RX, TX, 5V) não segue a ordem direta de um adaptador FTDI padrão. Sempre utilize cabos jumpers fêmea-fêmea individuais conferindo a serigrafia de cada pino antes de energizar.


Como fazer a ligação

Requisitos de instalação e alimentação

  1. Escolha exclusiva da fonte DC (Borne de 3 vias VCC / GND / 5V): alimente a placa aplicando 7V a 30V DC (recomendado: fonte chaveada estabilizada de 12V DC / 1A ou 24V DC / 1A) entre os bornes VCC e GND, ou aplicando 5V DC / 1A estabilizados entre 5V e GND. Nunca conecte fontes nos terminais VCC e 5V ao mesmo tempo.
  2. Dimensionamento dos cabos de carga: para cargas em 127V/220V AC ou até 30V DC com correntes até 10A por canal, utilize condutores flexíveis de cobre de 1,5 mm² com terminais tubulares tipo ilhós prensados, garantindo contato firme nos parafusos dos bornes COM, NO e NC.
  3. Derivação de Fase para os dois canais: quando ambos os relés comandarem equipamentos alimentados pelo mesmo circuito monofásico, proteja a linha com disjuntor compatível (máx. 10A por canal) e derive o condutor Fase (L) para os terminais comuns COM1 e COM2, levando o Neutro (N) diretamente às cargas sem passar pela placa.

Diagrama de ligação elétrica

O esquema a seguir demonstra a montagem elétrica completa: alimentação contínua de 12V DC nos bornes VCC e GND da placa RB2558 e acionamento independente de duas cargas em corrente alternada (Carga 1 no Canal K1 / GPIO 16 e Carga 2 no Canal K2 / GPIO 17), seccionando exclusivamente o condutor Fase (L) através dos contatos normalmente abertos NO1 e NO2, enquanto o Neutro (N) segue diretamente da rede elétrica para as cargas:

Diagrama de ligação elétrica da Placa ESP32 com 2 Relés RB2558

Tabela de conexões dos terminais

A tabela abaixo detalha o mapeamento ponto a ponto sincronizado com o diagrama elétrico e o padrão de cores da norma NBR 5410:

Terminal de OrigemTerminal de Destino (RB2558 / Cargas)Cor Sugerida do FioTipo de SinalObservação Técnica
Fonte 12V DC (+)Borne VCC (Placa RB2558)VermelhoAlimentação DC (+12V)Aceita faixa contínua de 7V a 30V DC
Fonte 12V DC (-)Borne GND (Placa RB2558)PretoTerra comum (0V DC)Referência negativa da eletrônica e fonte
Rede AC (Fase - L)Bornes COM1 e COM2 (Placa RB2558)Marrom (ou Preto)Fase AC (127V / 220V)Entra nos terminais Comuns dos relés K1 e K2
Borne NO1 (Relé K1)Terminal 1 da Carga 1 (Iluminação)Vermelho (ou Cinza)Retorno Chaveado K1Conduz a Fase quando GPIO 16 = HIGH
Borne NO2 (Relé K2)Terminal 1 da Carga 2 (Exaustor)Laranja (ou Amarelo)Retorno Chaveado K2Conduz a Fase quando GPIO 17 = HIGH
Rede AC (Neutro - N)Terminal 2 das Cargas 1 e 2Azul ClaroNeutro ACVai direto da rede para as cargas (não entra na placa)
Bornes NC1, NC2 e 5VDeixar sem conexão—Terminais LivresNC usados apenas em lógica NF; 5V livre ao usar VCC

💡 Dica para Cargas DC (12V / 24V): Os contatos dos relés K1 e K2 são contatos secos (eletricamente isolados da alimentação da placa). Você pode chavear perfeitamente uma fita LED 12V no Canal 1 e uma fechadura 12V DC ou carga 220V AC no Canal 2 de maneira 100% independente.

Cuidados e observações de segurança

💡 Dica: Ao acionar solenoides, fechaduras eletromagnéticas ou motores DC nos contatos dos relés, instale um diodo retificador (1N4007) em antiparalelo sobre os terminais da carga DC. Para cargas indutivas AC (exaustores, contatores e pequenos motores), instale um filtro Snubber RC (100 Ω + 100 nF / 400V AC) em paralelo com os bornes COM e NO.

⚠️ Atenção: Todos os pinos de dados e programação do ESP32 operam exclusivamente em 3,3V. Ao conectar um conversor USB-Serial externo no barramento P4, certifique-se de que o jumper de nível lógico TX/RX do conversor esteja ajustado em 3,3V (mesmo que você utilize a linha de 5V apenas para alimentar o pino 5V da placa em bancada).

⛔ Perigo: Tensões de rede elétrica (127V / 220V AC) oferecem risco de choque elétrico fatal. Nunca conecte o conversor USB-Serial ao computador enquanto houver cabos de rede AC energizados nos bornes dos relés. Desligue sempre o disjuntor geral antes de parafusar condutores ou manusear a placa.


Como usar

Guia de operação passo a passo

Ao energizar uma placa RB2558 nova pela primeira vez, você notará que os relés ficam ligando e desligando de forma ininterrupta. Esse comportamento corresponde ao programa básico de teste gravado de fábrica na memória Flash. Assim que a placa é colocada no Modo de Gravação (Download Bootloader) mantendo o botão IO0 (BOOT) pressionado ao ligar a energia (ou ao pulsar o botão EN), o ciclo de batimento dos relés cessa imediatamente e o microcontrolador aguarda o recebimento do seu novo código.

Como a placa RB2558 (ESP32_Relay_X2) não possui conversor USB-Serial soldado na PCB, a programação é realizada através de um módulo conversor USB-Serial externo (CP2102, FT232RL, CH340 ou PL2303) ligado ao barramento P4 de 6 pinos:

  1. Conexão do conversor USB-Serial ao Header P4 (com tudo desligado):
    • Ligue o GND do conversor a um dos pinos GND do conector P4 da placa RB2558 (referência obrigatória);
    • Ligue o TXD (Transmissão) do conversor ao pino RX (RXD0 / GPIO 3) da placa (ligação cruzada);
    • Ligue o RXD (Recepção) do conversor ao pino TX (TXD0 / GPIO 1) da placa (ligação cruzada);
    • Ligue o pino 5V do conversor ao pino 5V do conector P4 para energizar a placa e os relés durante o teste de bancada (com o nível lógico serial do conversor configurado em 3,3V).
  2. Entrada no Modo de Gravação (Download Bootloader):
    • Pressione e mantenha pressionado o botão IO0 (BOOT / GPIO 0) na placa RB2558 (ou feche temporariamente um jumper entre os pinos IO0 e GND do header P4);
    • Conecte o conversor USB na porta do computador (ou, se a placa já estiver energizada com os relés batendo, dê um clique rápido no botão EN (Reset) enquanto mantém IO0 pressionado);
    • Os relés pararão de comutar imediatamente. Aguarde cerca de 2 segundos e solte o botão IO0 — o ESP32 estará pronto para receber a gravação via serial.
  3. Compilação e Upload do Firmware:
    • Na Arduino IDE, selecione Ferramentas > Placa > ESP32 Arduino > ESP32 Dev Module, escolha a porta COM do conversor e clique em Carregar (Upload);
    • No PlatformIO CLI, execute pio run --target upload (ou pio run -t upload --upload-port COM3).
  4. Reinicialização e Execução Normal:
    • Assim que o esptool exibir [SUCCESS], remova eventual jumper do pino IO0 e pressione uma vez o botão EN (Reset) (ou faça um ciclo de energia Power Cycle) para iniciar o novo programa gravado.

Modos de operação e ajustes

No ambiente PlatformIO, utilize a seguinte configuração padrão no arquivo platformio.ini para compilar e gravar seus projetos na RB2558:

; Configuração PlatformIO para a placa RB2558 (ESP32_Relay_X2)
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 460800

Principais comandos via terminal PlatformIO Core (CLI):

pio run                                 # Compilar o firmware
pio run -t upload                       # Gravar na porta detectada automaticamente
pio run -t upload --upload-port COM3    # Gravar especificando a porta COM manualmente
pio device monitor                      # Abrir o Monitor Serial (115200 bps)

Exemplos práticos de uso

Exemplo 1: Acionamento alternado dos 2 relés e LED com temporização não-bloqueante

Este código demonstra o controle independente do Relé 1 (GPIO 16), do Relé 2 (GPIO 17) e do LED Onboard (GPIO 23) alternando estados a cada 3 segundos com millis(), além de permitir o desligamento imediato de emergência pelo botão físico IO0 (GPIO 0):

#include <Arduino.h>

// Mapeamento oficial de hardware da placa ROBOBUILDERS RB2558 (ESP32_Relay_X2)
const int PINO_RELE_1 = 16;   // Canal 1 de potência K1 (NC1 / COM1 / NO1)
const int PINO_RELE_2 = 17;   // Canal 2 de potência K2 (NC2 / COM2 / NO2)
const int PINO_LED    = 23;   // LED onboard programável de status
const int PINO_BOOT   = 0;    // Botão físico IO0 / BOOT (Active LOW)

unsigned long ultimoTempo = 0;          // Armazena o instante da última comutação
const unsigned long INTERVALO_MS = 3000; // Intervalo de 3 segundos entre etapas
int etapaAtual = 0;                     // Máquina de estados: 0=Desligados, 1=K1, 2=K2, 3=Ambos

void aplicarEstados(bool k1, bool k2, bool led) {
  digitalWrite(PINO_RELE_1, k1 ? HIGH : LOW); // Atualiza a bobina do Relé 1
  digitalWrite(PINO_RELE_2, k2 ? HIGH : LOW); // Atualiza a bobina do Relé 2
  digitalWrite(PINO_LED,    led ? HIGH : LOW); // Atualiza o LED indicador GPIO 23
}

void setup() {
  Serial.begin(115200);                 // Inicializa telemetria serial em 115200 bps
  delay(500);
  Serial.println("--- RoboBuilders RB2558: Teste Não-Bloqueante 2 Relés ---");

  // Configura direção elétrica dos periféricos onboard
  pinMode(PINO_RELE_1, OUTPUT);
  pinMode(PINO_RELE_2, OUTPUT);
  pinMode(PINO_LED, OUTPUT);
  pinMode(PINO_BOOT, INPUT_PULLUP);     // Habilita pull-up para leitura da chave IO0

  // Garante estado inicial seguro (cargas desligadas no boot)
  aplicarEstados(false, false, false);
  Serial.println("Sistema pronto. Iniciando ciclo automático...");
}

void loop() {
  unsigned long agora = millis();       // Captura o tempo atual sem travar a CPU

  // Avança a máquina de estados a cada 3000 ms
  if (agora - ultimoTempo >= INTERVALO_MS) {
    ultimoTempo = agora;
    etapaAtual = (etapaAtual + 1) % 4;

    switch (etapaAtual) {
      case 0:
        aplicarEstados(false, false, false);
        Serial.println("[Etapa 0] K1: DESLIGADO | K2: DESLIGADO");
        break;
      case 1:
        aplicarEstados(true, false, true);
        Serial.println("[Etapa 1] K1: LIGADO    | K2: DESLIGADO");
        break;
      case 2:
        aplicarEstados(false, true, true);
        Serial.println("[Etapa 2] K1: DESLIGADO | K2: LIGADO");
        break;
      case 3:
        aplicarEstados(true, true, true);
        Serial.println("[Etapa 3] K1: LIGADO    | K2: LIGADO");
        break;
    }
  }

  // Leitura instantânea do botão IO0 para corte manual imediato
  if (digitalRead(PINO_BOOT) == LOW) {
    etapaAtual = 0;
    ultimoTempo = agora;
    aplicarEstados(false, false, false);
    Serial.println("[IO0 Pressionado] Ambos os relés foram desligados manualmente!");
    delay(250); // Debounce simples de botão tátil
  }
}

Exemplo 2: Servidor Web Wi-Fi autônomo com controle individual e pulso de 1s

Este exemplo cria um Ponto de Acesso Wi-Fi local (SoftAP) chamado RoboBuilders-RB2558. Ao conectar o celular ou computador e abrir http://192.168.4.1, um painel responsivo em modo escuro permite alternar individualmente os canais K1 e K2 ou disparar pulsos temporizados não-bloqueantes de 1 segundo:

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

const int PINO_RELE_1 = 16;   // Relé 1 (K1)
const int PINO_RELE_2 = 17;   // Relé 2 (K2)
const int PINO_LED    = 23;   // LED de Status

WebServer server(80);         // Instancia servidor HTTP na porta padrão 80

bool estadoK1 = false;
bool estadoK2 = false;
unsigned long fimPulsoK1 = 0; // Temporizador de desligamento automático do pulso K1
unsigned long fimPulsoK2 = 0; // Temporizador de desligamento automático do pulso K2

void atualizarHardware() {
  digitalWrite(PINO_RELE_1, estadoK1 ? HIGH : LOW);
  digitalWrite(PINO_RELE_2, estadoK2 ? HIGH : LOW);
  // Acende o LED onboard sempre que ao menos um canal estiver ativo
  digitalWrite(PINO_LED, (estadoK1 || estadoK2) ? HIGH : LOW);
}

void enviarPaginaWeb() {
  String html = "<!DOCTYPE html><html lang='pt-BR'><head>";
  html += "<meta charset='UTF-8'><meta name='viewport' content='width=device-width,initial-scale=1.0'>";
  html += "<title>Painel Web RB2558 - 2 Relés</title>";
  html += "<style>";
  html += "body{font-family:sans-serif;background:#121212;color:#f4f4f5;text-align:center;padding:1.5rem;margin:0;}";
  html += "h1{color:#fa634f;margin-bottom:0.25rem;} .sub{color:#a1a1aa;margin-bottom:1.5rem;}";
  html += ".grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;max-width:600px;margin:0 auto;}";
  html += ".card{background:#1e1e24;padding:1.25rem;border-radius:12px;border:1px solid #2e2e38;}";
  html += ".status{display:inline-block;padding:4px 10px;border-radius:999px;font-size:0.85rem;font-weight:bold;margin:8px 0 14px;}";
  html += ".st-on{background:#14532d;color:#4ade80;} .st-off{background:#27272a;color:#a1a1aa;}";
  html += ".btn{display:inline-block;padding:10px 16px;margin:4px;font-weight:bold;color:#fff;border-radius:8px;text-decoration:none;}";
  html += ".on{background:#22c55e;} .off{background:#ef4444;} .pulse{background:#3b82f6;}";
  html += "</style></head><body>";
  html += "<h1>RoboBuilders RB2558</h1>";
  html += "<p class='sub'>Controle Wi-Fi ESP32_Relay_X2 (2 Canais 10A)</p><div class='grid'>";

  // Card Canal 1 (GPIO 16)
  html += "<div class='card'><h2>Relé 1 (K1 - GPIO 16)</h2>";
  html += "<span class='status " + String(estadoK1 ? "st-on'>LIGADO" : "st-off'>DESLIGADO") + "</span><br>";
  html += "<a href='/toggle?ch=1' class='btn " + String(estadoK1 ? "off'>DESLIGAR" : "on'>LIGAR") + "</a>";
  html += "<a href='/pulso?ch=1' class='btn pulse'>PULSO 1s</a></div>";

  // Card Canal 2 (GPIO 17)
  html += "<div class='card'><h2>Relé 2 (K2 - GPIO 17)</h2>";
  html += "<span class='status " + String(estadoK2 ? "st-on'>LIGADO" : "st-off'>DESLIGADO") + "</span><br>";
  html += "<a href='/toggle?ch=2' class='btn " + String(estadoK2 ? "off'>DESLIGAR" : "on'>LIGAR") + "</a>";
  html += "<a href='/pulso?ch=2' class='btn pulse'>PULSO 1s</a></div>";

  html += "</div></body></html>";
  server.send(200, "text/html", html);
}

void setup() {
  Serial.begin(115200);
  pinMode(PINO_RELE_1, OUTPUT);
  pinMode(PINO_RELE_2, OUTPUT);
  pinMode(PINO_LED, OUTPUT);
  atualizarHardware();

  // Cria rede Wi-Fi autônoma (senha mínima de 8 caracteres)
  WiFi.softAP("RoboBuilders-RB2558", "12345678");
  Serial.print("Ponto de Acesso ativo! Acesse http://");
  Serial.println(WiFi.softAPIP());

  server.on("/", enviarPaginaWeb);

  server.on("/toggle", []() {
    int ch = server.arg("ch").toInt();
    if (ch == 1) { estadoK1 = !estadoK1; fimPulsoK1 = 0; }
    if (ch == 2) { estadoK2 = !estadoK2; fimPulsoK2 = 0; }
    atualizarHardware();
    server.sendHeader("Location", "/");
    server.send(303);
  });

  server.on("/pulso", []() {
    int ch = server.arg("ch").toInt();
    if (ch == 1) { estadoK1 = true; fimPulsoK1 = millis() + 1000; }
    if (ch == 2) { estadoK2 = true; fimPulsoK2 = millis() + 1000; }
    atualizarHardware();
    server.sendHeader("Location", "/");
    server.send(303);
  });

  server.begin();
}

void loop() {
  server.handleClient(); // Processa requisições HTTP dos navegadores conectados

  // Verifica expiração de pulsos temporizados sem bloquear o loop
  unsigned long agora = millis();
  if (fimPulsoK1 > 0 && agora >= fimPulsoK1) {
    fimPulsoK1 = 0;
    estadoK1 = false;
    atualizarHardware();
  }
  if (fimPulsoK2 > 0 && agora >= fimPulsoK2) {
    fimPulsoK2 = 0;
    estadoK2 = false;
    atualizarHardware();
  }
}

Projetos

Para implementar uma solução completa de controle e diagnóstico na sua placa RB2558 sem precisar desenvolver a interface do zero, confira o projeto oficial aberto disponibilizado pela RoboBuilders no GitHub:

  • Documentação da Placa e Projeto Painel Web ROBOBUILDERS RB2558 (GitHub): repositório completo contendo o código-fonte de um servidor Web Wi-Fi com Portal Captivo (ROBOBUILDERS-RB2558 em http://192.168.4.1), interface responsiva em modo escuro (Dark Mode), acionamento direto e por pulso temporizado para os relés K1 (GPIO 16) e K2 (GPIO 17), monitoramento de entradas em tempo real, configuração dinâmica das 16 GPIOs livres e endpoints de API REST JSON (/api/status, /api/toggle, /api/pulse, /api/mode e /api/all) prontos para compilar e gravar via PlatformIO.

Solução de problemas

SintomaCausa ProvávelSolução Recomendada
Os relés ficam ligando e desligando sem parar ao energizar a placa novaRotina de autoteste inicial gravada de fábrica na placaComportamento normal de fábrica. Para interromper o ciclo e gravar seu código, mantenha o botão IO0 (BOOT) pressionado ao energizar a placa (ou dê um clique em EN segurando IO0) para entrar em modo de gravação.
Erro Timed out waiting for packet header durante a tentativa de gravaçãoO ESP32 não entrou no modo Download BootloaderMantenha o botão IO0 pressionado, dê um clique rápido no botão EN (Reset) e solte o IO0 antes de disparar o comando de upload na IDE.
Sem comunicação serial nem resposta no Monitor SerialCabos TX e RX invertidos ou ordem incorreta no conector P4Confira a serigrafia do header P4 (IO0 | GND | GND | RX | TX | 5V): ligue TXD do conversor ao RX da placa, RXD ao TX e una os GNDs.
O ESP32 reinicia (Brownout Detector) ao acionar os 2 relés juntosQueda de tensão na linha de 5V por fonte fraca ou alimentação exclusiva pela USB do PCAo acionar K1 e K2 simultaneamente com Wi-Fi ativo, o pico supera 220 mA. Utilize fonte externa dedicada de 12V DC / 1A nos bornes VCC e GND.
O firmware antigo listava os relés nos GPIOs 25/26 e os canais não atracamCódigo escrito para revisões antigas de outras placas genéricasNa revisão oficial 303E32DC210 (RB2558), os relés estão mapeados estritamente em GPIO 16 (Relé 1) e GPIO 17 (Relé 2) em lógica Active HIGH.
Travamento esporádico do Wi-Fi ao desligar exaustores, solenoides ou contatores ACRuído eletromagnético e arco voltaico nos contatos mecânicosInstale um circuito Snubber RC (100 Ω + 100 nF / 400V AC) em paralelo com os bornes COM e NO de cada canal indutivo (ou diodo 1N4007 em cargas DC).

Conclusão

Este manual abordou de forma completa a Placa Desenvolvimento Wi-Fi IoT ESP32 2 Canais Relé 10A (RB2558), cobrindo desde suas especificações de engenharia até a instalação elétrica segura e programação embarcada:

  • Especificações técnicas: arquitetura do módulo ESP32-WROOM-32E na placa ESP32_Relay_X2 (303E32DC210), entrada dupla VCC (7V a 30V DC) ou 5V e dois relés SONGLE de 10A (250V AC / 30V DC);
  • Descrição e pinout: mapeamento exato dos canais K1 (GPIO 16) e K2 (GPIO 17), LED onboard (GPIO 23), chaves táteis IO0 e EN, barramento UART P4 e 18 GPIOs de expansão;
  • Como fazer a ligação: diagrama elétrico ponto a ponto com fiação ortogonal NBR 5410 para acionamento seguro de duas cargas AC independentes, tabela de conexões sincronizada e proteções contra transientes indutivos;
  • Como usar: comportamento do firmware inicial de autoteste, entrada no modo de gravação pressionando IO0 (BOOT), upload serial via conversor externo e exemplos completos em C++ para operação autônoma e servidor web Wi-Fi;
  • Projetos: projeto completo de Painel Web com Portal Captivo e API REST JSON disponível no repositório oficial da RoboBuilders no GitHub.

Combinando dois canais independentes de potência, alimentação industrial flexível e exposição integral das portas do ESP32 em dimensões reduzidas, a RB2558 consolida-se como uma solução versátil e confiável para desenvolvedores, integradores e projetos profissionais de automação e Internet das Coisas.

Solução de problemas

Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o Placa Desenvolvimento Wi-Fi IoT ESP32 2 Canais Relé 10A RB2558: Manual Técnico Completo 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.