//# Professor Cristiano Teixeira
//# Mudanças do original Sob Licença Apache 2.0
// Para testar isolado sem o outro projeto
// Abra o site:
// 1. http://www.hivemq.com/demos/websocket-client/
// 2. Click em "Connect"
// 3. No campo Publish, deixe o Topic como "sei2026"
// 4. Escreva alguma mensagem, por exemplo: {"Botao" : True}
// 5. click em "Publish"
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// credenciais Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// detalhes do MQTT Broker
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* mqtt_topic = "sei2026";
// DHT Sensor settings
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float temperatura = 0;
float umidade = 0;
float tempanterior = 0;
WiFiClient espClient;
PubSubClient client(espClient);
void leitura(){
// Lendo o sensor
temperatura = dht.readTemperature();
umidade = dht.readHumidity();
// Checando se as leituras são validas
if (isnan(temperatura) || isnan(umidade)) {
Serial.println("Falha ao ler do sensor DHT.");
return;
}
}
void publica()
{
// Print data to Serial Monitor
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.println(" %");
// Publicando dados no topico MQTT
String payload = "{\"temperatura\": " + String(temperatura) + ", \"umidade\": " + String(umidade) + "}";
client.publish(mqtt_topic, payload.c_str());
}
void setup() {
Serial.begin(115200);
// Initializando sensor DHT
dht.begin();
// Conectando no Wi-Fi
conectawifi();
// Configurando Servidor MQTT
client.setServer(mqtt_server, mqtt_port);
// Conectando no MQTT broker
connectToMQTT();
}
void conectawifi()
{
Serial.print("Conectando no Wi-Fi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(" Conectado!");
}
void connectToMQTT() {
//Serial.print("Conectando no MQTT...");
while (!client.connected()) {
String clientId = "AulaSEI";
clientId += String(random(0xffff), HEX);
Serial.print("ID do Cliente: ");
Serial.println(clientId);
client.connect(clientId.c_str());
if (client.connect(clientId.c_str())) {
//Serial.println(" Conectado Ao MQTT!");
} else {
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" Tentando novamente em 5 segundos...");
delay(5000);
}
}
}
void loop() {
// Checando a conexão com MQTT a cada novo loop
if (!client.connected()) {
connectToMQTT();
}
client.loop();
leitura();
// se quiser só enviar quando tiver alteração descomente a linha abaixo
//if (temperatura != tempanterior)
{
publica();
// comente a linha abaixo se for deixar como if de alteração
delay(5000); // Espera 5 segundos antes de fazer leitura.
// alteração de estado para quando tem o if
tempanterior = temperatura;
}
}