Advertisement
safwan092

Untitled

Feb 13th, 2024
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. #include <WiFi.h>
  2. #include <FirebaseESP32.h>
  3. #include <addons/TokenHelper.h>
  4. #include <addons/RTDBHelper.h>
  5. #include <Wire.h>
  6. #include "MAX30105.h"
  7. #include "heartRate.h"
  8.  
  9. #define WIFI_SSID "network6"
  10. #define WIFI_PASSWORD "123456789"
  11. #define API_KEY "AIzaSyBHPhlRb697I7HeNDQj3ZXelL_X20rbcLE"
  12. #define USER_EMAIL "safwan.092@gmail.com"
  13. #define USER_PASSWORD "123456789"
  14. #define DATABASE_URL "esp32-c3-heart-rate-simple-default-rtdb.firebaseio.com"
  15. #define DATABASE_SECRET "GTOXJ7U28jDiNchkwTP7dE8PCnyPkPDMyfyM3lso"
  16.  
  17.  
  18. FirebaseData fbdo;
  19. FirebaseAuth auth;
  20. FirebaseConfig config;
  21.  
  22. MAX30105 particleSensor;
  23.  
  24. const byte RATE_SIZE = 4;
  25. byte rates[RATE_SIZE];
  26. byte rateSpot = 0;
  27. long lastBeat = 0;
  28. float beatsPerMinute;
  29. int beatAvg;
  30. float temperature;
  31. unsigned long dataMillis = 0;
  32. long irValue;
  33. long delta;
  34. String path1, path2;
  35.  
  36. void setup() {
  37. Serial.begin(115200);
  38. delay(10000);
  39. Serial.println("11111");
  40. init_heart_rate_sensor();
  41. connect_WiFi_Firebase();
  42. }
  43.  
  44. void loop() {
  45. read_heart_rate_sensor();
  46. }
  47.  
  48.  
  49.  
  50.  
  51.  
  52. void init_heart_rate_sensor() {
  53. Serial.println("Initializing...");
  54. // Initialize sensor
  55. if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
  56. {
  57. Serial.println("MAX30105 was not found. Please check wiring/power. ");
  58. while (1);
  59. }
  60. Serial.println("Place your index finger on the sensor with steady pressure.");
  61.  
  62. particleSensor.setup(); //Configure sensor with default settings
  63. particleSensor.enableDIETEMPRDY(); //Enable the temp ready interrupt. This is required.
  64. particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
  65. particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
  66. }
  67.  
  68.  
  69. void connect_WiFi_Firebase() {
  70. WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  71. Serial.print("Connecting to Wi-Fi");
  72. while (WiFi.status() != WL_CONNECTED)
  73. {
  74. Serial.print(".");
  75. delay(300);
  76. }
  77. Serial.println();
  78. Serial.print("Connected with IP: ");
  79. Serial.println(WiFi.localIP());
  80. Serial.println();
  81. Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  82. config.api_key = API_KEY;
  83. auth.user.email = USER_EMAIL;
  84. auth.user.password = USER_PASSWORD;
  85. config.database_url = DATABASE_URL;
  86. Firebase.reconnectWiFi(true);
  87. fbdo.setResponseSize(4096);
  88. String base_path = "/UsersData/";
  89. config.token_status_callback = tokenStatusCallback;
  90. config.max_token_generation_retry = 5;
  91. Firebase.begin(&config, &auth);
  92. String var = "$userId";
  93. String val = "($userId === auth.uid && auth.token.premium_account === true && auth.token.admin === true)";
  94. Firebase.setReadWriteRules(fbdo, base_path, var, val, val, DATABASE_SECRET);
  95. }
  96.  
  97.  
  98. void read_heart_rate_sensor() {
  99. irValue = particleSensor.getIR();
  100.  
  101.  
  102. if (checkForBeat(irValue) == true)
  103. {
  104. //We sensed a beat!
  105. delta = millis() - lastBeat;
  106. lastBeat = millis();
  107.  
  108. beatsPerMinute = 60 / (delta / 1000.0);
  109.  
  110. if (beatsPerMinute < 255 && beatsPerMinute > 20) {
  111. rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
  112. rateSpot %= RATE_SIZE; //Wrap variable
  113.  
  114. //Take average of readings
  115. beatAvg = 0;
  116. for (byte x = 0 ; x < RATE_SIZE ; x++)
  117. beatAvg += rates[x];
  118. beatAvg /= RATE_SIZE;
  119. }
  120. }
  121.  
  122. Serial.print("IR=");
  123. Serial.print(irValue);
  124. Serial.print(", BPM=");
  125. Serial.print(beatsPerMinute);
  126. Serial.print(", Avg BPM=");
  127. Serial.print(beatAvg);
  128. //temperature = particleSensor.readTemperature();
  129. //Serial.print(", temperatureC=");
  130. //Serial.print(temperature, 4);
  131. if (irValue < 50000)
  132. Serial.print(" No finger?");
  133. Serial.println();
  134. //sned_data_to_firebase();
  135. }
  136.  
  137. void sned_data_to_firebase() {
  138. if (millis() - dataMillis > 20000 && Firebase.ready()) {
  139. dataMillis = millis();
  140. path1 = "/UsersData/";
  141. path1 += auth.token.uid.c_str();
  142. path1 += "/beatAvg";
  143. path2 = "/UsersData/";
  144. path2 += auth.token.uid.c_str();
  145. path2 += "/temperature";
  146. Serial.printf("Set beatAvg... %s\n", Firebase.setInt(fbdo, path1, beatAvg) ? "ok" : fbdo.errorReason().c_str());
  147. Serial.printf("Set temperature... %s\n", Firebase.setInt(fbdo, path2, int(temperature)) ? "ok" : fbdo.errorReason().c_str());
  148. }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement