#include <stdio.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define relay 14
#define buzzer 12
String autopump = "on";
#define DHTPIN 32
#define DHTTYPE DHT22
DHT dht(DHTPIN,DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.netpie.io";
const int mqtt_port = 1883;
const char* mqtt_Client = "3e413262-08da-4414-8580-47775e25e0c1";
const char* mqtt_username = "mAP9ofmtRpCzZzcegsiFpuJXMs7L72Fv";
const char* mqtt_password = "XjrCf6Sk5uFz4UqPYoaDEB1Rt1BfC6jN";
WiFiClient espClient;
PubSubClient client(espClient);
char msg[100];
void reconnect() {
while(!client.connected()) {
Serial.print("Attempting MQTT connection... ");
if(client.connect(mqtt_Client, mqtt_username, mqtt_password)) {
Serial.println("Connected");
client.subscribe("@msg/#");
} else{
Serial.print("failed, ro=");
Serial.print(client.state());
Serial.println("tryy again in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic,byte* payload,unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("]");
String message;
String tpc;
for(int i=0; i < length; i++){
message = message + (char)payload[i];
}
Serial.println(message);
tpc = getMsg(topic, message);
}
void setup(){
pinMode(relay, OUTPUT);
digitalWrite(relay,LOW);
delay(100);
digitalWrite(relay, HIGH);
pinMode(buzzer, OUTPUT);
Serial.begin(115200);
dht.begin();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,password);
while(WiFi.status() !=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
client.setServer(mqtt_server,mqtt_port);
client.setCallback(callback);
}
void loop() {
if(!client.connected()) {
reconnect();
}
float h = dht.readHumidity();
float t = dht.readTemperature();
if(autopump == "on") {
if(h>80){
digitalWrite(relay, HIGH);
} else {
digitalWrite(relay, LOW);
}
}
int r = digitalRead(relay);
String data = "{\"data\":{\"Humidity\": " + String(h) + ",\"Temperature\": " + String(t) + ",\"relay\":" + String(r) + "}}";
Serial.println(data);
data.toCharArray(msg , (data.length() + 1));
client.publish("@shadow/data/update", msg);
client.loop();
delay(1000);
}
String getMsg(String topic_, String message_){
if(topic_=="@msg/@msg/relay"){
if(message_=="on") {
Serial.println("relay=HIGH");
digitalWrite(relay, HIGH);
autopump = "off";
} else if(message_=="off") {
Serial.println("relay=HIGH");
digitalWrite(relay, LOW);
autopump = "on";
}
}
return autopump;
}