#include <LiquidCrystal.h>
#include <PubSubClient.h>
#include <WiFi.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int BuzzerPin = 2;
int ledgreen = 3;
int ledred = 4;
int fan = 5;
int sensor = A0;
float gas = 0;
const char* ssid = "Eddu_Guest";
const char* password = "";
const char* mqtt_server = "localhost";
const char* mqtt_topic = "detector/gas";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
pinMode(ledgreen, OUTPUT);
pinMode(ledred, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(BuzzerPin, OUTPUT);
lcd.begin(16, 2);
lcd.setCursor(2, 0);
lcd.print("GAS DETECTOR");
delay(1500);
lcd.setCursor(0, 1);
lcd.print("----");
delay(1000);
lcd.setCursor(4, 1);
lcd.print("----");
delay(1000);
lcd.setCursor(8, 1);
lcd.print("----");
delay(1000);
lcd.setCursor(12, 1);
lcd.print("----");
delay(1000);
lcd.clear();
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
client.setServer(mqtt_server, 1883);
}
void loop() {
// Mantém a conexão WiFi
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Conexão WiFi perdida. Tentando reconectar...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao WiFi...");
}
Serial.println("Reconectado ao WiFi");
}
gas = analogRead(sensor);
gas = gas * 100 / 1023;
Serial.print("Gás: ");
Serial.println(gas);
lcd.setCursor(0, 0);
lcd.println("GAS =");
lcd.print(gas);
lcd.print(" % ");
// Envia dados para o broker MQTT
if (!client.connected()) {
if (client.connect("arduino-client")) {
Serial.println("Conectado ao servidor MQTT");
} else {
Serial.println("Falha na conexão MQTT. Tentando novamente em 5 segundos...");
delay(5000);
return;
}
}
client.publish(mqtt_topic, String(gas).c_str());
if (gas > 50) {
digitalWrite(BuzzerPin, HIGH);
digitalWrite(ledred, HIGH);
digitalWrite(ledgreen, LOW);
digitalWrite(fan, HIGH);
lcd.setCursor(0, 1);
lcd.print("<< DANGER !!! >>");
} else {
digitalWrite(BuzzerPin, LOW);
digitalWrite(ledred, LOW);
digitalWrite(ledgreen, HIGH);
digitalWrite(fan, LOW);
lcd.setCursor(0, 1);
lcd.print("<OUT OF DANGER.>");
}
delay(100);
}