#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configurações de Hardware [cite: 64]
#define DHTPIN 15
#define DHTTYPE DHT22
#define POT_VIB 34
#define POT_COR 35
// Instâncias
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
WiFiClient espClient;
PubSubClient client(espClient);
// Configurações de Conexão [cite: 60]
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com"; // Broker público para o teste
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(12, OUTPUT);
digitalWrite(12, HIGH);
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi conectado!");
}
void reconnect() {
while (!client.connected()) {
// C7: Aplicar Client ID exclusivo
String clientId = "ESP32-Client-Senai-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("Conectado ao MQTT");
} else {
delay(5000);
}
}
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
// Leitura dos Sensores
float temp = dht.readTemperature();
// C8: Detalhar funções de conversão (map)
float vibra = analogRead(POT_VIB) * (1.0 / 4095.0); // Escala 0 a 1.0
float corr = analogRead(POT_COR) * (20.0 / 4095.0); // Escala 0 a 20.0
// Exibição no LCD
lcd.setCursor(0, 0);
lcd.print("T:"); lcd.print(temp, 1);
lcd.print(" V:"); lcd.print(vibra, 1);
lcd.setCursor(0, 1);
lcd.print("Corr: "); lcd.print(corr, 1); lcd.print("A ");
// Formatação da Mensagem: "temp,vibra,corr"
String payload = String(temp, 1) + "," + String(vibra, 1) + "," + String(corr, 1);
// Envio dos Dados
client.publish("senai/telemetria/dados", payload.c_str());
Serial.println("Dados enviados: " + payload);
delay(5000); // Intervalo de 5 segundos
}