#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define WLAN_SSID "Wokwi-GUEST"
#define WLAN_PASS ""
#define MQTT_SERVER "broker.hivemq.com"
#define MQTT_PORT 1883
#define TOPIC "dashboard/topic_1"
String Json_Data = "";
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_PORT);
//Adafruit_MQTT_Subscribe pan_tilt = Adafruit_MQTT_Subscribe(&mqtt, TOPIC);
Adafruit_MQTT_Publish dht22_sensor = Adafruit_MQTT_Publish(&mqtt, TOPIC);
void MQTT_connect() {
int8_t ret;
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT...");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) {
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000);
retries--;
if (retries == 0) {
while (1);
}
}
Serial.println("MQTT Connected!");
}
void setup() {
Serial.begin(115200);
delay(10);
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: "); Serial.println(WiFi.localIP());
dht.begin();
Serial.println();
}
void loop() {
MQTT_connect();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Json_Data = "{ \"temperature\": " + String(t, 2) +
", \"humidity\": " + String(h, 2) +
" }";
if (!dht22_sensor.publish(Json_Data.c_str())) {
Serial.println(F("Failed to Publish data..."));
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.println("%\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println("°C");
}
delay(100); // delay 60 second
}