#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
const int DHT_PIN = 18;
WiFiClient espClient;
PubSubClient client(espClient);
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const char* mqtt_server = "mqtt3.thingspeak.com";
const char* publishTopic = "channels/2664945/publish"; // Sensor data channel
const char* subscribeTopicFor_Command_1 = "channels/2664945/subscribe/fields/field2";
const char* subscribeTopicFor_Command_2 = "channels/2664945/subscribe/fields/field1";
const char* mqtt_client_id = "KQkrGTwdHxEYMgMzIAcOKAw";
const char* mqtt_username = "KQkrGTwdHxEYMgMzIAcOKAw";
const char* mqtt_password = "LNC37SUqnIfOXziTifulQ2XC";
const unsigned long postingInterval = 10L * 1000L;
DHTesp dhtSensor;
unsigned long lastUploadedTime = 0;
void setup_wifi() {
delay(10);
Serial.print("\nConectando ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado\n IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conexão MQTT...");
if (client.connect(mqtt_client_id, mqtt_username, mqtt_password)) {
Serial.println("conectado!");
client.subscribe(subscribeTopicFor_Command_1);
client.subscribe(subscribeTopicFor_Command_2);
} else {
Serial.print("falhou! rc=");
Serial.print(client.state());
Serial.println(" tentado novamente em 2 seg.");
delay(2000);
}
}
}
void setup() {
Serial.begin(9600);
while (!Serial)
delay(10);
setup_wifi();
client.setServer(mqtt_server, 1883);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Initialize the DHT22 sensor
}
void loop() {
if (!client.connected())
reconnect();
client.loop();
if (millis() - lastUploadedTime > postingInterval) {
float temperature = dhtSensor.getTemperature();
float humidity = dhtSensor.getHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
// Publicar temperatura
String tempPayload = "field1=" + String(temperature, 2) + "&status=MQTTPUBLISH";
if (client.publish(publishTopic, tempPayload.c_str())) {
Serial.println("Temperatura: " + String(temperature));
Serial.println("Mensagem publicada [channels/2664945/publish]: " + tempPayload);
} else {
Serial.println("Falha ao publicar a mensagem de temperatura.");
}
// Publicar umidade
String humPayload = "field2=" + String(humidity, 2) + "&status=MQTTPUBLISH";
if (client.publish(publishTopic, humPayload.c_str())) {
Serial.println("Hudidade: " + String(humidity));
Serial.println("Mensagem publicada [channels/2664945/publish]: " + humPayload);
} else {
Serial.println("Falha ao publicar a mensagem de umidade.");
}
} else {
Serial.println("Leitura inválida. Pulando publicação MQTT.");
}
lastUploadedTime = millis();
}
}