#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
//***************** MQTT *****************************************************
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* hostname = "test.mosquitto.org";
WiFiClient espClient;
PubSubClient client(espClient);
const char* espClientName = "jardim1"; //Esse ID deverá ser unico
int PORTNUM = 1883;
#define ledPin 2 // LED do ESP32
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado a rede SSID: ");
Serial.println(ssid);
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void MQTTSubscribe() {
client.subscribe("medonho");
}
void callback(char* topic, byte* payload, unsigned int length) {
String messageTemp = "";
for (int i = 0; i < length; i++) {
messageTemp += (char)payload[i];
}
Serial.print("Mensagem recebida em ");
Serial.println(topic);
if (String(topic) == "medonho") {
if (messageTemp == "off") {
digitalWrite(ledPin, LOW);
Serial.println("LED OFF");
} else if (messageTemp == "on") {
digitalWrite(ledPin, HIGH);
Serial.println("LED ON");
}
}
}
void connectMQTT() {
while (!client.connected()) {
Serial.println("Conectando ao MQTT...");
if (client.connect(espClientName)) {
Serial.println("Conectado ao Broker!");
MQTTSubscribe();
} else {
Serial.print("Falha, estado: ");
Serial.println(client.state());
delay(2000);
}
}
}
void setup_MQTT() {
client.setServer(hostname, PORTNUM);
client.setCallback(callback);
}
//***************************************************************************
// Display I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pinos
#define sensorDeUmidade 34
#define buzina 25
#define BtnMais 18
#define BtnMenos 19
// Variáveis
int limiteDeUmidade = 30;
int valorDoSensorDeUmidade = 0;
int umidadeDe_0a100 = 0;
unsigned long previousMillis = 0;
unsigned long interval = 2000;
void setup() {
Serial.begin(9600);
pinMode(buzina, OUTPUT);
pinMode(BtnMais, INPUT_PULLUP);
pinMode(BtnMenos, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Monitor Medonho");
lcd.setCursor(0, 1);
lcd.print("para Jardim");
delay(3000);
lcd.clear();
setup_wifi();
setup_MQTT();
}
void loop() {
if (!client.connected()) {
connectMQTT();
}
client.loop();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int pot = analogRead(36); // A0 do ESP32 = GPIO36
String potString = String(pot);
client.publish("medonho", potString.c_str());
Serial.print("Enviado: ");
Serial.println(potString);
}
}