//Definição das bibliotecas
#include "EspMQTTClient.h"
#include <LiquidCrystal_I2C.h>
//Configuraçao do MQTT
EspMQTTClient client(
"Wokwi-GUEST",
"",
"broker.hivemq.com",
"detector/gas",
1883
);
//Definição dos pinos
const int POTENTIOMETER_PIN = 34;
const int BUTTON_PIN = 4;
const int BUZZER_PIN = 5;
//Definição do limiar
const float GAS_THRESHOLD = 500;
//Configuração do display
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Configuração inicial
void setup()
{
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
lcd.init();
lcd.backlight();
client.enableDebuggingMessages();
}
//Definição de variáveis para controle do tempo
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 2000;
//Função para enviar os valores de gás
void enviarValorGas()
{
unsigned long currentTime = millis();
if (currentTime - lastSendTime >= sendInterval)
{
float gasValue = analogRead(POTENTIOMETER_PIN);
client.publish("detector/gas", String(gasValue));
if (gasValue > GAS_THRESHOLD)
{
tone(BUZZER_PIN, 1000, 500);
}
else
{
noTone(BUZZER_PIN);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gas Value:");
lcd.setCursor(0, 1);
lcd.print(gasValue);
lastSendTime = currentTime;
}
}
//Função de conexão estabelecida do MQTT
void onConnectionEstablished()
{
}
//Loop principal
void loop()
{
client.loop();
enviarValorGas();
if (digitalRead(BUTTON_PIN) == LOW)
{
client.publish("detector/button", "pressed");
}
}