#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <iostream>
#include <string>
String nome_wifi = "Wokwi-GUEST";
String senha = "";
WiFiClientSecure espClient;
PubSubClient MQTT(espClient);
char* broker = "9d19cc700cc44018b16cc529b323fc9d.s1.eu.hivemq.cloud";
LiquidCrystal_I2C lcd(0x27, 16, 2); // cria um objeto com as propriedades
//vamos usar o potenciometro pra simular o sensor
int pinoUmidadeSolo = 36; // pino VP
const int SOLO_SECO_VALOR = 3800;
const int SOLO_UMIDO_VALOR = 1440;
String condicaoSolo;
void setup() {
Serial.begin(9600);
conectarWifi();
espClient.setInsecure();
MQTT.setServer(broker, 8883);
// char estadoStr[30];
lcd.init();
lcd.backlight();
// mensagem inicial(apenas uma vez)
lcd.setCursor(1, 0);
lcd.print("Sensor Umidade");
delay(2000);
}
void loop() {
if (MQTT.connected() == false) {
conectarMQTT();
}
MQTT.loop();
// adicionando leitura do sensor de umidade do solo
int umidadeSoloBruto = analogRead(pinoUmidadeSolo); // lê o valor de 1440 a 4095
// converte o valor bruto para porcentagem (0 a 100%)
int umidadeSoloPorcentagem = map(umidadeSoloBruto, SOLO_SECO_VALOR, SOLO_UMIDO_VALOR, 0, 100);
umidadeSoloPorcentagem = constrain(umidadeSoloPorcentagem, 0, 100);
Serial.println(umidadeSoloPorcentagem);
lcd.clear();
// o valor IDEAL pode mudar dependendo da cultura sendo plantada
if(umidadeSoloBruto <= 1440){
condicaoSolo = "Muito Úmido";
} else if (umidadeSoloBruto > 1440 && umidadeSoloBruto < 2200) {
condicaoSolo = "Ideal";
} else {
condicaoSolo = "Muito Seco";
}
lcd.setCursor(0,0);
lcd.print("Umid. Solo: ");
lcd.print(umidadeSoloPorcentagem);
lcd.print("% ");
lcd.setCursor(0,1);
lcd.print(condicaoSolo);
// publicando no MQTT
char umidadeSoloStr[10];
dtostrf(umidadeSoloPorcentagem, 1, 2, umidadeSoloStr);
MQTT.publish("projeto/26/sensorUmidade", umidadeSoloStr, true);
MQTT.publish("projeto/26/sensorUmidade", condicaoSolo.c_str(), true);
delay(3000);
}
void conectarWifi() {
WiFi.begin(nome_wifi, senha);
while (WiFi.status() != WL_CONNECTED) {
Serial.print("."); // so pra exibir uns pontos enquanto carrega
delay(500);
}
Serial.print("Wifi conectado com sucesso!");
}
void conectarMQTT() {
Serial.println("Conectando ao MQTT.");
if (MQTT.connect("envio26", "ricardodias", "TesteSenai1")) {
Serial.println("Conectado ao MQTT com sucesso.");
} else {
Serial.println("Erro ao conectar!");
}
}