//Jefferson da Conceição Dantas | RA 10401327
//Leonardo Medeiros Silva Aparicio | RA: 10401388
//Marina Miki Sinzato | RA: 10401880
//Zhuyu Su | RA 10400811
#define TX2 17
#define RX2 16
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EspMQTTClient.h>
// Definicoes e constantes
const char* SSIDName = "Wokwi-GUEST"; // nome da rede WiFi
const char* SSIDPass = ""; // senha da rede WiFI
const int DHT_PIN = 15; // terminal do sensor de temperatura e umidade
const char* BrokerURL = "broker.hivemq.com"; // URL do broker MQTT
const char* BrokerUserName = ""; // nome do usuario para autenticar no broker MQTT
const char* BrokerPassword = ""; // senha para autenticar no broker MQTT
const char* MQTTClientName = "sensor_gas_client"; // nome do cliente MQTT
int BrokerPort = 1883; // porta do broker MQTT
String TopicoPrefixo = "grupo11"; // prefixo do topico
String TopicoGas = TopicoPrefixo + "/Gas"; // nome do topico para o gás
LiquidCrystal_I2C lcd(0x27, 16, 2);
int BuzzerPin = 2;
int ledgreen = RX2;
int ledred = TX2;
int fan = 5;
int sensor = 26;
float gas = 0;
bool perigo = false;
EspMQTTClient clienteMQTT(SSIDName, SSIDPass, BrokerURL, BrokerUserName, BrokerPassword, MQTTClientName, BrokerPort);
// Prototipo de função sempre presente
void onConnectionEstablished() {
// Pode-se configurar assinaturas de tópicos aqui, se necessário
}
void enviarDados() {
// Publicar o valor do gás no tópico MQTT
clienteMQTT.publish(TopicoGas, String(gas, 2) + "%");
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(ledgreen, OUTPUT);
pinMode(ledred, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(BuzzerPin, OUTPUT);
lcd.begin(16, 2);
lcd.setCursor(1, 0);
lcd.print("Detector de Gas");
delay(1500);
lcd.setCursor(0, 1);
lcd.print("--------------------");
delay(1000);
lcd.clear();
clienteMQTT.enableDebuggingMessages(); // habilita mensagens de debug no monitor serial
}
void loop() {
// Necessário para manter a conexão com o broker MQTT ativa
clienteMQTT.loop();
gas = analogRead(sensor);
gas = 400;
gas = gas * 100 / 4095;
lcd.setCursor(0, 0);
lcd.print("NIVEL= ");
lcd.print(gas);
lcd.print(" % ");
lcd.setCursor(0, 1);
if (gas > 50 && !perigo) {
perigo = true;
digitalWrite(BuzzerPin, HIGH);
digitalWrite(ledred, HIGH);
digitalWrite(ledgreen, LOW);
digitalWrite(fan, HIGH);
lcd.print("PERIGO!!!");
} else if (gas <= 50 && perigo) {
perigo = false;
digitalWrite(BuzzerPin, LOW);
digitalWrite(ledred, LOW);
digitalWrite(ledgreen, HIGH);
digitalWrite(fan, LOW);
lcd.print("SEM PERIGO ");
}
enviarDados(); // Enviar dados ao broker MQTT
if (clienteMQTT.isWifiConnected()) {
Serial.println("Conectado ao WiFi!");
} else {
Serial.println("Nao conectado ao WiFi!");
}
if (clienteMQTT.isMqttConnected()) {
Serial.println("Conectado ao broker MQTT!");
} else {
Serial.println("Nao conectado ao broker MQTT!");
}
Serial.println("Nome do cliente: " + String(clienteMQTT.getMqttClientName())
+ " / Broker MQTT: " + String(clienteMQTT.getMqttServerIp())
+ " / Porta: " + String(clienteMQTT.getMqttServerPort())
);
delay(5000); // Ajuste o delay conforme necessário
}