#include "EspMQTTClient.h"
#include "DHTesp.h"
#include <AccelStepper.h>
AccelStepper stepper1(AccelStepper::FULL4WIRE, 13, 12, 14, 27);
EspMQTTClient client("Wokwi-GUEST", "", "test.mosquitto.org", "mqtt-mack-pub-sub", 1883);
const int DHT_PIN = 15;
DHTesp dhtSensor;
void setup() {
stepper1.setMaxSpeed(8000);
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
client.enableDebuggingMessages();
}
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 2000;
float calculateComfortIndex(float temperature, float humidity) {
return (0.7 * temperature) + (0.3 * humidity);
}
float currentFanSpeed = 0;
void controlFanSpeed(float temperature, float humidity) {
currentFanSpeed = 0;
if (temperature > 5 && temperature <= 15) {
currentFanSpeed = 500; // Low speed
} else if (temperature > 15 && temperature <= 25) {
currentFanSpeed = 1000; // Medium speed
} else if (temperature > 25 && temperature <= 35) {
currentFanSpeed = 1500; // High speed
} else if (temperature > 35) {
currentFanSpeed = 2000; // Maximum speed
}
stepper1.setSpeed(currentFanSpeed);
stepper1.runSpeed();
}
void readSendData() {
unsigned long currentTime = millis();
if (currentTime - lastSendTime >= sendInterval) {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String jsonData = "{\"temperature\":" + String(data.temperature, 2) + ",\"humidity\":" + String(data.humidity, 2) + ",\"fanSpeed\":" + String(currentFanSpeed, 2) + "}";
client.publish("univaq/smartfan", jsonData);
lastSendTime = currentTime;
}
}
void onConnectionEstablished() {
}
void loop() {
client.loop();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
controlFanSpeed(data.temperature, data.humidity);
readSendData();
}