//# Professor Cristiano Teixeira
//# Mudanças do original Sob Licença Apache 2.0
// Para testar isolado sem o outro projeto
// Abra o site:
// 1. http://www.hivemq.com/demos/websocket-client/
// 2. Click em "Connect"
// 3. No campo Publish, deixe o Topic como "Aula_SEI_2026"
// 4. Escreva alguma mensagem, por exemplo: {"Botao" : True}
// 5. click em "Publish"
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include "HX711.h"
// WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
// DHT22
#define DHT_PIN 15
DHTesp dht;
// PIR
#define PIR_PIN 13
// HX
HX711 scale;
// Potenciometro
#define POT 17
// MQTT Reconnect
void reconnect() {
while (!client.connected()) {
Serial.print("Conectando ao MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("Conectado com Sucesso");
} else {
Serial.println("Desconectado");
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
// DHT22
dht.setup(DHT_PIN, DHTesp::DHT22);
// PIR
pinMode(PIR_PIN, INPUT);
//HX Mudar as portas
scale.begin(19, 18);
// WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado!");
// MQTT
client.setServer(mqtt_server, 1883);
}
void loop() {
// MQTT reconect
if (!client.connected()) {
reconnect();
}
client.loop();
// Faço todas as leituras
TempAndHumidity data = dht.getTempAndHumidity();
String temp = String(data.temperature, 2);
String hum = String(data.humidity, 1);
String massa = String(scale.get_units()/409.6);
bool motion = digitalRead(PIR_PIN);
String move = String(motion);
String potenc = String(analogRead(POT));
Serial.println("Temperatura : " + temp + "C");
client.publish("/SEI2026/temp", temp.c_str());
Serial.println("Umidade : " + hum);
client.publish("/SEI2026/hum", hum.c_str());
Serial.println("Presenca: "+ move);
client.publish("/SEI2026/presenca", move.c_str());
Serial.println("Massa: "+ massa);
client.publish("/SEI2026/massa", massa.c_str());
Serial.println("Potenciometro: "+ potenc);
client.publish("/SEI2026/potencia", potenc.c_str());
delay(3000);
}