ESP32 para monitoramento industrial de baixo custo

O ESP32 é provavelmente a melhor relação custo-benefício para IoT industrial que existe hoje. Por menos de R$ 50, você tem um microcontrolador com WiFi, Bluetooth, múltiplos ADCs, e capacidade de processamento suficiente para a maioria das aplicações de monitoramento. Neste guia, vamos explorar como usar ESP32 para coletar dados de máquinas industriais de forma profissional.

Por que ESP32 para indústria?

Antes de entrar no técnico, vamos entender por que o ESP32 se tornou a escolha preferida para projetos de IoT industrial em PMEs:

"Com R$ 500 em hardware você consegue monitorar uma linha de produção inteira. Há 10 anos isso custaria R$ 50.000."

Variantes do ESP32: qual escolher?

Existem várias versões do ESP32. Para aplicações industriais, recomendamos:

ESP32-WROOM-32

O modelo clássico, ideal para a maioria das aplicações. Dual-core, WiFi, Bluetooth, 38 GPIOs.

ESP32-S3

Versão mais recente com suporte a USB nativo e maior capacidade de AI/ML. Ideal para projetos com visão computacional.

ESP32-C3

Single-core RISC-V, menor consumo de energia. Bom para sensores alimentados por bateria.

Recomendação

Para monitoramento industrial, recomendamos placas de desenvolvimento como ESP32 DevKit ou TTGO T-Display (que já vem com tela). Evite módulos "bare" para projetos iniciais.

Sensores industriais compatíveis

O ESP32 pode ler praticamente qualquer tipo de sensor. Os mais úteis para indústria:

Sensores de corrente (não-invasivos)

// Leitura de sensor SCT-013 com ESP32
#include <Arduino.h>

const int sensorPin = 34;  // ADC1_CH6
const float sensibilidade = 0.066;  // 66mV/A para SCT-013-030
const float tensaoRede = 220.0;

float lerCorrente() {
    float somaQuadrados = 0;
    int amostras = 1000;

    for (int i = 0; i < amostras; i++) {
        int leitura = analogRead(sensorPin);
        float tensao = (leitura / 4095.0) * 3.3;
        float corrente = (tensao - 1.65) / sensibilidade;
        somaQuadrados += corrente * corrente;
        delayMicroseconds(100);
    }

    return sqrt(somaQuadrados / amostras);
}

float calcularPotencia(float corrente) {
    return corrente * tensaoRede;  // Potência aparente
}

Sensores de vibração

Sensores de temperatura

Sensores de proximidade e contagem

Arquitetura de um sistema de monitoramento

Um sistema de monitoramento industrial típico segue esta estrutura:

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│    SENSORES     │────▶│      ESP32      │────▶│     SERVIDOR    │
│ (Corrente, Temp,│     │  (Coleta dados, │     │ (Armazena, pro- │
│  Vibração...)   │     │   pré-processa) │     │  cessa, exibe)  │
└─────────────────┘     └─────────────────┘     └─────────────────┘
                               │                        │
                               │ WiFi                   │ HTTP/MQTT
                               │                        ▼
                               │              ┌─────────────────┐
                               └─────────────▶│   DASHBOARD     │
                                              │ (Power BI,      │
                                              │  Grafana...)    │
                                              └─────────────────┘

Camada de coleta (ESP32)

Camada de armazenamento (Servidor)

Camada de visualização

Exemplo completo: Monitor de máquina

Vamos criar um monitor que coleta corrente, temperatura e vibração, e envia para um servidor:

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Configurações WiFi
const char* ssid = "REDE_INDUSTRIAL";
const char* password = "senha_segura";

// Configurações do servidor
const char* serverUrl = "https://api.empresa.com/coleta";
const char* apiKey = "sua_api_key";

// Pinos
const int pinCorrente = 34;
const int pinTemperatura = 4;

// Objetos dos sensores
Adafruit_MPU6050 mpu;
OneWire oneWire(pinTemperatura);
DallasTemperature sensoresTemp(&oneWire);

// Identificação da máquina
const char* maquinaId = "torno_cnc_01";

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

    // Conecta WiFi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nWiFi conectado!");

    // Inicializa sensores
    Wire.begin();
    if (!mpu.begin()) {
        Serial.println("MPU6050 não encontrado!");
    }
    sensoresTemp.begin();
}

float lerCorrente() {
    float soma = 0;
    for (int i = 0; i < 1000; i++) {
        int leitura = analogRead(pinCorrente);
        float tensao = (leitura / 4095.0) * 3.3;
        float corrente = (tensao - 1.65) / 0.066;
        soma += corrente * corrente;
        delayMicroseconds(100);
    }
    return sqrt(soma / 1000);
}

float lerTemperatura() {
    sensoresTemp.requestTemperatures();
    return sensoresTemp.getTempCByIndex(0);
}

float lerVibracao() {
    sensors_event_t a, g, temp;
    mpu.getEvent(&a, &g, &temp);

    // Calcula magnitude da aceleração
    float magnitude = sqrt(
        a.acceleration.x * a.acceleration.x +
        a.acceleration.y * a.acceleration.y +
        a.acceleration.z * a.acceleration.z
    );
    return magnitude;
}

void enviarDados(float corrente, float temperatura, float vibracao) {
    if (WiFi.status() != WL_CONNECTED) return;

    HTTPClient http;
    http.begin(serverUrl);
    http.addHeader("Content-Type", "application/json");
    http.addHeader("X-API-Key", apiKey);

    StaticJsonDocument<256> doc;
    doc["maquina"] = maquinaId;
    doc["timestamp"] = millis();
    doc["corrente"] = corrente;
    doc["temperatura"] = temperatura;
    doc["vibracao"] = vibracao;
    doc["status"] = corrente > 0.5 ? "ligada" : "desligada";

    String json;
    serializeJson(doc, json);

    int httpCode = http.POST(json);
    if (httpCode == 200) {
        Serial.println("Dados enviados com sucesso");
    } else {
        Serial.printf("Erro HTTP: %d\n", httpCode);
    }
    http.end();
}

void loop() {
    float corrente = lerCorrente();
    float temperatura = lerTemperatura();
    float vibracao = lerVibracao();

    Serial.printf("Corrente: %.2f A | Temp: %.1f °C | Vibração: %.2f m/s²\n",
                  corrente, temperatura, vibracao);

    enviarDados(corrente, temperatura, vibracao);

    delay(5000);  // Envia a cada 5 segundos
}

Protocolos de comunicação

HTTP/REST

Mais simples de implementar. Ideal para envio periódico de dados.

MQTT

Protocolo leve, ideal para IoT. Permite comunicação bidirecional e menor overhead.

// Exemplo de envio via MQTT
#include <PubSubClient.h>

WiFiClient espClient;
PubSubClient mqtt(espClient);

void setupMQTT() {
    mqtt.setServer("mqtt.empresa.com", 1883);
    mqtt.connect("esp32_torno_01", "usuario", "senha");
}

void publicarDados(float corrente) {
    char payload[50];
    sprintf(payload, "{\"corrente\":%.2f}", corrente);
    mqtt.publish("maquinas/torno_01/corrente", payload);
}

Modbus TCP

Para integração com sistemas industriais existentes (CLPs, SCADAs).

Segurança em ambiente industrial

IoT industrial exige cuidados especiais de segurança:

Atenção

Nunca conecte dispositivos IoT diretamente à internet. Use sempre um gateway ou VPN. Redes industriais são alvo frequente de ataques.

Cases práticos

Confecção: Monitoramento de máquinas de costura

Instalamos sensores de corrente em 50 máquinas de costura. O sistema detecta automaticamente quando cada máquina está operando, parada ou em manutenção. Resultado: visibilidade real da produtividade e identificação de gargalos.

Metalúrgica: Predição de falha em torno CNC

Sensor de vibração no eixo principal. Quando a vibração sai do padrão, alerta é enviado. Em 8 meses, zero paradas não programadas.

Indústria alimentícia: Monitoramento de temperatura

Sensores DS18B20 em câmaras frias com alertas via Telegram quando temperatura ultrapassa limites. Conformidade com vigilância sanitária garantida.

Próximos passos

  1. Monte um protótipo: Compre um ESP32 e sensores básicos
  2. Escolha uma máquina piloto: A mais crítica ou com mais problemas
  3. Defina métricas: O que você quer medir e por quê?
  4. Implemente gradualmente: Comece simples, expanda depois

A Blumenau TI oferece kits completos de monitoramento industrial com ESP32, incluindo hardware, firmware e integração com dashboards. Podemos ajudar desde o projeto até a implementação.

Lucas Junges

Lucas Junges

Fundador & CTO, Blumenau TI

Engenheiro especializado em sistemas embarcados e IoT industrial. Desenvolveu soluções de monitoramento para mais de 30 empresas da região.

Pronto para começar seu projeto IoT?

Agende uma conversa e receba um orçamento personalizado para monitoramento das suas máquinas.

Agendar conversa gratuita