Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <WiFi.h>
- #include <FirebaseESP32.h>
- #include <addons/TokenHelper.h>
- #include <addons/RTDBHelper.h>
- #include <Wire.h>
- #include "MAX30105.h"
- #include "heartRate.h"
- #define WIFI_SSID "network6"
- #define WIFI_PASSWORD "123456789"
- #define API_KEY "AIzaSyBHPhlRb697I7HeNDQj3ZXelL_X20rbcLE"
- #define USER_EMAIL "safwan.092@gmail.com"
- #define USER_PASSWORD "123456789"
- #define DATABASE_URL "esp32-c3-heart-rate-simple-default-rtdb.firebaseio.com"
- #define DATABASE_SECRET "GTOXJ7U28jDiNchkwTP7dE8PCnyPkPDMyfyM3lso"
- FirebaseData fbdo;
- FirebaseAuth auth;
- FirebaseConfig config;
- MAX30105 particleSensor;
- const byte RATE_SIZE = 4;
- byte rates[RATE_SIZE];
- byte rateSpot = 0;
- long lastBeat = 0;
- float beatsPerMinute;
- int beatAvg;
- float temperature;
- unsigned long dataMillis = 0;
- long irValue;
- long delta;
- String path1, path2;
- void setup() {
- Serial.begin(115200);
- delay(10000);
- Serial.println("11111");
- init_heart_rate_sensor();
- connect_WiFi_Firebase();
- }
- void loop() {
- read_heart_rate_sensor();
- }
- void init_heart_rate_sensor() {
- Serial.println("Initializing...");
- // Initialize sensor
- if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
- {
- Serial.println("MAX30105 was not found. Please check wiring/power. ");
- while (1);
- }
- Serial.println("Place your index finger on the sensor with steady pressure.");
- particleSensor.setup(); //Configure sensor with default settings
- particleSensor.enableDIETEMPRDY(); //Enable the temp ready interrupt. This is required.
- particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
- particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
- }
- void connect_WiFi_Firebase() {
- 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;
- 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_heart_rate_sensor() {
- irValue = particleSensor.getIR();
- if (checkForBeat(irValue) == true)
- {
- //We sensed a beat!
- delta = millis() - lastBeat;
- lastBeat = millis();
- beatsPerMinute = 60 / (delta / 1000.0);
- if (beatsPerMinute < 255 && beatsPerMinute > 20) {
- rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
- rateSpot %= RATE_SIZE; //Wrap variable
- //Take average of readings
- beatAvg = 0;
- for (byte x = 0 ; x < RATE_SIZE ; x++)
- beatAvg += rates[x];
- beatAvg /= RATE_SIZE;
- }
- }
- Serial.print("IR=");
- Serial.print(irValue);
- Serial.print(", BPM=");
- Serial.print(beatsPerMinute);
- Serial.print(", Avg BPM=");
- Serial.print(beatAvg);
- //temperature = particleSensor.readTemperature();
- //Serial.print(", temperatureC=");
- //Serial.print(temperature, 4);
- if (irValue < 50000)
- Serial.print(" No finger?");
- Serial.println();
- //sned_data_to_firebase();
- }
- void sned_data_to_firebase() {
- if (millis() - dataMillis > 20000 && Firebase.ready()) {
- dataMillis = millis();
- path1 = "/UsersData/";
- path1 += auth.token.uid.c_str();
- path1 += "/beatAvg";
- path2 = "/UsersData/";
- path2 += auth.token.uid.c_str();
- path2 += "/temperature";
- Serial.printf("Set beatAvg... %s\n", Firebase.setInt(fbdo, path1, beatAvg) ? "ok" : fbdo.errorReason().c_str());
- Serial.printf("Set temperature... %s\n", Firebase.setInt(fbdo, path2, int(temperature)) ? "ok" : fbdo.errorReason().c_str());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement