Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #include <WiFi.h>
- #include <FirebaseESP32.h>
- #include <addons/TokenHelper.h>
- #include <addons/RTDBHelper.h>
- #include <TinyGPSPlus.h>
- #include <NTPClient.h>
- #include <WiFiUdp.h>
- #define btn 21
- #define echoPin 23 // Echo Pin
- #define trigPin 22 // Trigger Pin
- int f = 0 ;
- int distance_FULL_BIN = 20;
- int btn_state = 0;
- long duration, distance;
- //--------------------------Firebase Variables
- String string_lat = "0.00";
- String string_lng = "0.00";
- String formattedDate;
- String dayStamp;
- String timeStamp;
- String binState;// Empty/Full
- //---------------------------------------------
- TinyGPSPlus gps;
- const unsigned long interval = 1000; // Send every 5 seconds
- unsigned long previousMillis = 0;
- WiFiUDP ntpUDP;
- NTPClient timeClient(ntpUDP);
- #define WIFI_SSID "7771"
- #define WIFI_PASSWORD "112345677"
- #define API_KEY "AIzaSyBpMXzUecKFHuAepfFcDIt-4Cq-YE_ucRg"
- #define USER_EMAIL "aiioq111112@gmail.com"
- #define USER_PASSWORD "123456789"
- #define DATABASE_URL "project-b1c1d-default-rtdb.firebaseio.com"
- #define DATABASE_SECRET "iD1W8EpEndvrza8891JtQSnvUVpVbXJnno5RWYkw"
- FirebaseData fbdo;
- FirebaseAuth auth;
- FirebaseConfig config;
- unsigned long dataMillis = 0;
- void setup() {
- Serial.begin(115200);
- Serial2.begin(9600);
- pinMode(trigPin, OUTPUT);
- pinMode(echoPin, INPUT);
- pinMode(btn, INPUT_PULLUP);
- WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
- Serial.print("Connecting to Wi-Fi");
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.print(".");
- delay(300);
- }
- timeClient.begin();
- timeClient.setTimeOffset(10800);
- 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.reconnectNetwork(true);
- fbdo.setBSSLBufferSize(4096, 1024);
- fbdo.setResponseSize(4096);
- String base_path = "/UsersData/";
- config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h
- 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 loop() {
- gps_loop();
- send_to_firebase();
- time_and_date();
- ultrasonic ();
- read_btn();
- if (distance > distance_FULL_BIN && btn_state == 0 && f == 0) {
- f = 1;
- time_and_date_send_to_firebase();
- }
- }//end of Loop
- void gps_loop() {
- while (Serial2.available() > 0) {
- if (gps.encode(Serial2.read())) {
- if (gps.location.isValid()) {
- string_lat = String(gps.location.lat(), 6);
- string_lng = String(gps.location.lng(), 6);
- Serial.print("Latitude: ");
- Serial.println(string_lat);
- Serial.print("Longitude: ");
- Serial.println(string_lng);
- }
- else {
- string_lat = "21.861541";
- string_lng = "39.067064";
- // Serial.println("inv..");
- }
- }
- }
- }
- void time_and_date() {
- while (!timeClient.update()) {
- timeClient.forceUpdate();
- }
- formattedDate = timeClient.getFormattedDate();
- //Serial.println(formattedDate);
- // Extract date
- int splitT = formattedDate.indexOf("T");
- dayStamp = formattedDate.substring(0, splitT);
- Serial.print("DATE: ");
- Serial.println(dayStamp);
- // Extract time
- timeStamp = formattedDate.substring(splitT + 1, formattedDate.length() - 1);
- Serial.print("HOUR: ");
- Serial.println(timeStamp);
- //delay(1000);
- }
- void send_to_firebase() {
- if (millis() - dataMillis > 5000 && Firebase.ready()) {
- dataMillis = millis();
- Firebase.setString(fbdo, "/lat", string_lat);
- Firebase.setString(fbdo, "/lng", string_lng);
- Firebase.setString(fbdo, "/Bin_State", binState);
- }
- }
- void time_and_date_send_to_firebase() {
- if (Firebase.ready()) {
- Firebase.setString(fbdo, "/empty", 1);//flag for Android App
- Firebase.setString(fbdo, "/time", timeStamp);
- Firebase.setString(fbdo, "/date", dayStamp);
- }
- }
- void ultrasonic () {
- digitalWrite(trigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(trigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(trigPin, LOW);
- duration = pulseIn(echoPin, HIGH);
- distance = duration * 0.034 / 2;
- //Serial.println(distance);
- delay(10);
- if (distance > distance_FULL_BIN) {
- binState = "Empty";
- }
- else {
- binState = "Full";
- f = 0;
- }
- }
- void read_btn() {
- btn_state = digitalRead(btn);
- Serial.print(btn_state);
- Serial.print(" | ");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement