#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
const int LED01 = 25;
const int LED02 = 33;
//SENSOR DE TEMPERATURA DHT22
#define DHTTYPE DHT22 //modelo do sensor - DHT22
#define DHTPIN 5 //pino do sensor
DHT dht(DHTPIN, DHTTYPE); //variavel para leitura
int temperatura;
int atrasoTemp = 2000; //tempo do delay para chamar novamente a função de medir temperatura
unsigned long tempoAnteriorTemp = 0; //variável para delay usando millis
//BROKER MQTT
const char* mqtt_server = "broker.hivemq.com"; //servidor mqtt
WiFiClient espClient; //abstrai
PubSubClient client(espClient); //abstrai
unsigned long lastMsg = 0; //unsigned long = inteiro de 32 bits sem sinal
#define MSG_BUFFER_SIZE 100 //abstrai
char msg[MSG_BUFFER_SIZE]; //abstrai
void conectarBroker() {
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
if (!client.connected()) {
Serial.print("Conectando ao servidor MQTT...");
String clientId = "";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("Conectado");
client.subscribe("Oliveira/vent"); //inscrição no tópico para enviar mensagens
//client.subscribe("n35cd/teste");
}
}
}
void reconectarBroker() {
if (!client.connected()) {
conectarBroker();
}
client.loop();
}
void callback(String topic, byte* payload, unsigned int lenght) {
if ((char)payload[0] == '0') {
digitalWrite(LED01, LOW); //Desligar o ventilador
}
if ((char)payload[0] == '1') {
digitalWrite(LED01, HIGH); //Ligar o Ventilador
}
}
//MEDIR TEMPERATURA
void medirTemperatura() {
long int tempo = millis();
if (tempo > (tempoAnteriorTemp + atrasoTemp)) { //Vai entrar no if de atrasoTemp em atrasoTem vezes
tempoAnteriorTemp = tempo;
temperatura = dht.readTemperature(); //lê temperatura no dht22
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(F("°C"));
sprintf(msg, "%d", temperatura); //monta string
client.publish("Oliveira/temp", msg);//publica a mensagem no broker mqtt no tópico: lucas/temp
//umidade
int umidade = dht.readHumidity();
sprintf(msg, "%i", umidade);
client.publish("Oliveira/umi", msg);
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.println(F("%"));
}
}
void setup() {
Serial.begin(9600);
dht.begin();
Serial.print("Conectando-se ao Wi-Fi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
pinMode(LED01, OUTPUT);
conectarBroker();
}
void loop() {
reconectarBroker();
medirTemperatura();
}