#include <PubSubClient.h>
#include <WiFi.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PW ""
#define MQTT_BROKER "broker.hivemq.com" //MQTT BROKER IP
#define MQTT_PORT 1883 //MQTT BROKER PORT
#define ECHO_PIN 18
#define TRIG_PIN 19
int clikc=0;
float distance=4000;
float distanceLest=4000;
int lastTime=0;
int MotionSensor=0;
int i=0,intOnOFFAuto=0;
WiFiClient espClient;
PubSubClient client (espClient);
void setup() {
pinMode(14, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(19, OUTPUT);
pinMode(18, INPUT);
Serial.begin(115200);
WiFi.begin(WIFI_SSID,WIFI_PW);
while (WiFi.status() !=WL_CONNECTED) {
delay(250);
Serial.println(".");
}
Serial.println("Hello from ESP8266");
Serial.print("Connected to hotspot: ");
Serial.println(WIFI_SSID);
Serial.print("IP address is: ");
Serial.println(WiFi.localIP());
Serial.println("--------------------------");
client.setServer(MQTT_BROKER, MQTT_PORT);
client.setCallback(callback);
reconnect();
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
distance=readDistanceCM();
if (((distanceLest>5)&&(distance<=5))){
clikc++;
Serial.print("clikc: ");
Serial.println(clikc);
lastTime=millis();
switch (clikc) {
case 1:
digitalWrite(14, 1);
client.publish("probil1","1");
break;
case 2:
digitalWrite(12, 1);
client.publish("probil2","1");
break;
case 3:
digitalWrite(13, 1);
client.publish("probil3","1");
break;
case 4:
digitalWrite(14, 0);
client.publish("probil3","0");
break;
case 5:
digitalWrite(12, 0);
client.publish("probil2","0");
break;
case 6:
digitalWrite(13, 0);
client.publish("probil1","0");
clikc=0;
lastTime=0;
break;
}
}
if (!client.connected()) {
reconnect();
}
if(clikc!=0){
MotionSensor=digitalRead(5);
if (MotionSensor==1){
lastTime=millis();
Serial.print("MotionSensor: ");
Serial.println(MotionSensor);
}
} client.loop();
if ((millis()-lastTime)>5000){
digitalWrite(14, 0);
client.publish("probil1","0");
digitalWrite(12, 0);
client.publish("probil2","0");
digitalWrite(13, 0);
client.publish("probil3","0");
clikc=0;
lastTime=0;
}
delay(100);
distanceLest=distance;
}
void callback(char*topic,byte*payload,unsigned int length) {
}
void reconnect() {
while (!client.connected()) {
Serial.println ("Connecting to MQTT...");
if (client.connect("ESPDG","Bogdan","awpgocsgo123" )) {
Serial.println ("Connected to breoker");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}