#include #include #include #include #include #include #define WIFI_SSID "" #define WIFI_PASSWORD "" #define DATABASE_URL "" #define API_KEY "" #define USER_EMAIL "" #define USER_PASSWORD "" FirebaseData fbdo; FirebaseAuth auth; FirebaseJson json; FirebaseConfig config; void wifi(void *param) { String uid = ""; String databasePath, parentPath; int timestamp = 0; bool timeSynched = false; unsigned long previousTimeSync = 0; unsigned long wifiConnectedMillis = 0; unsigned long wifiReconnectMillis = millis(); struct tm timeinfo; for (;;) { if (WiFi.status() != WL_CONNECTED) { if (wifiConnectedMillis == 0) { WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println(); Serial.print("Connecting to Wi-Fi"); } else { if (millis() - wifiReconnectMillis > 1000) { Serial.println(); Serial.println("Reconnecting to WiFi"); wifiReconnectMillis = millis(); WiFi.reconnect(); } } unsigned long wifiTmo = millis(); while (WiFi.status() != WL_CONNECTED && millis() - wifiTmo < 5000) { Serial.print("."); delay(300); } Serial.println(); if (WiFi.status() == WL_CONNECTED) { wifiConnectedMillis = millis(); Serial.print("Connected with IP: "); Serial.println(WiFi.localIP()); Serial.println(); } else { Serial.println("Connection timed out"); Serial.println(); } } if (WiFi.status() == WL_CONNECTED) { if (!timeSynched && millis() - previousTimeSync > 3000) { previousTimeSync = millis(); configTime(8 * 3600, 0, "pool.ntp.org"); } if (!timeSynched) { timeSynched = getLocalTime(&timeinfo); } } if (Firebase.ready()) { uid = auth.token.uid.c_str(); Serial.println(); Serial.print("UID: "); Serial.println(uid); databasePath = "/userdata/" + uid + "/readings"; time_t now; if (!getLocalTime(&timeinfo)) { Serial.println("Failed to obtain time"); continue; } time(&now); timestamp = now; Serial.printf("Time: %s", asctime(&timeinfo)); parentPath = databasePath + "/" + String(timestamp); json.clear(); // Clear all elements json.add("t", "TEST"); json.add("h", "TEST"); json.add("p", "TEST"); json.add("f", "TEST"); json.add("ts", String(timestamp)); delay(0); Serial.printf("Set json... %s\n", Firebase.RTDB.setJSON(&fbdo, parentPath.c_str(), &json) ? "ok" : fbdo.errorReason().c_str()); } vTaskDelay(2000 / portTICK_PERIOD_MS); } } void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); config.api_key = API_KEY; auth.user.email = USER_EMAIL; auth.user.password = USER_PASSWORD; config.database_url = DATABASE_URL; fbdo.setResponseSize(4096); config.token_status_callback = tokenStatusCallback; Firebase.begin(&config, &auth); xTaskCreatePinnedToCore( wifi, "WiFi", 10240, NULL, 1, NULL, 0 ); } void loop() {}