#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#define PHOTORESISTOR 34
#define LED_PIN 5
#define TRIG 4
#define ECHO 2
#define PORT 1883
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const char* MQTT_CLIENT_ID = "ESPLab5";
const char* MQTT_BROKER = "broker.mqtt-dashboard.com";
const char* MQTT_USER = "";
const char* MQTT_PASSWORD = "";
const char* MQTT_TOPIC = "Lab5_temp_topic";
WiFiClient espClient;
PubSubClient client(espClient);
double distance = 0;
boolean alart=true;
String message;
boolean turned=false;
boolean flag=false;
void callback(char* topic, byte* payload, unsigned int length){
String message;
for(int i=0;i<length;i++){
message += (char)payload[i];
}
// Десеріалізація JSON повідомлення
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload, length);
String command = doc["command"].as<String>();
// Керування дозволом на роботу мікроконтролера
if (command == "on") {
turned = true;
Serial.println("Device enabled");
} else if (command == "off") {
turned = false;
digitalWrite(LED_PIN, LOW); // Вимкнути світлодіод, якщо пристрій вимкнено
Serial.println("Device disabled");
}
}
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED){
delay(100);
}
client.setServer(MQTT_BROKER, PORT);
client.setCallback(callback);
client.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASSWORD);
client.subscribe(MQTT_TOPIC);
String message = "Alright!";
client.publish(MQTT_TOPIC, message.c_str());
client.loop();
}
void loop() {
// put your main code here, to run repeatedly:
if(!client.connected()){
Serial.println("Client is not connected");
while (!client.connected()) {
if (client.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASSWORD)) {
Serial.println("Connected to MQTT Broker!");
client.subscribe(MQTT_TOPIC);
} else {
Serial.println("Failed try again in 5 seconds");
delay(5000);
}
}
Serial.println("Client is connected");
}
client.loop();
int value_phr = analogRead(PHOTORESISTOR);
//Serial.print("Value = ");
//Serial.println(value_phr);
if(value_phr > 2000 && turned){
digitalWrite(TRIG, 0);
digitalWrite(TRIG, 1);
delayMicroseconds(12);
digitalWrite(TRIG, 0);
distance = pulseIn(ECHO,1) /(2*29);
//Serial.println(distance);
if(distance > 200){
digitalWrite(LED_PIN,0);
if(alart && !flag){
alart = false;
flag = true;
message = "{\"Alert\":\"All Good!\"}";
client.publish(MQTT_TOPIC, message.c_str());
}
} else {
digitalWrite(LED_PIN,1);
alart = true;
flag = false;
message = "{\"Alert\":\"Someone close!\"}";
client.publish(MQTT_TOPIC, message.c_str());
}
} else if(!turned) {
message = "{\"Alert\":\"You can enable system\"}";
client.publish(MQTT_TOPIC, message.c_str());
digitalWrite(LED_PIN,0);
}
}