#include <WiFi.h>
#include <ESP32Servo.h>
#include <DHT.h>
#include <PubSubClient.h>
#define pinoLedAzul 16
#define pinoLedAmarelo 17
#define pinoLedVermelho 22
#define pinoLedVerde 23
#define pinoDHT 15
#define pinoServoMotor 18
#define ID_MQTT "SENAI_IOT101" //Informe um ID qualquer
#define pubTemperatura "pubTemperatura" //Informe um Tópico qualquer para publicar
#define pubUmidade "pubUmidade"
#define pubLedAzul "pubLedAzul" //Informe um Tópico qualquer para publicar
#define pubLedVermelho "pubLedVermelho" //Informe um Tópico qualquer para publicar
#define pubLedVerde "pubLedVerde" //Informe um Tópico qualquer para publicar
#define subLedAzul "subLedAmarelo" //Informe um Tópico qualquer para assinar.
#define subServoMotor "subServoMotor" //Informe um Tópico qualquer para assinar.
bool statusLedAzul = 0; // Armazenar Status Led Azul
bool statusLedAmarelo = 0; // Armazenar Status Led Amarelo
bool statusLedVerde = 0; // Armazenar Status Led Verde
bool statusLedVermelho = 1; // // Armazenar Status LedVermelho
DHT dht(pinoDHT, DHT22);; // Instacia o Sensor de Temp/Umidade
Servo servo; // Instancia o ServoMotor
float valorTemperatura = 0; // Atribuição da temperatura
float valorUmidade = 0; // Atribuição da Humidade
const char* SSID = "Wokwi-GUEST"; // Nome da rede WiFi que deseja se conectar
const char* PASSWORD = ""; // Senha da rede WiFi que deseja se conectar
WiFiClient wifiClient;
const char* BROKER_MQTT = "mqtt-dashboard.com"; //URL do broker MQTT que se deseja utilizar
int BROKER_PORT = 1883; // Porta do Broker MQTT
PubSubClient MQTT(wifiClient); // Instancia o Cliente MQTT
//----------------------Declaração das Funções
void AtualizaConexoes();// Atualiza conexoes com WiFi e MQTT Broker.
void ConectaWiFi(); // Faz conexão com WiFi
void ConectaMQTT(); // Faz conexão com Broker MQTT
void EnviaPacote(); //
void RecebePacote(char* topic, byte* payload, unsigned int length);
//-----------------------------------------------
void setup()
{
// Inicializa comunicação serial
Serial.begin(115200);
// Pinos de Saída para atuação no Led
pinMode(pinoLedAzul,OUTPUT);
pinMode(pinoLedAmarelo,OUTPUT);
pinMode(pinoLedVerde,OUTPUT);
pinMode(pinoLedVermelho,OUTPUT);
digitalWrite(pinoLedVermelho, statusLedVermelho);
digitalWrite(pinoLedVerde, statusLedVerde);
digitalWrite(pinoLedAzul, statusLedAzul);
digitalWrite(pinoLedAmarelo, statusLedAmarelo);
// Inicia a atuação no Motor
servo.attach(pinoServoMotor, 500, 2400);
// Inicia a conexao do Wi-Fi
ConectaWiFi();
// Inicia conexao com o Broker MQQT
MQTT.setServer(BROKER_MQTT, BROKER_PORT);
// MQTT.setCallback(RecebePacote);
}
void loop()
{
AtualizaConexoes();
EnviaValores();
}
//------------------------------------------------
void ConectaWiFi()
{
if (WiFi.status() == WL_CONNECTED)
{
return;
}
Serial.print("Conectando-se na rede: ");
Serial.print(SSID);
Serial.println(" Aguarde!");
WiFi.begin(SSID, PASSWORD, 6); // Conecta na rede WI-FI
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado com sucesso, na rede: ");
Serial.print(SSID);
Serial.print(" IP obtido: ");
Serial.println(WiFi.localIP());
}
//------------------------------------------------
void ConectaMQTT()
{
while (!MQTT.connected())
{
Serial.print("Conectando ao Broker MQTT: ");
Serial.println(BROKER_MQTT);
if (MQTT.connect(ID_MQTT))
{
statusLedAzul = 1;
digitalWrite(pinoLedAzul, statusLedAzul);
Serial.println("Conectado ao Broker com sucesso!");
MQTT.publish(pubLedAzul, statusLedAzul);
}
else
{
statusLedAzul = 0;
digitalWrite(pinoLedAzul, statusLedAzul);
Serial.println("Nao foi possivel se conectar ao broker.");
Serial.println("Nova tentatica de conexao em 10s");
delay(10000);
}
}
}
//------------------------------------------------
void AtualizaConexoes()
{
if (!MQTT.connected())
{
ConectaMQTT();
}
ConectaWiFi(); //se não há conexão com o WiFI, a conexão é refeita
}
//------------------------------------------------
void EnviaValores()
{
valorTemperatura = dht.readTemperature();
valorUmidade = dht.readHumidity();
// Print the values of temperature in Celsus
Serial.print("Temperatue:\t");
Serial.print(dht.readTemperature(false));
Serial.println("C");
// print Humidity in perscent
Serial.println("Humidity: \t"+String(valorUmidade)+ "%");
// Print the values of the heat Index for both Units
Serial.print("Heat Index In Celsus: ");
Serial.println(dht.computeHeatIndex(valorTemperatura, valorUmidade, false));
MQTT.publish(pubTemperatura, valorTemperatura);
Serial.println("Leitura Temperatura. Payload enviado.");
MQTT.publish(pubUmidade, valorUmidade);
Serial.println("Leitura Umidade. Payload enviado.");
/*
}
if(sensor1==0) _sensor1=0;
if (led1==1 && _led1==0)
{
_led1=1;
MQTT.publish(pubStatusLed1IotSenai, "1");
Serial.println("Led 1 Ligado. Payload enviado.");
}
if (led1==0 && _led1==1)
{
_led1=0;
MQTT.publish(pubStatusLed1IotSenai, "0");
Serial.println("Led 1 Desligado. Payload enviado.");
}
*/
}