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

IOP391_arduino

Copyright
© © All Rights Reserved
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
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