#include "DHT.h"
#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
char ssid[] = "Wokwi-GUEST"; // your network SSID (name)
char pass[] = ""; // your network password
#define DHTPIN 4
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
void connectToWiFi() {
Serial.print("Connectiog to ");
WiFi.begin(ssid, pass);
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.print("Connected.");
}
// MQTT client
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
char *mqttServer = "broker.hivemq.com";
int mqttPort = 1883;
void setupMQTT() {
mqttClient.setServer(mqttServer, mqttPort);
// set the callback function
mqttClient.setCallback(callback);
}
void reconnect() {
Serial.println("Connecting to MQTT Broker...");
while (!mqttClient.connected()) {
Serial.println("Reconnecting to MQTT Broker..");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
// subscribe to topic
mqttClient.subscribe("/swa/commands");
}
}
}
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
connectToWiFi();
dht.begin();
setupMQTT();
}
const size_t BUFFER_SIZE = 100;
char data[BUFFER_SIZE + 1]; // Extra one for NULL terminator.
long now = millis();
long last_time = 0;
void loop() {
if (!mqttClient.connected())
reconnect();
mqttClient.loop();
now = millis();
if (now - last_time > 5000) {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Publishing data throgh MQTT
// Send data
sprintf(data, "%f", t);
Serial.println(data);
mqttClient.publish("/swa/temperature", data);
sprintf(data, "%f", h);
Serial.println(h);
mqttClient.publish("/swa/humidity", data);
last_time = now;
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Callback - ");
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
}