Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <WiFi.h>
- #include <MFRC522.h>
- #include <FirebaseESP32.h>
- #include <addons/TokenHelper.h>
- #include <addons/RTDBHelper.h>
- #define arduino_pin 22 // ESP32 pin GPIO22
- #define button_pin 34 // ESP32 pin GPIO34
- #define buzzer_pin 21 // ESP32 pin GPIO19
- #define SS_pin 5 // ESP32 pin GPIO5
- #define RST_pin 27 // ESP32 pin GPIO27
- #define WIFI_SSID "network"
- #define WIFI_PASSWORD "123456789"
- #define API_KEY "AIzaSyAjIS98IBo4xU9DAqFbo6ZJLPqBwzrJvzk"
- #define USER_EMAIL "smartpostcar@gmail.com"
- #define USER_PASSWORD "123456789"
- #define DATABASE_URL "postcar-57fe1-default-rtdb.firebaseio.com"
- #define DATABASE_SECRET "7yJzXNiqlkQZUFb3Ul2KJACDHnztTMrDoFLgPOZM"
- MFRC522 rfid(SS_pin, RST_pin);
- FirebaseData fbdo;
- FirebaseAuth auth;
- FirebaseConfig config;
- unsigned long dataMillis = 0;
- int button_pressed_flag = 0;
- int button_state = 0;
- int home1_value_from_DB = 0;
- int home2_value_from_DB = 0;
- int home3_value_from_DB = 0;
- String home_1_RFID_Tag_UUID = "53 6F 36 D1 00 00 01";
- String home_2_RFID_Tag_UUID = "53 78 36 D1 00 00 01";
- String home_3_RFID_Tag_UUID = "53 79 36 D1 00 00 01";
- String Post_Office_RFID_Tag_UUID = "53 6E 36 D1 00 00 01";
- int home_1_RFID_State = 0;
- int home_2_RFID_State = 0;
- int home_3_RFID_State = 0;
- int PO_RFID_State = 0;
- void setup()
- {
- Serial.begin(115200);
- setup_rfid_reader();
- setup_inputs_and_outputs();
- connect_to_WiFi_and_Firebase_database();
- }
- void loop()
- {
- //read_from_database();
- read_RFID_tag();
- }
- void read_button_and_send_data_to_database(int i) {
- button_state = digitalRead(button_pin);
- if (button_state == 1 && button_pressed_flag == 0) {
- digitalWrite(buzzer_pin, 1);
- button_pressed_flag = 1;
- write_to_database(i);
- button_pressed_flag = 0;
- digitalWrite(buzzer_pin, 0);
- digitalWrite(arduino_pin, LOW);
- }
- }
- void read_RFID_tag() {
- // Look for new cards
- if ( ! rfid.PICC_IsNewCardPresent())
- {
- return;
- }
- // Select one of the cards
- if ( ! rfid.PICC_ReadCardSerial())
- {
- return;
- }
- //Show UID on serial monitor
- String content = "";
- // buzz();
- for (byte i = 0; i < rfid.uid.size; i++)
- {
- Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
- Serial.print(rfid.uid.uidByte[i], HEX);
- content.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
- content.concat(String(rfid.uid.uidByte[i], HEX));
- }
- Serial.println();
- content.toUpperCase();
- Serial.println(content.substring(1));
- rfid.PICC_HaltA(); // halt PICC
- rfid.PCD_StopCrypto1(); // stop encryption on PCD
- read_from_database();
- if (content.substring(1) == home_1_RFID_Tag_UUID) {
- Serial.println("[Home 1] Card authenticated");
- if (home1_value_from_DB == 1 && home_1_RFID_State == 0) {
- home_1_RFID_State = 1;
- //Stop Car Command untill button is pressed
- while (home_1_RFID_State) {
- //Stop Car Command Here
- digitalWrite(arduino_pin, HIGH); //High signal on pin 22 of the ESP32 to Stop CAR
- //buzzer ON
- digitalWrite(buzzer_pin, 1);
- read_button_and_send_data_to_database(1);// reset [Home 1] Database
- }
- }
- delay(5000);
- }
- else if (content.substring(1) == home_2_RFID_Tag_UUID) {
- Serial.println("[Home 2] Card authenticated");
- if (home2_value_from_DB == 1 && home_2_RFID_State == 0) {
- home_2_RFID_State = 1;
- //Stop Car Command untill button is pressed
- while (home_2_RFID_State) {
- //Stop Car Command Here
- digitalWrite(arduino_pin, HIGH); //High signal on pin 22 of the ESP32 to Stop CAR
- //buzzer ON
- digitalWrite(buzzer_pin, 1);
- read_button_and_send_data_to_database(2);// reset [Home 2] Database
- }
- }
- delay(5000);
- }
- else if (content.substring(1) == home_3_RFID_Tag_UUID) {
- Serial.println("[Home 3] Card authenticated");
- Serial.println(home3_value_from_DB);
- if (home3_value_from_DB == 1 && home_3_RFID_State == 0) {
- home_3_RFID_State = 1;
- }
- Serial.println(home_3_RFID_State);
- //Stop Car Command untill button is pressed
- while (home_3_RFID_State) {
- Serial.println("While loop [Home 3]");
- //Stop Car Command Here
- digitalWrite(arduino_pin, HIGH); //High signal on pin 22 of the ESP32 to Stop CAR
- //buzzer ON
- digitalWrite(buzzer_pin, 1);
- read_button_and_send_data_to_database(3);// reset [Home 3] Database
- }
- delay(5000);
- }
- else if (content.substring(1) == Post_Office_RFID_Tag_UUID) {
- Serial.println("[P.O.] Card authenticated");
- if (PO_RFID_State == 0) {
- PO_RFID_State = 1;
- //Stop Car Command untill someone from the database is requesting POST
- while (PO_RFID_State) {
- Serial.println("While Loop");
- //Stop Car Command Here
- digitalWrite(arduino_pin, HIGH); //High signal on pin 22 of the ESP32 to Stop CAR
- //read Data From Data Base
- read_from_database();
- //if someone has requested POST move the car from Post Office
- if (home1_value_from_DB == 1 || home2_value_from_DB == 1 || home3_value_from_DB == 1) {
- PO_RFID_State = 0;
- }
- }
- }
- delay(5000);
- }
- }
- void setup_rfid_reader() {
- SPI.begin(); // init SPI bus
- rfid.PCD_Init(); // init MFRC522
- }
- void setup_inputs_and_outputs() {
- pinMode(button_pin, INPUT);
- pinMode(buzzer_pin, OUTPUT);
- pinMode(arduino_pin, OUTPUT);
- digitalWrite(buzzer_pin, LOW);
- digitalWrite(arduino_pin, LOW);
- }
- void connect_to_WiFi_and_Firebase_database() {
- WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
- Serial.print("Connecting to Wi-Fi");
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.print(".");
- delay(300);
- }
- Serial.println();
- Serial.print("Connected with IP: ");
- Serial.println(WiFi.localIP());
- Serial.println();
- Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
- config.api_key = API_KEY;
- auth.user.email = USER_EMAIL;
- auth.user.password = USER_PASSWORD;
- config.database_url = DATABASE_URL;
- Firebase.reconnectWiFi(true);
- fbdo.setResponseSize(4096);
- String base_path = "/UsersData/";
- config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h
- config.max_token_generation_retry = 5;
- Firebase.begin(&config, &auth);
- String var = "$userId";
- String val = "($userId === auth.uid && auth.token.premium_account === true && auth.token.admin === true)";
- Firebase.setReadWriteRules(fbdo, base_path, var, val, val, DATABASE_SECRET);
- }
- void read_from_database() {
- if (millis() - dataMillis > 500 && Firebase.ready()) {
- dataMillis = millis();
- //////////////////////////////////////////////////////////
- //home_1
- if (Firebase.RTDB.getInt(&fbdo, "/home1")) {
- if (fbdo.dataType() == "int") {
- home1_value_from_DB = fbdo.intData();
- Serial.print("home1_value_from_DB = ");
- Serial.println(home1_value_from_DB);
- }
- }
- else {
- Serial.println(fbdo.errorReason());
- }
- //////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////
- //home_2
- if (Firebase.RTDB.getInt(&fbdo, "/home2")) {
- if (fbdo.dataType() == "int") {
- home2_value_from_DB = fbdo.intData();
- Serial.print("home2_value_from_DB = ");
- Serial.println(home2_value_from_DB);
- }
- }
- else {
- Serial.println(fbdo.errorReason());
- }
- //////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////
- //home_3
- if (Firebase.RTDB.getInt(&fbdo, "/home3")) {
- if (fbdo.dataType() == "int") {
- home3_value_from_DB = fbdo.intData();
- Serial.print("home3_value_from_DB = ");
- Serial.println(home3_value_from_DB);
- }
- }
- else {
- Serial.println(fbdo.errorReason());
- }
- //////////////////////////////////////////////////////////
- }
- }
- void write_to_database(int j) {
- if (j == 1 && home_1_RFID_State == 1) {
- Serial.printf("Set int... %s\n", Firebase.setInt(fbdo, "/home1", 0) ? "ok" : fbdo.errorReason().c_str());
- home_1_RFID_State = 0;
- }
- else if (j == 2 && home_2_RFID_State == 1) {
- Serial.printf("Set int... %s\n", Firebase.setInt(fbdo, "/home2", 0) ? "ok" : fbdo.errorReason().c_str());
- home_2_RFID_State = 0;
- }
- else if (j == 3 && home_3_RFID_State == 1) {
- Serial.printf("Set int... %s\n", Firebase.setInt(fbdo, "/home3", 0) ? "ok" : fbdo.errorReason().c_str());
- home_3_RFID_State = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement