Advertisement
ariefhendra

ESP32 Firebase BME280

Apr 10th, 2025
850
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 4.67 KB | Source Code | 0 0
  1. #include <Arduino.h>
  2. #if defined(ESP32)
  3.     #include <WiFi.h>
  4. #elif defined(ESP8266)
  5.     #include <ESP8266WiFi.h>
  6. #endif
  7. #include <Firebase_ESP_Client.h>
  8. #include <Wire.h>
  9. #include <Adafruit_Sensor.h>
  10. #include <Adafruit_BME280.h>
  11.  
  12. // Menyediakan info tentang proses pembuatan token.
  13. #include "addons/TokenHelper.h"
  14.  
  15. // Menyediakan info pencetakan muatan dari database dan fungsi bantuan lainnya
  16. #include "addons/RTDBHelper.h"
  17.  
  18. // Masukkan info untuk masuk ke jaringan internet
  19. #define WIFI_SSID "ISIKAN_NAMA_ACCESS_POINT"
  20. #define WIFI_PASSWORD "ISIKAN_KATA_SANDI_ACCESS_POINT"
  21.  
  22. // Masukkan Project API Key dari Firebase
  23. #define API_KEY "ISIKAN_PROJECT_API_KEY_DARI_FIREBASE"
  24.  
  25. // Masukkan alamat email dan kata sandi untuk mengakses Firebase
  26. #define USER_EMAIL "ISIKAN_EMAIL_UNTUK_LOGIN"
  27. #define USER_PASSWORD "ISIKAN_KATA_SANDI_UNTUK_LOGIN"
  28.  
  29. // Masukkan alamat (URL) dari Real Time Database (RTDB)
  30. #define DATABASE_URL "ISIKAN ALAMAT (URL) DARI DATABASE"
  31.  
  32. // Mendeklarasikan objek-objek dari Firebase
  33. FirebaseData fbdo;
  34. FirebaseAuth auth;
  35. FirebaseConfig config;
  36.  
  37. // Variabel untuk menyimpan USER UID dari Firebase
  38. String uid;
  39.  
  40. // Berbagai variable untuk menyimpan direktori (path) dari database
  41. String databasePath;
  42. String tempPath;
  43. String humPath;
  44. String presPath;
  45.  
  46. // Mendeklarasikan sensor BME280 dan parameter pengukuran
  47. Adafruit_BME280 bme; // Menggunakan koneksi I2C
  48. float temperature;
  49. float humidity;
  50. float pressure;
  51.  
  52. // Mendeklarasikan variable pewaktu (untuk mengirim data setiap 3 menit)
  53. unsigned long sendDataPrevMillis = 0;
  54. unsigned long timerDelay = 180000;
  55.  
  56. // Fungsi untuk mengecek koneksi sensor BME280
  57. void initBME()
  58. {
  59.     if (!bme.begin(0x76))
  60.     {
  61.         Serial.println("Could not find a valid BME280 sensor, check wiring!");
  62.         while (1);
  63.     }
  64. }
  65.  
  66. // Fungsi untuk koneksi ke WiFi
  67. void initWiFi()
  68. {
  69.     WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  70.     Serial.print("Connecting to WiFi ..");
  71.     while (WiFi.status() != WL_CONNECTED)
  72.     {
  73.         Serial.print('.');
  74.         delay(1000);
  75.     }
  76.     Serial.println(WiFi.localIP());
  77.     Serial.println();
  78. }
  79.  
  80. // Fungsi untuk menulis nilai pecahan (float) ke database
  81. void sendFloat(String path, float value)
  82. {
  83.     if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value))
  84.     {
  85.         Serial.print("Writing value: ");
  86.         Serial.print (value);
  87.         Serial.print(" on the following path: ");
  88.         Serial.println(path);
  89.         Serial.println("PASSED");
  90.         Serial.println("PATH: " + fbdo.dataPath());
  91.         Serial.println("TYPE: " + fbdo.dataType());
  92.     }
  93.     else
  94.     {
  95.         Serial.println("FAILED");
  96.         Serial.println("REASON: " + fbdo.errorReason());
  97.     }
  98. }
  99.  
  100. void setup()
  101. {
  102.     Serial.begin(115200);
  103.    
  104.     // Inisialisasi sensor BME280
  105.     initBME();
  106.    
  107.     // Inisialisasi WiFi
  108.     initWiFi();
  109.  
  110.     // Memasukkan API KEY dari Firebase
  111.     config.api_key = API_KEY;
  112.  
  113.     // Memasukkan info login ke Firebase
  114.     auth.user.email = USER_EMAIL;
  115.     auth.user.password = USER_PASSWORD;
  116.    
  117.     // Memasukkan alamat (URL) dari database
  118.     config.database_url = DATABASE_URL;
  119.    
  120.     Firebase.reconnectWiFi(true);
  121.     fbdo.setResponseSize(4096);
  122.  
  123.     // Menjalankan fungsi pemanggil bila pembuatan token berjalan lama
  124.     config.token_status_callback = tokenStatusCallback; //mengakses addons/TokenHelper.h
  125.  
  126.     // Mendeklarasikan jumlah pengulangan maksimal untuk pembuatan token
  127.     config.max_token_generation_retry = 5;
  128.    
  129.     // Menjalankan proses otentikasi di Firebase
  130.     Firebase.begin(&config, &auth);
  131.  
  132.     // Mendapatkan USER UID setelah beberapa saat
  133.     Serial.println("Getting User UID");
  134.     while ((auth.token.uid) == "")
  135.     {
  136.         Serial.print('.');
  137.         delay(1000);
  138.     }
  139.  
  140.     // Menampilkan USER UID dari Firebase
  141.     uid = auth.token.uid.c_str();
  142.     Serial.print("User UID: ");
  143.     Serial.print(uid);
  144.    
  145.     // Mengatur direktori untuk database
  146.     databasePath = "/UsersData/" + uid;
  147.     // Mendefinisikan direktori untuk hasil pembacaan sensor
  148.     // --> UsersData/<user_uid>/sensor/temperature
  149.     tempPath = databasePath + "/sensor/temperature";
  150.     // --> UsersData/<user_uid>/sensor/humidity
  151.     humPath = databasePath + "/sensor/humidity";
  152.     // --> UsersData/<user_uid>/sensor/pressure
  153.     presPath = databasePath + "/sensor/pressure";
  154. }
  155.  
  156. void loop()
  157. {
  158.     // Mengirimkan hasil pembacaan sensor ke database
  159.     if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0))
  160.     {
  161.         sendDataPrevMillis = millis();
  162.        
  163.         // Mengambil hasil pembacaan yang terbaru
  164.         temperature = bme.readTemperature();
  165.         humidity = bme.readHumidity();
  166.         pressure = bme.readPressure()/100.0F;
  167.        
  168.         // Mengirimkan hasil pembacaan ke database
  169.         sendFloat(tempPath, temperature);
  170.         sendFloat(humPath, humidity);
  171.         sendFloat(presPath, pressure);
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement