#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
// WiFi credentials
const char* ssid = "Wokwi-GUEST"; //WiFi SSID
const char* password = ""; // WiFi password
// ThingSpeak MQTT credentials
const char* server = "mqtt3.thingspeak.com"; // ThingSpeak MQTT broker
const int port = 1883; // MQTT port
const char* mqtt_username = "Ljg3EgkTGxoXHBgcBSIoCh4"; // MQTT username
const char* mqtt_client_id = "Ljg3EgkTGxoXHBgcBSIoCh4"; //MQTT clientId
const char* mqtt_password = "gcsZtTA3KZ1EbFAgP6TM/a7F"; // MQTT password
// ThingSpeak channel and topics
const char* channel_id = "2718384"; // Replace with your Channel ID
String topic_field1 = "channels/" + String(channel_id) + "/publish/fields/field1"; // Temperature
String topic_field2 = "channels/" + String(channel_id) + "/publish/fields/field2"; // Humidity
WiFiClient client;
PubSubClient clientmqtt(server, port, client);
DHTesp dht;
void setup() {
dht.setup(23, DHTesp::DHT22); //
Serial.begin(115200);
// Connect to WiFi
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
// Set MQTT server
clientmqtt.setServer(server, port);
Serial.println("ThingSpeak MQTT server ready");
}
void loop() {
// Ensure MQTT connection
if (!clientmqtt.connected()) {
Serial.println("MQTT not connected");
if (clientmqtt.connect(mqtt_client_id, mqtt_username, mqtt_password)) {
Serial.println("MQTT connected");
} else {
Serial.print("MQTT connection failed, state: ");
Serial.println(clientmqtt.state());
delay(3000);
return;
}
}
// Read data from DHT22 sensor
float temperature = dht.getTemperature();
float humidity = dht.getHumidity();
// Log the readings
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
// Publish temperature to field1
String payload_temp = String(temperature);
clientmqtt.publish(topic_field1.c_str(), payload_temp.c_str());
Serial.println("Temperature sent to field1");
// Publish humidity to field2
String payload_hum = String(humidity);
clientmqtt.publish(topic_field2.c_str(), payload_hum.c_str());
Serial.println("Humidity sent to field2");
clientmqtt.loop();
delay(20000); // Minimum 15 seconds per ThingSpeak update
}