#include "DHTesp.h"
#include <WiFi.h>
#include "Arduino.h"
#include <Firebase_ESP_Client.h>
#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"
#define DHTTYPE DHT22
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//unsigned long channelID = 1793981;
//const char * writeAPIkey = "FQW3H59RT95PQ37B";
const char * API_KEY = "AIzaSyCIOe-Oe8-o0K8_kNjQ5fHVP9lZh-HwXFc";
const char * USER_EMAIL = "[email protected]";
const char * PASSWORD = "yoyomama";
const char * DATABASE_URL = "https://esp-32-wokwi-default-rtdb.asia-southeast1.firebasedatabase.app/";
const char * USER_ID = "fLi5DqDL43Xc9SpD1vSPbdKlXtw1";
const int DHTPIN = 15;
unsigned long delayTime = 30000;
//float tempC = 60;
//float humidity = 70;
boolean attempt = true; // attempt to send data, thingspeak only recieves data with 30 second intervals
float lastTime;
DHTesp dht;
WiFiClient client;
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
String uid;
String tempPath;
String humPath
String pressPath;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
dht.setup(DHTPIN, DHTesp::DHT22);
WiFi.mode(WIFI_STA);
config.api_key = API_KEY;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
config.database_url = DATABASE_URL;
Firebase.reconnectWifi(size);
fbdo.setResponseSize(4096);
config.token_status_callback = tokenStatusCallback;
config.max_token_generation_retry = 5;
Firebase.begin(&config, &auth);
Serial.println("Getting USER UID");
while((auth.token.uid) == "")
{
Serial.print(".");
delay(1000);
}
uid = auth.token.uid.c_str();
Serial.print("User UID: ");
Serial.println(uid);
databasePath = "/UserData/" + uid;
tempPath = databasePath + "/sensor/temperature";
humPath = databasePath + "/sensor/humidity";
pressPath = databasePath + "/sensor/pressure";
Serial.println("Hello, ESP32!");
}
void sendFloat(String path, float value)
{
if(Firebase.RTBD.setFloat(&fdbo, path.c_str(), value))
{
Serial.print("Writing value: ");
Serial.println(value);
Serial.print("On the following path: ");
Serial.println(path);
Serial.println("PASSED!");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else
{
Serial.println("FAILED!")
}
}
void loop() {
if(attempt)
{
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected");
delay(2000);
float humidity = dht.getHumidity();
delay(10);
float tempC = dht.getTemperature();
delay(10);
float pressure = 100; //dht-22 doesnt have pressure attribute
if(isnan(tempC) || isnan(humidity))
{
Serial.println(F("Failed To Read ESP32"));
return;
}
Serial.print(F("Humidity: "));
Serial.println(humidity);
Serial.print(F("Temperature C: "));
Serial.println(tempC);
Serial.print(F("Pressure: "));
Serial.println(pressure);
sendFloat(tempPath, tempC);
sendFloat(humPath, humidity);
sendFloat(pressPath, pressure);
}
else // sleep timer alternate, implement sleep timer later
{
for(int i = 1; i <= 30; i++)
{
delay(1000);
Serial.println(".");
}
attempt = true;
}
}