//Incluir bibliotecas
#include <DHTesp.h>
#include <EspMQTTClient.h>
char SSIDName[] = "Wokwi-GUEST"; //nome da rede WiFi
char SSIDPass[] = ""; //senha da rede WiFI
const int pir =19;
const int sirene =4;
char BrokerURL[] = "test.mosquitto.org"; //URL do broker Mosquitto MQTT
char BrokerUserName[] = ""; //nome do usuario para autenticar no broker MQTT
char BrokerPassword[] = ""; //senha para autenticar no broker MQTT
char MQTTClientName[] = "SaladeMáquinas"; //nome do cliente MQTT
int BrokerPort = 1883; //porta do broker MQTT
String topico_alarme = "faculdade/t31/som"; // topico alarme e sirene
String topico_temperatura = "faculdade/t31/quente"; //topico temperatura sensor DHT
String topico_umidade = "faculdade/t31/molhado"; // topico umidade sensor DHT
EspMQTTClient clienteMQTT(SSIDName, SSIDPass, BrokerURL, BrokerUserName, BrokerPassword, MQTTClientName, BrokerPort); //inicializa o cliente MQTT
//Este prototipo de funcao deve estar sempre presente
void onConnectionEstablished() {
}
//Variaveis globais e objetos
const int DHT_PIN = 22; //terminal do sensor de temperatura e umidade
DHTesp dhtSensor; //instancia o objeto dhtSensor a partir da classa DHTesp
void setup() {
Serial.begin(115200);
pinMode(sirene,OUTPUT);
pinMode(pir,INPUT);
clienteMQTT.enableDebuggingMessages(); //habilita mensagens de debug no monitor serial
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //inicializa o sensor de temperatura e umidade
}
// inicia loop do sistema
void loop() {
clienteMQTT.loop(); //funcao necessaria para manter a conexao com o broker MQTT ativa e coletar as mensagens recebidas
TempAndHumidity temp_umid = dhtSensor.getTempAndHumidity(); //instancia o objeto temp_umid a partir da classe TempAndHumidity
if (clienteMQTT.isWifiConnected() == 1) {
Serial.println("Conectado ao WiFi!");
} else {
Serial.println("Nao conectado ao WiFi!");
}
if (clienteMQTT.isMqttConnected() == 1) {
Serial.println("Conectado ao broker MQTT!");
} else {
Serial.println("Nao conectado ao broker MQTT!");
}
delay(1000);
const int IP=digitalRead(pir);
const int Temperatura = temp_umid.temperature;
const int Umidade = temp_umid.humidity;
// Enviando temperatura e umidade para o broker mqtt
delay(1000);
clienteMQTT.publish(topico_temperatura, String(temp_umid.temperature, 2));
clienteMQTT.publish(topico_umidade, String(temp_umid.humidity, 1) + "%");
// Alarme de movimento na sala
if(IP==1){
digitalWrite(sirene,HIGH);
clienteMQTT.publish(topico_alarme, String("on"));
Serial.println("Intruso na sala 1");
clienteMQTT.publish(topico_alarme, String("on"));
delay(1000);
clienteMQTT.publish(topico_alarme, String("on"));
delay(1000);
clienteMQTT.publish(topico_alarme, String("on"));
delay(1000);
clienteMQTT.publish(topico_alarme, String("on"));
}else{
Serial.println(" Sem movimento na Sala 1");
digitalWrite(sirene,LOW);
clienteMQTT.publish(topico_alarme, String("off"));
delay(1000);
}
// Alarme de movimento na sala
if(Temperatura>50){
Serial.print(" Alta temperatura na Sala 1");
digitalWrite(sirene,HIGH);
delay(1000);
}else{
Serial.print("Temperatura na Sala 1 ok");
digitalWrite(sirene,LOW);
delay(1000);
}
}