#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#include <Stepper.h>
// WiFi configuration
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingsBoard configuration
const char* mqttServer = "demo.thingsboard.io";
const int mqttPort = 1883;
const char* accessToken = "8056JFadXJVg1etNwVbw"; // Replace with your ThingsBoard device token
WiFiClient wifiClient;
PubSubClient client(wifiClient);
#define DHTPIN 21
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int stepsPerRevolution = 10000;
Stepper myStepper(stepsPerRevolution, 33, 25, 26, 27);
const int relayPin = 15;
const int relayPin1 = 18;
const int pressureInput = 13;
const int potPin = 12;
const int voltage = 14;
const int pressureZero = 102.4;
const int pressureMax = 921.6;
const int pressuretransducermaxPSI = 100;
float pressureValue = 0;
float humidity = 0;
void setup() {
Serial.begin(115200);
// Initialize pins
pinMode(relayPin, OUTPUT);
pinMode(relayPin1, OUTPUT);
pinMode(pressureInput, INPUT);
pinMode(potPin, INPUT);
pinMode(voltage, INPUT);
myStepper.setSpeed(100);
dht.begin();
// Connect to WiFi
connectToWiFi();
// Configure MQTT client
client.setServer(mqttServer, mqttPort);
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// Read sensor data
pressureValue = analogRead(pressureInput);
pressureValue = ((pressureValue - pressureZero) * pressuretransducermaxPSI) / (pressureMax - pressureZero);
int potValue = analogRead(potPin);
humidity = map(potValue, 0, 4095, 0, 100);
int sensorValue1 = analogRead(voltage);
float voltage1 = (sensorValue1 / 4095.0) * 3.3 * 230.0;
float temperature = dht.readTemperature();
// Log sensor data
Serial.println("Sending data to ThingsBoard...");
String payload = String("{\"pressure\":") + pressureValue +
",\"humidity\":" + humidity +
",\"voltage\":" + voltage1 +
",\"temperature\":" + temperature +
",\"relayPin\":" + relayPin + "}";
if (client.publish("v1/devices/me/telemetry", payload.c_str())) {
Serial.println("Data sent successfully!");
} else {
Serial.println("Failed to send data.");
}
// Control relays and stepper motor
if (pressureValue > 108) {
digitalWrite(relayPin, HIGH);
} else if (pressureValue < 43) {
digitalWrite(relayPin, LOW);
myStepper.step(stepsPerRevolution);
}
if (temperature > 50.0) {
digitalWrite(relayPin1, HIGH);
} else {
digitalWrite(relayPin1, LOW);
}
delay(5000);
}
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("WiFi connected!");
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP32", accessToken, "")) {
Serial.println("Connected to MQTT!");
} else {
Serial.print("Failed to connect. Error state=");
Serial.println(client.state());
delay(2000);
}
}
}