//Bibliotecas---------------------------------------------------
#include <Adafruit_SSD1306.h>
#include <DHTesp.h>
#include <PubSubClient.h>
#include <WiFi.h>
#include <Wire.h>
//Constantes e variáveis----------------------------------------
//Configura pino do DHT22 no ESP32
const int DHT_PIN = 15;
// Configure uma instância do DHT
DHTesp dhtSensor;
// Cria as variáveis que serão enviadas ao broker
float Temperatura, Umidade;
String leituras;
// Declaração para o display SSD1306 connectado ao I2C (pinos SDA, SCL)
Adafruit_SSD1306 display(128, 64, &Wire, -1);
//Config. SSID e Senha do WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//Config. Servidor MQTT
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
//Cria um cliente que pode se conectar a um endereço IP e porta de internet especificados,
//conforme definido em client.connect().
WiFiClient Client_Leandro;
//Esta biblioteca permite que você envie e receba mensagens MQTT.
PubSubClient client(Client_Leandro);
//Função que verifica se foi estabelecida conexão
void reconnect()
{
while (!client.connected())
{
Serial.print("Estabelecendo conexao MQTT...");
if (client.connect("Client_Leandro"))
{
Serial.println("Conectado");
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 5 segundos");
delay(5000);
}
}
}
void publica_dados()
{
leituras = Temperatura;
leituras += ",";
leituras += Umidade;
client.publish("Client_Leandro", String(leituras).c_str()); // Publica a string concatenada
delay(1000);
}
void setup()
{
// Inicia o Serial Monitor
Serial.begin(115200);
// Inicia o DHT22
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Inicia do display OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) // Endereço 0x3C para 128x64
{
Serial.println(F("Conexão SSD1306 falhou"));
for(;;);
}
Serial.print("Conectando... ");
Serial.print(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password,6);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("WiFi connectado!");
Serial.println("Endereco IP: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_port);
}
void loop()
{
//Faz a leitura de temperatura
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Temperatura = dhtSensor.getTemperature();
Umidade = dhtSensor.getHumidity();
//Exibe a temperatura no Serial Monitor
Serial.println("Temperatura: " + String(data.temperature, 2) + "°C");
Serial.println("Umidade: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(2000);
if (!client.connected())
{
reconnect();
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.println("Temperatura: " + String(data.temperature, 2) + "°C");
display.println("Umidade: " + String(data.humidity, 1) + "%");
display.display();
publica_dados();
delay(5000);
}