Untitled
unknown
plain_text
2 years ago
9.2 kB
5
Indexable
#include <Wire.h> #include <SPI.h> #include <Adafruit_BMP085.h> #include <DHT.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Firebase_ESP_Client.h> #include <time.h> #include <WiFi.h> //firebase stuff // Provide the token generation process info. #include "addons/TokenHelper.h" // Provide the RTDB payload printing info and other helper functions. #include "addons/RTDBHelper.h" // Insert your network credentials // const char* ssid = "<SSID>"; // const char* passphrase = "<PASSPHRASE>"; // Insert Firebase project API Key #define API_KEY "<API KEY>" // Insert Authorized Email and Corresponding Password #define USER_EMAIL "<EMAIL>" #define USER_PASSWORD "<PASSWORD>" // Insert RTDB URLefine the RTDB URL #define DATABASE_URL "<URL>" // Define Firebase objects FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config; // Variable to save USER UID String uid; // Database main path (to be updated in setup with the user UID) String databasePath; // Database child nodes String tempPath = "/temperature"; String humPath = "/humidity"; String presPath = "/pressure"; String timePath = "/timestamp"; // Parent Node (to be updated in every loop) String parentPath; int timestamp; FirebaseJson json; const char* ntpServer = "pool.ntp.org"; // Timer variables (send new readings every three minutes) unsigned long sendDataPrevMillis = 0; unsigned long timerDelay = 180000; // Load the BMP Library Adafruit_BMP085 bmp; // Data wire is plugged into pin 6 on the Arduino const int ONE_WIRE_BUS = 4; OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); // Load the DHT library for the humidity sensor #define DHTTYPE DHT11 // DHT 11 #define DHTPIN 0 // what pin we're connected to(DHT10 and DHT20 don't need define it) DHT dht(DHTPIN, DHTTYPE); // DHT11 DHT21 DHT22 //############################### //### Debug Mode ############### //############################## //Change between Serial and display output //Enter 1 for Debug, 0 for normal display output #define DEBUG 1 #if DEBUG == 1 #define output Serial #else #define output tft #endif //############################### //### End Debug Mode ############### //############################## // get current temperature from temp probe // double tempProbe() { // double result; // if (!sensors.getTempCByIndex(0) ) { // output.print("N/A"); // } else { // sensors.requestTemperatures(); // output.print(sensors.getTempCByIndex(0) * .98); // output.println("*C"); // } // return result; // } // //get current humidity // float getHumidity() { // float temp_hum_val[2] = {0}; // // Reading temperature or humidity takes about 250 milliseconds! // // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) // if (!dht.readTempAndHumidity(temp_hum_val)) { // output.print(temp_hum_val[0] * 1.055); // output.print("%"); // } else { // output.println("Failed to get humidity value."); // } // return temp_hum_val[0]; // } //initialize message void initialize(){ output.print("Initializing"); delay(800); output.print("."); delay(800); output.print("."); delay(800); output.println("."); delay(800); configTime(0, 0, ntpServer); // Assign the api key (required) config.api_key = API_KEY; // Assign the user sign in credentials auth.user.email = USER_EMAIL; auth.user.password = USER_PASSWORD; // Assign the RTDB URL (required) config.database_url = DATABASE_URL; Firebase.reconnectWiFi(true); fbdo.setResponseSize(4096); // Assign the callback function for the long running token generation task */ config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h // Assign the maximum retry of token generation config.max_token_generation_retry = 5; // Initialize the library with the Firebase authen and config Firebase.begin(&config, &auth); // Getting the user UID might take a few seconds Serial.println("Getting User UID"); while ((auth.token.uid) == "") { Serial.print('.'); delay(1000); } // Print user UID uid = auth.token.uid.c_str(); Serial.print("User UID: "); Serial.println(uid); // Update database path databasePath = "/UsersData/" + uid + "/readings"; output.println("Initialization Done!"); delay(1000); } unsigned long previousTime = 0; const long interval = 1000; class sensorData{ public: int temp; int humidity; int press; int probe; private: }; sensorData data; int ledPin = 2; // Initialize WiFi void initWiFi() { // WiFi.mode(WIFI_STA); //Optional WiFi.begin(ssid, passphrase); WiFi.disconnect(); delay(100); Serial.println("\nConnecting"); int timeout_counter = 0; while(WiFi.status() != WL_CONNECTED){ Serial.println(WiFi.status()); delay(1000); timeout_counter++; if(timeout_counter >= 20){ ESP.restart(); } } Serial.println("\nConnected to the WiFi network"); Serial.print("Local ESP32 IP: "); Serial.println(WiFi.localIP()); digitalWrite(ledPin, HIGH); } void setup() { Serial.begin(115200); Wire.begin(); delay(1000); initWiFi(); //display initialization message initialize(); // //Start Temp/Humidity Sensor // bool success1 = dht.begin(); // if (success1) { // output.println("DHT Sensor init success"); // delay(1000); // } else if (!dht.begin()) { // output.println("Could not find a valid DHT sensor, check wiring!"); // } // //Start external Temp Probe Sensor sensors.begin(); // bool success2 = sensors.begin(); // if (success2) { // output.println("Temperature Probe Sensor init success"); // delay(1000); // } else if (!sensors.begin()) { // output.println("Could not find a valid Temperature Probe sensor, check wiring!"); // } //initialize the bmp180 temperature sensor bool success = bmp.begin(); if (success) { output.println("BMP180 init success"); delay(1000); } else if (!bmp.begin()) { output.println("Could not find a valid BMP180 sensor, check wiring!"); delay(1000); } //output to Serial that setup completed Serial.println("Initialization Complete!"); //this is mostly for Serial output output.println(); } void loop() { // Send new readings to database if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)){ sendDataPrevMillis = millis(); //Get current timestamp timestamp = getTime(); Serial.print ("time: "); Serial.println (timestamp); parentPath= databasePath + "/" + String(timestamp); json.set(tempPath.c_str(), String(getTemp())); json.set(humPath.c_str(), String(getHumidity())); json.set(presPath.c_str(), String(getPress()/100.0F)); json.set(timePath, String(timestamp)); Serial.printf("Set json... %s\n", Firebase.RTDB.setJSON(&fbdo, parentPath.c_str(), &json) ? "ok" : fbdo.errorReason().c_str()); } unsigned long currentTime = millis(); if(millis() - previousTime >= 5000){ data.temp = getTemp(); data.press = getPress(); data.humidity = getHumidity(); data.probe = tempProbe(); previousTime = currentTime; data.temp; data.press; data.humidity; data.probe; Serial.println(); } } //get current temperature float getTemp() { float readTemp; float t = bmp.readTemperature(); //read temperature sensor if (bmp.readTemperature()) { Serial.print("Temperature:"); output.print(bmp.readTemperature() / 1.032); output.println("*C"); } else if (!bmp.readTemperature()){ Serial.print("Temperature:"); output.print(t); output.println("*C"); } else { output.println ("Unav"); } return readTemp; } // //get current pressure double getPress() { double readPress; //read pressure sensor if (bmp.readPressure()) { Serial.print("Pressure:"); output.print(bmp.readPressure() / 1000); output.println("KPA"); } else { output.println ("Press Unavail"); } return readPress; } // get current temperature from temp probe double tempProbe() { double result; if (!sensors.getTempCByIndex(0) ) { output.print("Probe: "); output.println("N/A"); } else { output.print("Probe: "); sensors.requestTemperatures(); output.print(sensors.getTempCByIndex(0) * .98); output.println("*C"); } return result; } //get current humidity float getHumidity() { float temp_hum_val[2] = {0}; // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) if (!dht.readTempAndHumidity(temp_hum_val)) { output.print("Humidity: "); output.print(temp_hum_val[0] * 1.055); output.println("%"); } else { output.println("Failed to get humidity value."); } return temp_hum_val[0]; } // Function that gets current epoch time unsigned long getTime() { time_t now; struct tm timeinfo; if (!getLocalTime(&timeinfo)) { //Serial.println("Failed to obtain time"); return(0); } time(&now); return now; }
Editor is loading...