Transforme sua Cafeteira Comum em Smart Coffee com ESP32: Guia Completo para Iniciantes

Usando um ESP32, um módulo relé simples, e um sensor básico de temperatura (DS18B20), você terá o controle remoto do aquecimento da sua cafeteira via uma interface web simples, acompanhando também a temperatura da água em tempo real.

Iniciante/Intermediário
Sofia Andrade

Sofia Andrade

Especialista em IA

Introdução

📖

Série: Automação de Cafeteira

Este é o Nível 2 da nossa série completa de automação de cafeteira.

← Nível 1: Timer + Tomada Smart (básico)

Se você deseja dar o primeiro passo para transformar sua cafeteira tradicional em uma smart coffee controlada digitalmente, este guia é perfeito para você. Usando um ESP32, um módulo relé simples, e um sensor básico de temperatura (DS18B20), você terá o controle remoto do aquecimento da sua cafeteira via uma interface web simples, acompanhando também a temperatura da água em tempo real.

Este projeto simplificado é ideal para iniciantes que querem aprender eletrônica, programação e automação aos poucos, preparatório para sistemas mais robustos e avançados.

⚠️

ATENÇÃO CRÍTICA - SEGURANÇA ELÉTRICA

Este projeto trabalha com eletricidade 220V que pode ser FATAL!

  • Só implemente se tiver conhecimento básico de elétrica
  • Use sempre disjuntor dedicado e aterramento
  • Teste primeiro todo o circuito sem água
  • Em caso de dúvida, procure um eletricista qualificado
  • Nunca manipule circuito energizado

Materiais Necessários

Eletrônicos:

  • ESP32 DevKit V1 – R$ 35-55
  • Módulo relé 5V (1 canal) – R$ 18-30
  • Sensor de temperatura DS18B20 – R$ 12-25
  • Resistor de 4.7 kΩ (para o sensor) – R$ 2-5
  • Protoboard e jumpers – R$ 15-25
  • Fonte 5V USB (ou fonte chaveada 5V) – R$ 20-35

Instalação elétrica:

  • Cafeteira simples com resistência elétrica
  • Fios elétricos 2.5mm² para conexão do relé
  • Caixa elétrica vedada – R$ 15-25
  • Disjuntor 16A – R$ 25-40
  • Fusível 10A + porta-fusível – R$ 15-25

Ferramentas:

Ferro de solda, multímetro, alicate, chaves

Custo total: R$ 160-290 (incluindo segurança elétrica)

⚠️ Importante: As marcas mencionadas neste tutorial são citadas apenas para fins educativos e informativos. Não possuímos qualquer parceria, vínculo comercial ou patrocínio com essas empresas.

Diagrama Elétrico Simplificado

+------------------+            +-------------------+
|                  |            |                   |
|     ESP32        |            |    Módulo Relé    |
|                  |            |                   |
|   GPIO13 ------- IN|----------|                   |
|                  |            |    NO ----> Fio ligado à cafeteira (fase cortada) 
|   GPIO17 --+---- Data          |    COM --- Fio vindo da tomada (fase)
|           |  |                 |                   |
|           |  +--- 4.7kΩ ------+ (pull-up resistor para DS18B20)
|           |                   |
|           +---- GND ----------- GND comum
|                               |
|   5V  ------- 5V              | (Para alimentação sensor e relé)      
|   GND ------- GND             | (Todos em comum)
+------------------+            +-------------------+

⚠CUIDADO: Cafeteira elétrica com fio FASE interrompido pelo relé (NO e COM)  
Fio NEUTRO vai direto para a cafeteira (SEM passar pelo relé)
Terra/PE direto para a cafeteira (obrigatório)

Montagem e Configuração Passo a Passo

1. Preparação dos Materiais e Ferramentas

  • Separe todos os componentes listados acima
  • Certifique-se de que possui as ferramentas necessárias para realizar conexões e testes
  • DESLIGUE o disjuntor antes de qualquer conexão elétrica

2. Montagem Elétrica - Parte Baixa Tensão (5V)

  • Prepare os cabos com comprimento adequado, desencape as pontas
  • Monte o circuito no protoboard conectando:
  • Módulo relé ao GPIO 13 do ESP32 (pino IN), com alimentação 5V e GND comuns
  • Sensor DS18B20 ao GPIO 17, com resistor de 4.7 kΩ entre Data e 5V (pull-up)
  • Conecte todos os GNDs juntos para referência comum

3. Montagem Elétrica - Parte Alta Tensão (220V)

⚠️

ATENÇÃO: Esta etapa é PERIGOSA! Se não tem experiência, contrate um eletricista!

Para o relé controlar a energia da cafeteira:

  • DESLIGUE o disjuntor geral
  • Corte APENAS o fio FASE da alimentação da cafeteira
  • Conecte as pontas cortadas nos terminais NO (normal aberto) e COM (comum) do relé
  • Fio NEUTRO vai direto para a cafeteira (não passa pelo relé)
  • Fio TERRA/PE vai direto para a cafeteira (obrigatório)
  • Use caixa isolante e fusível 10A na linha fase
  • Instale disjuntor dedicado 16A

4. Configuração do Ambiente de Desenvolvimento

  • Instale a Arduino IDE em seu computador
  • Configure o suporte do ESP32 na IDE seguindo tutoriais oficiais
  • Instale as bibliotecas necessárias: ESPAsyncWebServer, OneWire, DallasTemperature

5. Programação do ESP32

No código, altere os campos do WiFi para seu SSID e senha:

const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";
  • Compile e faça upload para o ESP32 via conexão USB
  • Abra o Monitor Serial para visualizar o IP obtido após conexão WiFi

6. Testes e Uso

  • Acesse o IP pelo navegador no seu smartphone ou computador conectado na mesma rede
  • Na página, o botão liga/desliga controla o relé que aciona a resistência da cafeteira
  • A temperatura da água aparece atualizada a cada 2 segundos na interface

7. Checklist de Segurança Final

  • ✓ Disjuntor dedicado instalado
  • ✓ Fusível de proteção funcionando
  • ✓ Aterramento conectado
  • ✓ Caixa elétrica vedada
  • ✓ Não há fios expostos
  • ✓ Teste sem água funcionou
  • ✓ Multímetro confirmou voltagens

Código Completo do Projeto Simplificado

Ver código completo
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Pinos do ESP32
#define RELAY_PIN 13
#define TEMP_PIN 17

// Credenciais WiFi - ALTERE AQUI
const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";

// Objetos sensor e servidor web
OneWire oneWire(TEMP_PIN);
DallasTemperature sensors(&oneWire);
AsyncWebServer server(80);

bool relayState = false;
float temperature = 0;

// Página HTML simples e responsiva
const char* htmlPage = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
    <title>SmartCoffee Simples</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            font-family: Arial, sans-serif;
            background: linear-gradient(135deg, #6B4423, #8B4513);
            color: white;
            text-align: center;
            padding: 20px;
            margin: 0;
        }
        .container {
            max-width: 400px;
            margin: 0 auto;
            background: rgba(0,0,0,0.3);
            padding: 30px;
            border-radius: 15px;
        }
        h1 { margin-bottom: 30px; }
        .temp-display {
            font-size: 2em;
            margin: 20px 0;
            padding: 20px;
            background: rgba(255,255,255,0.1);
            border-radius: 10px;
        }
        .control-btn {
            font-size: 1.2em;
            padding: 15px 30px;
            border: none;
            border-radius: 10px;
            background: linear-gradient(45deg, #4CAF50, #45a049);
            color: white;
            cursor: pointer;
            transition: all 0.3s;
        }
        .control-btn:hover {
            background: linear-gradient(45deg, #45a049, #3d8b40
    </>);
        }
        .status {
            margin-top: 20px;
            padding: 10px;
            border-radius: 5px;
            background: rgba(255,255,255,0.1);
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>☕ SmartCoffee Simples</h1>
        <div class="temp-display">
            Temperatura: <span id="temp">--</span> °C
        </div>
        <button class="control-btn" onclick="toggleRelay()">
            <span id="btnText">Ligar Cafeteira</span>
        </button>
        <div class="status" id="status">
            Status: <span id="relayStatus">Desligada</span>
        </div>
    </div>

    <script>
        let currentState = false;
        
        function toggleRelay() {
            fetch('/toggle')
                .then(response => response.text())
                .then(data => {
                    currentState = !currentState;
                    updateInterface();
                });
        }
        
        function updateInterface() {
            document.getElementById('btnText').textContent = 
                currentState ? 'Desligar Cafeteira' : 'Ligar Cafeteira';
            document.getElementById('relayStatus').textContent = 
                currentState ? 'Ligada' : 'Desligada';
        }
        
        function updateTemp() {
            fetch('/temp')
                .then(response => response.json())
                .then(data => {
                    if (data.temperature > -50) {
                        document.getElementById('temp').textContent = 
                            data.temperature.toFixed(1);
                    } else {
                        document.getElementById('temp').textContent = 'Erro';
                    }
                });
        }
        
        // Atualizar temperatura a cada 2 segundos
        setInterval(updateTemp, 2000);
        updateTemp();
    </script>
</body>
</html>
)rawliteral";

void setup() {
  Serial.begin(115200);
  Serial.println("Iniciando SmartCoffee Simples...");
  
  // Configurar pinos
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);
  
  // Inicializar sensor
  sensors.begin();
  
  // Conectar WiFi
  WiFi.begin(ssid, password);
  Serial.print("Conectando ao WiFi");
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println();
  Serial.println("WiFi Conectado!");
  Serial.print("Acesse: http://");
  Serial.println(WiFi.localIP());

  // Configurar rotas do servidor web
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", htmlPage);
  });

  server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request){
    relayState = !relayState;
    digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);
    
    Serial.println("Relé " + String(relayState ? "LIGADO" : "DESLIGADO"));
    request->send(200, "text/plain", relayState ? "Ligado" : "Desligado");
  });

  server.on("/temp", HTTP_GET, [](AsyncWebServerRequest *request){
    sensors.requestTemperatures();
    temperature = sensors.getTempCByIndex(0);
    
    String json = "{"temperature": " + String(temperature) + "}";
    request->send(200, "application/json", json);
    
    Serial.println("Temperatura: " + String(temperature) + "°C");
  });

  server.begin();
  Serial.println("Servidor web iniciado!");
}

void loop() {
  // Nenhuma ação necessária no loop principal
  // O servidor web funciona de forma assíncrona
  delay(1000);
}

Solução de Problemas

Problema: ESP32 não conecta ao WiFi

  • Verifique SSID e senha no código
  • Confirme que está na rede 2.4GHz (ESP32 não suporta 5GHz)
  • Reset do ESP32 e retry

Problema: Temperatura mostra -127°C

  • Sensor DS18B20 desconectado
  • Verifique resistor pull-up 4.7kΩ
  • Confirme conexões: Data, 5V, GND

Problema: Relé não aciona

  • Verifique alimentação 5V do relé
  • Confirme GPIO13 está conectado ao pino IN
  • Teste LED do relé (deve acender quando ativo)

Problema: Interface web não carrega

  • Confirme IP no monitor serial
  • Verifique se está na mesma rede WiFi
  • Teste ping para o IP do ESP32

Análise de Custos

Comparação de investimento:

  • Este projeto: R$ 160-290
  • Cafeteira com timer básico: R$ 150-300
  • Cafeteira programável comercial: R$ 400-800
  • Sistema IoT comercial: R$ 1000-2500

Vantagens do DIY:

  • Controle total via celular
  • Monitoramento de temperatura
  • Expandível para recursos avançados
  • Aprendizado técnico valioso
  • Custo muito menor

Evoluindo para o Sistema Profissional

Dominou este projeto básico? Próximo nível disponível:

🚀 Sistema ESP32 Avançado - Nível Profissional

Recursos Avançados:

  • Múltiplos sensores: Fluxo de água, pressão, corrente
  • Interface profissional: Dashboard com gráficos em tempo real
  • Perfis automáticos: 4 tipos de café pré-programados
  • Notificações push: Telegram, WhatsApp, email

Integrações Pro:

  • Sistema de segurança: Proteções automáticas avançadas
  • Casa inteligente: Integração MQTT, Alexa, Google Home
  • Análise energética: Consumo e sustentabilidade
  • Machine Learning: Otimização automática

Investimento: R$ 300-550 para sistema completo profissional

(80% mais barato que cafeteiras comerciais equivalentes)

🔧 Ver Tutorial Completo do Sistema Avançado →

Conclusão

Este projeto é o primeiro passo perfeito para entrar no mundo da automação residencial e IoT. Com investimento de R$ 160-290, você tem:

Resultados imediatos:

  • Controle remoto total da cafeteira
  • Monitoramento de temperatura em tempo real
  • Interface web responsiva
  • Base sólida para projetos avançados

Aprendizado técnico:

  • Programação ESP32
  • Eletrônica básica
  • Desenvolvimento web
  • Conceitos de IoT

Próximos passos:

  • Teste por algumas semanas
  • Documente melhorias desejadas
  • Evolua para o sistema profissional
  • Explore outros projetos IoT

Este guia foi pensado para que você possa iniciar com segurança e aprendizado gradual, aproveitando o poder do ESP32 para automatizar sua cafeteira sem gastar muito e com muita satisfação técnica.

📚 Progressão da Série Completa

🟢

Nível 1: Básico

Timer + Tomada Smart

← Voltar ao Básico
🟡

Nível 2: ESP32 Básico

Você está aqui! ✓

CONCLUÍDO
🔴

Nível 3: Avançado

Sistema Profissional

Próximo Nível →

Aproveite sua jornada de IoT DIY no mundo do café!