Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #if defined(ESP32)
- #include <WiFi.h>
- #elif defined(ESP8266)
- #include <ESP8266WiFi.h>
- #endif
- #include <Firebase_ESP_Client.h>
- #include <Wire.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BME280.h>
- // Menyediakan info tentang proses pembuatan token.
- #include "addons/TokenHelper.h"
- // Menyediakan info pencetakan muatan dari database dan fungsi bantuan lainnya
- #include "addons/RTDBHelper.h"
- // Masukkan info untuk masuk ke jaringan internet
- #define WIFI_SSID "ISIKAN_NAMA_ACCESS_POINT"
- #define WIFI_PASSWORD "ISIKAN_KATA_SANDI_ACCESS_POINT"
- // Masukkan Project API Key dari Firebase
- #define API_KEY "ISIKAN_PROJECT_API_KEY_DARI_FIREBASE"
- // Masukkan alamat email dan kata sandi untuk mengakses Firebase
- #define USER_EMAIL "ISIKAN_EMAIL_UNTUK_LOGIN"
- #define USER_PASSWORD "ISIKAN_KATA_SANDI_UNTUK_LOGIN"
- // Masukkan alamat (URL) dari Real Time Database (RTDB)
- #define DATABASE_URL "ISIKAN ALAMAT (URL) DARI DATABASE"
- // Mendeklarasikan objek-objek dari Firebase
- FirebaseData fbdo;
- FirebaseAuth auth;
- FirebaseConfig config;
- // Variabel untuk menyimpan USER UID dari Firebase
- String uid;
- // Berbagai variable untuk menyimpan direktori (path) dari database
- String databasePath;
- String tempPath;
- String humPath;
- String presPath;
- // Mendeklarasikan sensor BME280 dan parameter pengukuran
- Adafruit_BME280 bme; // Menggunakan koneksi I2C
- float temperature;
- float humidity;
- float pressure;
- // Mendeklarasikan variable pewaktu (untuk mengirim data setiap 3 menit)
- unsigned long sendDataPrevMillis = 0;
- unsigned long timerDelay = 180000;
- // Fungsi untuk mengecek koneksi sensor BME280
- void initBME()
- {
- if (!bme.begin(0x76))
- {
- Serial.println("Could not find a valid BME280 sensor, check wiring!");
- while (1);
- }
- }
- // Fungsi untuk koneksi ke WiFi
- void initWiFi()
- {
- WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
- Serial.print("Connecting to WiFi ..");
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.print('.');
- delay(1000);
- }
- Serial.println(WiFi.localIP());
- Serial.println();
- }
- // Fungsi untuk menulis nilai pecahan (float) ke database
- void sendFloat(String path, float value)
- {
- if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value))
- {
- Serial.print("Writing value: ");
- Serial.print (value);
- Serial.print(" on the following path: ");
- Serial.println(path);
- Serial.println("PASSED");
- Serial.println("PATH: " + fbdo.dataPath());
- Serial.println("TYPE: " + fbdo.dataType());
- }
- else
- {
- Serial.println("FAILED");
- Serial.println("REASON: " + fbdo.errorReason());
- }
- }
- void setup()
- {
- Serial.begin(115200);
- // Inisialisasi sensor BME280
- initBME();
- // Inisialisasi WiFi
- initWiFi();
- // Memasukkan API KEY dari Firebase
- config.api_key = API_KEY;
- // Memasukkan info login ke Firebase
- auth.user.email = USER_EMAIL;
- auth.user.password = USER_PASSWORD;
- // Memasukkan alamat (URL) dari database
- config.database_url = DATABASE_URL;
- Firebase.reconnectWiFi(true);
- fbdo.setResponseSize(4096);
- // Menjalankan fungsi pemanggil bila pembuatan token berjalan lama
- config.token_status_callback = tokenStatusCallback; //mengakses addons/TokenHelper.h
- // Mendeklarasikan jumlah pengulangan maksimal untuk pembuatan token
- config.max_token_generation_retry = 5;
- // Menjalankan proses otentikasi di Firebase
- Firebase.begin(&config, &auth);
- // Mendapatkan USER UID setelah beberapa saat
- Serial.println("Getting User UID");
- while ((auth.token.uid) == "")
- {
- Serial.print('.');
- delay(1000);
- }
- // Menampilkan USER UID dari Firebase
- uid = auth.token.uid.c_str();
- Serial.print("User UID: ");
- Serial.print(uid);
- // Mengatur direktori untuk database
- databasePath = "/UsersData/" + uid;
- // Mendefinisikan direktori untuk hasil pembacaan sensor
- // --> UsersData/<user_uid>/sensor/temperature
- tempPath = databasePath + "/sensor/temperature";
- // --> UsersData/<user_uid>/sensor/humidity
- humPath = databasePath + "/sensor/humidity";
- // --> UsersData/<user_uid>/sensor/pressure
- presPath = databasePath + "/sensor/pressure";
- }
- void loop()
- {
- // Mengirimkan hasil pembacaan sensor ke database
- if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0))
- {
- sendDataPrevMillis = millis();
- // Mengambil hasil pembacaan yang terbaru
- temperature = bme.readTemperature();
- humidity = bme.readHumidity();
- pressure = bme.readPressure()/100.0F;
- // Mengirimkan hasil pembacaan ke database
- sendFloat(tempPath, temperature);
- sendFloat(humPath, humidity);
- sendFloat(presPath, pressure);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement