#include <WiFi.h>
#include <PubSubClient.h>
//parametros do WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//parametros do servidor mqtt
const char* mqtt_server = "gasgasgas-xyhgk3y24zkq.cedalo.cloud";
const char* usuario = "admin";
const char* senha = "1otYVMmG8mhBfbirG6ufHScBSlp0d1n1";
// O pino de leitura é o D34
//O potenciômetro está simulando o sensor de gás
int pino_de_leitura = 34;
int leitura = 0;
const int leitura_de_vazamento = 360;//valor especulado para um vazamento de gas
//lembrando que a leitura analógica do esp32 vai de 0 até 4096
//, logo esse mesmo valor em um arduino uno seria 4 vezes menor
int buzzer = 12, led = 14;
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi(){
delay(10);
//conecta na rede wifi
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Conectado ao WiFi!");
Serial.println("Endereco P: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
setup_wifi();
client.setServer(mqtt_server, 1883);
}
unsigned long antes = 0;
void loop() {
delay(10);//DELAY ACELERA A SIMULAÇÃO NO WOKWI
leitura = analogRead(pino_de_leitura);
if((millis()-antes)>=1000){
antes = millis();
Serial.println(leitura);
}
if(!client.connected()) {
reconnect();
}
client.loop();
if(leitura>=leitura_de_vazamento){
client.publish("casa/vazagas", "alerta");
digitalWrite(buzzer, 1);
digitalWrite(led, 1);
}else{
digitalWrite(buzzer, 0);
digitalWrite(led, 0);
if(millis()%2000==0)
client.publish("casa/vazagas", "tranquilo");
}
}
void reconnect(){
//loop até ser conectado
while(!client.connected()){
Serial.println("Tentando reconectar ao broker MQTT...");
//tentativa de conexão
if(client.connect("4f5c8b5d-06d1-4083", usuario, senha)){
Serial.println("Conectado");
//INSCREVE-SE ao tópico casa/vazagas
client.subscribe("casa/vazagas");
Serial.println("inscreve-se em um tópico");
}else{
Serial.print("Falhou, rc=");
Serial.print(client.state());
Serial.println("Tentar novamente em 5 segundos...");
delay(5000);
}
}
}