Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
/
/
Monitor de Host: monitorando a disponibilidade de serviços em redes e homelabs com o ESP32

Monitor de Host: monitorando a disponibilidade de serviços em redes e homelabs com o ESP32

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

Lista de Materiais

Introdução

Com o aumento da dependência de serviços online e da utilização de servidores virtuais privados (VPS), aplicações web e outros serviços de rede, torna-se cada vez mais importante acompanhar continuamente sua disponibilidade. Falhas de conectividade ou indisponibilidade de serviços podem comprometer aplicações, causar prejuízos financeiros e afetar a experiência dos usuários, tornando o monitoramento uma prática essencial para garantir a confiabilidade da infraestrutura.

Diversas ferramentas de monitoramento estão disponíveis atualmente, oferecendo recursos avançados para administração de ambientes de rede. Entretanto, essas soluções normalmente dependem da execução em computadores, servidores ou máquinas virtuais dedicadas. Em aplicações de pequeno porte, ambientes didáticos ou laboratórios, pode ser interessante utilizar uma alternativa mais simples, de baixo custo e com reduzido consumo de energia, sem abrir mão das funcionalidades básicas de monitoramento.

Neste contexto, este artigo apresenta o desenvolvimento de um dispositivo baseado no microcontrolador ESP32, projetado para monitorar periodicamente a disponibilidade de hosts e serviços de rede por meio de testes HTTP e TCP. O sistema permite verificar tanto aplicações web quanto serviços executados em portas específicas, como servidores SSH, DNS e bancos de dados, disponibilizando os resultados em uma interface web acessível diretamente pela rede local.

Serão apresentados os componentes utilizados, a arquitetura de hardware e software, a implementação do firmware e a análise dos resultados obtidos durante os testes. Ao final, espera-se demonstrar que o ESP32 constitui uma plataforma viável para o desenvolvimento de soluções embarcadas de monitoramento de infraestrutura, além de proporcionar uma aplicação prática de conceitos relacionados a redes de computadores, programação embarcada e Internet das Coisas (IoT).

Materiais e Métodos

Componentes Necessários

O desenvolvimento do monitor de hosts foi realizado utilizando um conjunto reduzido de componentes de hardware e software, priorizando baixo custo, simplicidade de implementação e ampla disponibilidade.

| Componente | Função                                          |
|------------|-------------------------------------------------|
| ESP32      | Plataforma de processamento e monitoramento     |
| Wi-Fi      | Comunicação com a rede                          |
| Arduino IDE| Desenvolvimento do firmware                     |
| HTTPClient | Testes HTTP                                     |
| WiFiClient | Testes TCP                                      |
| WebServer  | Interface web (dashboard)                       |

Hardware

Para a montagem do projeto é necessário apenas um microcontrolador ESP32, responsável por executar toda a lógica de monitoramento, realizar as verificações de conectividade dos hosts e disponibilizar uma interface web para consulta dos resultados.

Software

O firmware foi desenvolvido utilizando a Arduino IDE, que oferece um ambiente simples e amplamente utilizado para programação do ESP32.

Além da IDE, são utilizadas bibliotecas responsáveis pela conexão com a rede Wi-Fi, comunicação TCP e HTTP, sincronização do relógio interno via NTP e implementação de um servidor web embarcado para exibição das informações de monitoramento.

Diagramas

Para facilitar a compreensão da arquitetura proposta, são apresentados os diagramas do hardware e do fluxo lógico do firmware, ilustrando a interação entre os módulos do sistema.

Diagrama de firmware

                           FLUXOGRAMA DO FIRMWARE

        ╭──────────────────────────────────────────────────────╮
        │                      setup()                         │
        ╰───────────────────────┬──────────────────────────────╯
                                │
                                ▼
        ╭──────────────────────────────────────────────────────╮
        │ Inicializa comunicação Serial                        │
        ╰───────────────────────┬──────────────────────────────╯
                                │
                                ▼
        ╭──────────────────────────────────────────────────────╮
        │ Conecta o ESP32 à rede Wi-Fi                         │
        ╰───────────────────────┬──────────────────────────────╯
                                │
                                ▼
        ╭──────────────────────────────────────────────────────╮
        │ Sincroniza relógio utilizando NTP                    │
        ╰───────────────────────┬──────────────────────────────╯
                                │
                                ▼
        ╭──────────────────────────────────────────────────────╮
        │ Inicializa o servidor Web                            │
        ╰───────────────────────┬──────────────────────────────╯
                                │
                                ▼
                 ╔════════════════════════════════╗
                 ║            loop()             ║
                 ╚═══════════════╤════════════════╝
                                 │
                                 ▼
        ╭──────────────────────────────────────────────────────╮
        │ Atende requisições recebidas pelo WebServer          │
        ╰───────────────────────┬──────────────────────────────╯
                                │
                                ▼
                      ╭─────────────────────╮
                      │ Intervalo atingido? │
                      ╰──────────┬──────────╯
                                 │
                    ┌────────────┴────────────┐
                    │                         │
                  Não                        Sim
                    │                         │
                    │                         ▼
                    │      ╭────────────────────────────────────╮
                    │      │ Executa testes HTTP configurados   │
                    │      ╰────────────────┬───────────────────╯
                    │                       │
                    │                       ▼
                    │      ╭────────────────────────────────────╮
                    │      │ Executa testes TCP configurados    │
                    │      ╰────────────────┬───────────────────╯
                    │                       │
                    │                       ▼
                    │      ╭────────────────────────────────────╮
                    │      │ Atualiza resultados em memória RAM │
                    │      ╰────────────────┬───────────────────╯
                    │                       │
                    └───────────────────────┴─────────────────────────────┐
                                                                          │
                                                                          ▼
                                                            ╔════════════════════╗
                                                            ║   Retorna ao loop  ║
                                                            ╚════════════════════╝

Diagrama de hardware

O hardware do sistema é composto exclusivamente por um microcontrolador ESP32, não havendo circuitos auxiliares ou interligações entre componentes externos. Dessa forma, não há uma montagem eletrônica específica que justifique a elaboração de um diagrama de hardware, sendo o funcionamento do sistema definido integralmente pelo firmware.

Firmware

O firmware foi desenvolvido em linguagem C++ utilizando o framework Arduino para ESP32. Sua arquitetura foi dividida em módulos independentes, facilitando a manutenção, a expansão do código e a reutilização de componentes.

O arquivo main.ino é responsável apenas pelo fluxo principal da aplicação, enquanto as funcionalidades específicas são implementadas em módulos separados, organizados nos arquivos config.hmonitor.h e web.h.

Fluxo principal

O firmware inicia executando a função setup(), responsável pela inicialização de todos os serviços necessários para o funcionamento do monitor.

void setup() {

    unsigned long tempoBoot = millis();

    Serial.begin(115200);

    conectarWifi();

    sincronizarHorario();

    iniciarWeb();

}
 

Inicialmente é aberta a comunicação serial, utilizada para depuração e exibição dos resultados dos testes. Em seguida, o ESP32 conecta-se à rede Wi-Fi previamente configurada e sincroniza seu relógio interno utilizando servidores NTP. Por fim, é iniciado o servidor web responsável por disponibilizar a interface de monitoramento aos usuários da rede.

Após a conclusão da inicialização, o programa permanece continuamente executando a função loop(), característica da arquitetura do framework Arduino.

void loop() {

    // atende requisições web o tempo todo

    atenderWeb();

    // verifica se chegou a hora de testar

    unsigned long agora = millis();

    if (

        agora - ultimoTeste

        >=

        intervaloTeste

    ) {

        ultimoTeste = agora;

        testarHTTP(

            httpNome1,

            httpServidor1

        );

        testarHTTP(

            httpNome2,

            httpServidor2

        );

        testarHTTP(

            httpNome3,

            httpServidor3

        );

        testarTCP(

            tcpNome1,

            tcpServidor1,

            tcpPorta1

        );

        testarTCP(

            tcpNome2,

            tcpServidor2,

            tcpPorta2

        );

        testarTCP(

            tcpNome3,

            tcpServidor3,

            tcpPorta3

        );

        exibirResultadosSerial();

    }

}
 

Durante toda a execução, o firmware realiza duas tarefas principais:

  • atendimento das requisições recebidas pelo servidor web;
  • execução periódica dos testes de disponibilidade.

O controle do intervalo entre os testes é realizado utilizando a função millis(), que contabiliza o tempo desde a inicialização do microcontrolador e evita o uso de funções bloqueantes como delay(), permitindo que a interface web continue respondendo normalmente mesmo durante longos períodos de monitoramento.

Quando o intervalo configurado é atingido, o firmware executa sequencialmente todos os testes HTTP e TCP cadastrados e, ao final do ciclo, apresenta os resultados também no monitor serial.

Módulo de configuração (config.h)

O arquivo config.h concentra todos os parâmetros configuráveis do sistema, permitindo alterar o comportamento do monitor sem necessidade de modificar a lógica principal do firmware.

constexpr const char* ssid     = "Seu_Wifi";
constexpr const char* password = "sua_senha";


//=========================
// TESTE HTTP/HTTPS
//=========================

constexpr const char* httpNome1 =
    "Server1"; // ALTERAR O NOME

constexpr const char* httpServidor1 =
    "https://server1.com.br"; // ALTERAR O ENDEREÇO

// COPIAR COMO httpNome2 e httpServidor2 para criar mais testes

//=========================
// TESTE TCP
//=========================

constexpr const char* tcpNome1 =
    "Server1"; // ALTERAR O NOME

constexpr const char* tcpServidor1 =
    "123.456.789.111"; // ALTERAR O IP

constexpr int tcpPorta1 = 1234; // ALTERAR A PORTA

// COPIAR COMO tcpNome2, tcpServidor2 e tcpPorta2 para criar mais testes


//=========================
// CONFIGURAÇÕES GLOBAIS
//=========================

constexpr unsigned long intervaloTeste = 60000; // ALTERAR O TEMPO EM ms
 

Neste módulo são definidos:

  • credenciais da rede Wi-Fi;
  • intervalo entre os testes;
  • servidores HTTP monitorados;
  • servidores TCP monitorados;
  • portas TCP utilizadas em cada teste.

Essa organização facilita a adaptação do firmware para diferentes ambientes de monitoramento, bastando alterar os valores das constantes.

Módulo de monitoramento (monitor.h)

O módulo de monitoramento concentra toda a lógica responsável pelos testes de disponibilidade dos serviços.

São implementados dois métodos distintos de verificação:

Testes HTTP

Os testes HTTP utilizam a biblioteca HTTPClient para enviar uma requisição ao endereço configurado.

O firmware registra informações como:

  • sucesso ou falha da comunicação;
  • código de resposta HTTP;
  • tempo de resposta da requisição;
  • horário da última execução.

Esse método é indicado para monitoramento de aplicações web e APIs.

Testes TCP

Os testes TCP utilizam a biblioteca WiFiClient, estabelecendo uma conexão diretamente com uma porta específica do servidor.

Caso a conexão seja estabelecida dentro do tempo limite definido, o serviço é considerado disponível.

Além da disponibilidade, também é registrado o tempo necessário para o estabelecimento da conexão.

Módulo da interface web (web.h)

O módulo web.h implementa um servidor HTTP embarcado utilizando a biblioteca WebServer.

A interface é gerada dinamicamente pelo próprio ESP32, dispensando servidores web externos e arquivos HTML hospedados separadamente, uma vez que a página é gerada diretamente pelo firmware.

O layout foi desenvolvido utilizando HTML e CSS leves, inspirado em painéis utilizados em Centros de Operação de Rede (NOC), priorizando simplicidade, legibilidade e baixo consumo de memória.

Resultados

Após a inicialização do firmware, o ESP32 executa continuamente ciclos de monitoramento dos hosts configurados. A cada intervalo definido, são realizados os testes HTTP e TCP, sendo os resultados armazenados temporariamente em memória RAM, substituindo os dados do ciclo anterior. Essa abordagem elimina a necessidade de armazenamento permanente e garante que a interface apresente sempre o estado mais recente da infraestrutura monitorada.

As informações coletadas são disponibilizadas por meio de um servidor web embarcado no próprio ESP32. Sempre que um usuário acessa o endereço IP do dispositivo, a página é gerada dinamicamente a partir dos dados armazenados em memória, dispensando servidores externos, bancos de dados ou processamento adicional.

O dashboard foi desenvolvido com foco em simplicidade e rápida interpretação das informações, reunindo em uma única página todos os hosts monitorados.

Para cada serviço são apresentados:

  • Nome do host;
  • Protocolo utilizado (HTTP ou TCP);
  • Status da última verificação (Online ou Offline);
  • Tempo de resposta;
  • Horário da última atualização;
  • Link para acesso ao serviço, quando aplicável.

Conclusão

O desenvolvimento deste projeto demonstrou que é possível implementar uma solução funcional de monitoramento de hosts utilizando apenas um microcontrolador ESP32. Mesmo com recursos computacionais limitados, o sistema foi capaz de realizar testes periódicos de disponibilidade, medir tempos de resposta e disponibilizar uma interface web leve para acompanhamento e administração em tempo real.

Desta forma, este projeto permitiu integrar conhecimentos de redes de computadores, programação embarcada e desenvolvimento de interfaces web em um único sistema funcional. Durante sua implementação, foi possível explorar conceitos como comunicação TCP/IP, protocolo HTTP, sincronização de horário via NTP, programação não bloqueante utilizando temporizadores e organização modular de firmware. Dessa forma, além de atender ao objetivo de desenvolver um monitor de hosts de baixo custo, o projeto também se mostrou uma excelente ferramenta de aprendizagem, evidenciando o potencial do ESP32 como plataforma para o desenvolvimento de aplicações voltadas à administração de redes e à Internet das Coisas (IoT).

Referências

ARDUINO. Arduino IDE. Disponível em: https://www.arduino.cc/en/software. Acesso em: 30 jun. 2026.

ESPRESSIF SYSTEMS. ESP32 Programming Guide. Disponível em: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/. Acesso em: 30 jun. 2026.

ESPRESSIF SYSTEMS. Arduino Core for ESP32 Documentation. Disponível em: https://docs.espressif.com/projects/arduino-esp32/. Acesso em: 30 jun. 2026.

FIELDING, R. T.; RESCHKE, J. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. RFC 7231. Internet Engineering Task Force, 2014.

MILLS, D. L. Network Time Protocol Version 4: Protocol and Algorithms Specification. RFC 5905. Internet Engineering Task Force, 2010.

POSTEL, J. Transmission Control Protocol. RFC 793. Internet Engineering Task Force, 1981.

Código-fonte do projeto

Os arquivos completos do HostMonitor estão disponíveis para download em formato .zip. Após o download, basta extrair o conteúdo do arquivo e abrir o projeto na Arduino IDE. Em seguida, selecione a placa ESP32 correspondente, configure a porta serial e realize a compilação e gravação do firmware normalmente.

O pacote inclui todo o código-fonte necessário para a reprodução do projeto, permitindo sua utilização, estudo e adaptação.

Download do código-fonte:

hostmonitor

Sobre o Autor


Erwin de Mattos

 

O projeto apresenta o desenvolvimento de um dispositivo de monitoramento de disponibilidade baseado em ESP32, criado a partir de uma necessidade prática surgida durante estudos e experimentos em infraestrutura de redes e homelab. O objetivo foi construir uma solução simples, silenciosa e de baixo consumo energético capaz de permanecer ligada continuamente, fornecendo informações rápidas sobre a disponibilidade de computadores, servidores, VPNs e serviços essenciais além de servir como um portal de acesso.

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200