// Referência:
// https://medium.com/engineering-iot/connecting-esp32-to-hivemq-for-real-time-iot-data-streaming-with-mqtt-8813f48cb1a4
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include "PubSubClient.h"
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define wifi_ssid "Wokwi-GUEST"
#define wifi_senha ""
const char *mqtt_servidor = "ac15cc038fc44e1d89ea8ff01708c3bd.s1.eu.hivemq.cloud";
const int mqtt_porta = 8883;
const char *mqtt_usuario = "hivemq.webclient.1763425147712";
const char *mqtt_senha = "L4v#lKDrQ08<1S&gEo,m";
#define topico_temp "dhtclaudio/temperatura"
#define topico_umid "dhtclaudio/umidade"
WiFiClientSecure clienteEsp;
PubSubClient cliente(clienteEsp);
void setup() {
Serial.begin(9600);
dht.begin();
setup_wifi();
clienteEsp.setInsecure();
cliente.setServer(mqtt_servidor, mqtt_porta);
delay(2000);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Conectando a ");
Serial.println(wifi_ssid);
WiFi.begin(wifi_ssid, wifi_senha);
int tentar = 0;
while (WiFi.status() != WL_CONNECTED && tentar < 40) {
delay(500);
Serial.print(".");
tentar++;
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\nFalha na conexão ao Wi-Fi");
while (1) {
delay(1000);
}
}
Serial.print("\nConectado. IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Umidade: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" °C\n");
while (!cliente.connected()) {
if (cliente.connect("Claudio ESP32", mqtt_usuario, mqtt_senha)) {
Serial.println("MQTT: Conectado");
}
else {
Serial.print("Erro MQTT: ");
Serial.println(cliente.state());
delay(2000);
}
}
Serial.println("MQTT: Enviando");
cliente.publish(topico_temp, String(t).c_str(), true);
cliente.publish(topico_umid, String(h).c_str(), true);
cliente.disconnect();
delay(120000); // 2 minutos
}