0% found this document useful (0 votes)
1 views

IOP391_arduino

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1 views

IOP391_arduino

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#include <ESP8266WiFi.

h>
#include <Servo.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

const char *ssid = "Hal";


const char *pass = "1234567890";
#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "hai23102003"
#define MQTT_PASS "aio_kQzv2891motA7clI4rjb3zVtKrg7"

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200, 60000);
Servo entryServo;
Servo exitServo;

int carEnter = D1;


int carExited = D2;
int slot1 = D6;
int slot2 = D7;
int slot3 = D8;
int count = 0;
int CLOSE_ANGLE = 90;
int OPEN_ANGLE = 0;

bool s1_occupied = false;


bool s2_occupied = false;
bool s3_occupied = false;

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);

// Các feed MQTT


Adafruit_MQTT_Publish CarsParked = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/CarsParked");
Adafruit_MQTT_Publish EntrySlot1 = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/EntrySlot1");
Adafruit_MQTT_Publish ExitSlot1 = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/ExitSlot1");
Adafruit_MQTT_Publish EntrySlot2 = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/EntrySlot2");
Adafruit_MQTT_Publish ExitSlot2 = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/ExitSlot2");
Adafruit_MQTT_Publish EntrySlot3 = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/EntrySlot3");
Adafruit_MQTT_Publish ExitSlot3 = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME
"/f/ExitSlot3");

void setup() {
Serial.begin(9600);
WiFi.begin(ssid, pass);
Serial.print("Connecting to WiFi");

while (WiFi.status() != WL_CONNECTED) {


Serial.print(".");
delay(500);
}
Serial.println("\nWiFi connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());

timeClient.begin();
mqtt.connect();

entryServo.attach(D4);
exitServo.attach(D5);
pinMode(carEnter, INPUT);
pinMode(carExited, INPUT);
pinMode(slot1, INPUT);
pinMode(slot2, INPUT);
pinMode(slot3, INPUT);
}

void loop() {
MQTT_connect();
timeClient.update();

String currentTime = String(timeClient.getHours()) + ":" +


String(timeClient.getMinutes());

bool entryDetected = !digitalRead(carEnter);


bool exitDetected = !digitalRead(carExited);
bool s1 = digitalRead(slot1);
bool s2 = digitalRead(slot2);
bool s3 = digitalRead(slot3);

if (entryDetected) {
count++;
entryServo.write(OPEN_ANGLE);
delay(3000);
entryServo.write(CLOSE_ANGLE);
CarsParked.publish(count); // Xuất bản số lượng xe đỗ hiện tại
}

if (exitDetected) {
count--;
exitServo.write(OPEN_ANGLE);
delay(3000);
exitServo.write(CLOSE_ANGLE);
CarsParked.publish(count); // Cập nhật số lượng xe khi xe rời đi
}

// Kiểm tra và cập nhật thời gian vào/ra cho từng vị trí
checkSlot(s1, s1_occupied, EntrySlot1, ExitSlot1, currentTime);
checkSlot(s2, s2_occupied, EntrySlot2, ExitSlot2, currentTime);
checkSlot(s3, s3_occupied, EntrySlot3, ExitSlot3, currentTime);
}

void checkSlot(bool slotStatus, bool &slotOccupied, Adafruit_MQTT_Publish


&entryFeed, Adafruit_MQTT_Publish &exitFeed, String currentTime) {
if (slotStatus && !slotOccupied) {
slotOccupied = true;
entryFeed.publish((char *)currentTime.c_str()); // Xuất bản thời gian vào
} else if (!slotStatus && slotOccupied) {
slotOccupied = false;
exitFeed.publish((char *)currentTime.c_str()); // Xuất bản thời gian ra
}
}

void MQTT_connect() {
int8_t ret;

if (mqtt.connected()) {
Serial.println("MQTT already connected");
return;
}

Serial.print("Connecting to MQTT... ");


uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // Không thể kết nối
Serial.println(mqtt.connectErrorString(ret));
mqtt.disconnect();
Serial.println("Retrying MQTT connection...");
delay(5000); // Thời gian chờ giữa các lần thử
retries--;
if (retries == 0) {
Serial.println("Failed to connect to MQTT after 3 attempts.");
return;
}
}
Serial.println("MQTT Connected!");
}

You might also like