#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int umidade;
int temperatura;
// --- WiFi ---
#include <WiFi.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClient nodemcuClient;
// --- MQTT ---
#include <PubSubClient.h>
const char* mqtt_Broker = "test.mosquitto.org";
const char* mqtt_ClientID = "termometro-001";
PubSubClient client(nodemcuClient);
const char* topicoTemperatura = "home_28123/temperatura";
const char* topicoUmidade = "home_28123/umidade";
// --- DISPLAY ---
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
configurarDisplay();
conectarWifi();
client.setServer(mqtt_Broker, 1883);
}
/* Exibindo somente a função
loop(), omitindo o restante do código */
void loop() {
if (!client.connected()) {
reconectarMQTT();
}
medirTemperaturaUmidade();
mostrarTemperaturaUmidade();
publicarTemperaturaUmidadeNoTopico();
}
/* Exibindo somente a função
conectarWifi(), omitindo o
restante do código */
void conectarWifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
/* Exibindo somente a função
reconectarMQTT(), omitindo o
restante do código */
void reconectarMQTT() {
while (!client.connected()) {
client.connect(mqtt_ClientID);
}
}
/* Exibindo somente a função
configurarDisplay(), omitindo o
restante do código */
void configurarDisplay() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);
display.clearDisplay();
}
/* Exibindo somente a função
mostrarMensagemNoDisplay(),
omitindo o restante do código */
void mostrarMensagemNoDisplay(const char* texto1, int medicao, const char* texto2) {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print(texto1);
display.setTextSize(5);
display.setCursor(20, 20);
display.print(medicao);
display.setTextSize(2);
display.print(texto2);
display.display();
delay(2000);
}
/* Exibindo somente a função
mostrarTemperaturaUmidade(),
omitindo o restante do código */
void mostrarTemperaturaUmidade() {
mostrarMensagemNoDisplay("Temperatura", (temperatura), " C");
mostrarMensagemNoDisplay("Umidade", (umidade), " %");
}
void medirTemperaturaUmidade() {
umidade = dht.readHumidity();
temperatura = dht.readTemperature(false);
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print("°C");
Serial.print(" ");
Serial.print("Umidade: ");
Serial.println(umidade);
delay(5000);
}
/* Exibindo somente a função
publicarTemperaturaUmidadeNoTopico(),
omitindo o restante do código */
void publicarTemperaturaUmidadeNoTopico() {
client.publish(topicoTemperatura, String(temperatura).c_str(), true);
client.publish(topicoUmidade, String(umidade).c_str(), true);
}