O PUMP CTRL é um controlador inteligente de bomba d'água desenvolvido pela EZATA IO para automação industrial e residencial. Permite programar até 4 agendamentos independentes de liga/desliga com precisão de minuto, integração com Home Assistant via MQTT e configuração remota pelo smartphone.
| GPIO | Função | Componente | Observação |
|---|---|---|---|
| GPIO 8 | SDA | LCD I²C + DS3231 | Barramento I²C compartilhado |
| GPIO 9 | SCL | LCD I²C + DS3231 | Barramento I²C compartilhado |
| GPIO 2 | BTN_A | Botão Hora / Ligar | Pull-up interno, ativo em LOW |
| GPIO 3 | BTN_B | Botão Minuto / Desligar | Pull-up interno, ativo em LOW |
| GPIO 10 | RELAY | Módulo Relé | HIGH = motor ligado |
| 3.3V / GND | Alimentação | LCD, DS3231 | Módulos I²C em 3.3V |
O LCD PCF8574 pode ser alimentado em 5V, porém as linhas SDA/SCL devem operar em 3.3V para compatibilidade com o ESP32-C3. Utilize módulo com level shifter caso necessário.
Caso o módulo de relé opere com lógica invertida (LOW=ligado), altere a constante RELAY_ACTIVE_HIGH para 0 no firmware.
O display exibe permanentemente o estado do sistema em 4 linhas de 20 caracteres cada.
| Linha | Posição | Conteúdo | Descrição |
|---|---|---|---|
| L0 | Col 0–1 | P# | Número do programa exibido (P1 a P4) |
| L0 | Col 2 | * ou espaço | * = programa ativo | espaço = inativo |
| L0 | Col 3–4 | ON | Rótulo fixo do horário de ligar |
| L0 | Col 12–14 | OFF | Rótulo fixo do horário de desligar |
| L1 | Col 3–7 | HH:MM | Horário programado de LIGAR |
| L1 | Col 14–18 | HH:MM | Horário programado de DESLIGAR |
| L2 | Toda linha | Rótulos fixos | ENGINE / WIFI / TIME |
| L3 | Col 2–4 | ON / OFF | Estado atual do motor / relé |
| L3 | Col 9–11 | 000–100 / --- | Sinal Wi-Fi em % (--- = sem conexão) |
| L3 | Col 15–19 | HH:MM | Horário atual (NTP ou RTC) |
| P1* | Programa 1 — ATIVO |
| P2 | Programa 2 — INATIVO |
| P# piscando = seleção em curso |
| >ON | Editando horário de LIGAR |
| >OFF | Editando horário de DESLIGAR |
O cursor > pisca em 1 Hz durante a edição | |
Botão de horas. Usado para ligar o motor no modo normal e incrementar horas durante a programação.
Botão de minutos. Usado para desligar o motor no modo normal e incrementar minutos durante a programação.
| Modo | Botão A (curto) | Botão B (curto) | A longo (2s) | B longo (1s) | A+B simult. |
|---|---|---|---|---|---|
| IDLE | Liga motor | Desliga motor | Entra SEL_PRG | — | Entra PROG_ON |
| SEL_PRG | Cicla P1→P4 | — | Volta IDLE (salva) | Ativa/desativa prog. | Entra PROG_ON |
| PROG_ON | +1 hora (ON) | +1 min (ON) | — | — | Avança PROG_OFF |
| PROG_OFF | +1 hora (OFF) | +1 min (OFF) | — | — | Salva e volta IDLE |
Manter o Botão A ou B pressionado por mais de 700 ms ativa o incremento automático a cada 80 ms. Disponível apenas nos modos PROG_ON e PROG_OFF.
O acionamento manual do motor pelos botões (ligar/desligar) não altera a programação agendada em andamento. Os agendamentos continuam funcionando normalmente.
O PUMP CTRL mantém um ponto de acesso Wi-Fi permanente que permite configurar todos os parâmetros do sistema sem necessidade de cabo USB ou software especial.
| Seção | Campo | Descrição | Reinicia? |
|---|---|---|---|
| Rede WiFi | SSID | Nome da rede Wi-Fi local | SIM |
| Senha | Senha da rede Wi-Fi (campo em branco = mantém atual) | SIM | |
| MQTT | Host / IP | Endereço do broker MQTT | SIM |
| Porta | Porta TCP do broker (padrão: 1883) | SIM | |
| Usuário | Usuário de autenticação MQTT | SIM | |
| Senha MQTT | Senha MQTT (campo em branco = mantém atual) | SIM | |
| P1–P4 | ON | Horário de ligar no formato HH:MM | NÃO |
| OFF | Horário de desligar no formato HH:MM | NÃO | |
| Ativo | Checkbox — habilita ou desabilita o programa | NÃO |
Alterações nos programas P1–P4 (horários e ativação) são aplicadas imediatamente e salvas na memória permanente sem reiniciar o dispositivo. O display é atualizado em até 500ms.
O hotspot permanece ativo mesmo quando o dispositivo está conectado à rede Wi-Fi local. É possível acessar o portal de configuração a qualquer momento sem interromper a operação normal.
O sistema utiliza três fontes de tempo em ordem de prioridade para garantir que o horário seja sempre preciso e disponível.
| Prioridade | Fonte | Condição |
|---|---|---|
| 1ª | Servidor NTP (pool.ntp.org / time.google.com) | Conexão com internet disponível |
| 2ª | Módulo RTC DS3231 (I²C) | Internet indisponível ou no boot |
| 3ª | Soft RTC (millis interno) | Mantém continuidade entre sincronizações |
| Situação | Comportamento |
|---|---|
| Boot com DS3231 válido | Hora restaurada imediatamente do RTC antes de conectar ao Wi-Fi |
| Conexão com internet estabelecida | NTP sincroniza e atualiza o DS3231 automaticamente |
| Internet cai durante operação | Soft RTC continua com base no millis() — hora preservada |
| Internet retorna | NTP ressincroniza e corrige qualquer drift no DS3231 |
| Dispositivo desligado e religado | DS3231 (bateria CR2032) fornece a hora correta imediatamente |
| Sem internet e sem DS3231 válido | Display exibe --:-- — agendamentos aguardam sincronização |
Configurado para BRT3 (UTC-3) — Brasília/Rio de Janeiro, sem horário de verão (abolido no Brasil desde 2019).
O PUMP CTRL publica e recebe dados via MQTT e registra automaticamente 21 entidades no Home Assistant através do protocolo de auto-discovery.
| Tópico | Valores | Descrição |
|---|---|---|
| pump_ctrl/status | online / offline | Disponibilidade do dispositivo (LWT) |
| pump_ctrl/engine/state | ON / OFF | Estado atual do motor/relé |
| pump_ctrl/timer/on_rem | 0–86400 | Segundos restantes do ciclo ativo |
| pump_ctrl/current_prg | P1–P4 | Programa exibido/ativo no momento |
| pump_ctrl/wifi/signal | 0–100 | Sinal Wi-Fi em percentual |
| pump_ctrl/prg/N/on | HH:MM | Horário de ligar do programa N (0–3) |
| pump_ctrl/prg/N/off | HH:MM | Horário de desligar do programa N |
| pump_ctrl/prg/N/active | ON / OFF | Estado ativo/inativo do programa N |
| Tópico | Payload | Ação |
|---|---|---|
| pump_ctrl/engine/set | ON / OFF | Liga ou desliga o motor imediatamente |
| pump_ctrl/prg/N/on_set | HH:MM | Define horário de ligar do programa N |
| pump_ctrl/prg/N/off_set | HH:MM | Define horário de desligar do programa N |
| pump_ctrl/prg/N/active_set | ON / OFF | Ativa ou desativa o programa N |
N = 0 (P1), 1 (P2), 2 (P3), 3 (P4)
O relé é acionado em todos os eventos de liga/desliga do motor, independente da origem do comando.
| Origem | Liga | Desliga |
|---|---|---|
| Botão A (manual) | ✔ Aciona RELAY_ON | — |
| Botão B (manual) | — | ✔ Aciona RELAY_OFF |
| Agendamento ON (scheduler) | ✔ Aciona RELAY_ON | — |
| Agendamento OFF (scheduler) | — | ✔ Aciona RELAY_OFF |
| Countdown zerado | — | ✔ Aciona RELAY_OFF |
Comando MQTT engine/set ON | ✔ Aciona RELAY_ON | — |
Comando MQTT engine/set OFF | — | ✔ Aciona RELAY_OFF |
| Boot / reinicialização | — | ✔ RELAY_OFF garantido |
Ao inicializar, o relé é forçado para o estado desligado antes de qualquer outra ação, prevenindo acionamentos inadvertidos durante a inicialização do sistema.
| Rede | PUMP CTRL |
| Senha | 12345678 |
| Portal | http://192.168.4.1 |
| Client ID | pump_ctrl_01 |
| LWT Topic | pump_ctrl/status |
| Buffer | 1024 bytes |
Todos os programas são salvos na memória NVS (não-volátil) do ESP32 e restaurados automaticamente após qualquer desligamento ou reinicialização, sem necessidade de reconfigurar.