#include <WiFi.h>
#include <WiFiClient.h>
#include <FirebaseESP32.h>
#include "DHTesp.h"
#define API_KEY "AIzaSyDOCGeNGWMA3xXhNWewRK_8QlY68mDhHdk"
#define USER_EMAIL "[email protected]"
#define USER_PASSWORD "qwer1234"
#define DATABASE_URL "https://m-iot.firebaseio.com/"
#define DATABASE_SECRET "d270PdYLZ3erwiaWwQ7zqhJhHgObak5DgilG5i9K"
#define LED 2
const int DHT_PIN = 15;
DHTesp dhtSensor;
const float GAMMA = 0.7;
const float RL10 = 50;
unsigned long dataMillis = 0;
String deviceId = "N02";
FirebaseData fbdo1;
FirebaseData fbdo2;
FirebaseAuth auth;
FirebaseConfig config;
void setup()
{
Serial.begin(9600);
/* WIFI */
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
/* FIREBASE */
config.api_key = API_KEY;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
config.database_url = DATABASE_URL;
Firebase.reconnectWiFi(true);
fbdo2.setResponseSize(4096);
String base_path = "/users/";
// config.token_status_callback = TokenStatusCallback;
Firebase.begin(&config, &auth);
String var = "$uid";
String val = "($uid === auth.uid)";
Firebase.setReadWriteRules(fbdo2, base_path, var, val, val, DATABASE_SECRET);
pinMode(LED, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop()
{
runFirebase();
}
void runFirebase()
{
if(Firebase.ready())
{
// Serial.println(Firebase.ready());
String path = "/users/";
path += auth.token.uid.c_str();
path += "/devices/" + deviceId;
String pathRT = path+"/realtime/";
Firebase.setTimestamp(fbdo2, pathRT+"/timestamp");
Firebase.getDouble(fbdo2, pathRT+"/timestamp");
uint64_t timest = fbdo2.to<uint64_t>();
FirebaseJson json1;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
int analogValue = analogRead(36);
float voltage = analogValue * 5/4095.0;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
json1.add("temp", data.temperature );
json1.add("rh", data.humidity );
json1.add("lux", lux);
json1.add("timestamp", timest);
Firebase.setJSON(fbdo1, pathRT, json1);
if (millis() - dataMillis > 3600000)
{
dataMillis = millis();
String pathLog = "/logs/"+ deviceId;
FirebaseJson json2;
json2.add("temp", data.temperature );
json2.add("rh", data.humidity );
json2.add("lux", lux);
json2.add("timestamp", timest);
Firebase.pushJSON(fbdo2, pathLog, json2);
}
delay(5000);
}
}