#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
#include <DHT.h>
//Provide the token generation process info.
#include "addons/TokenHelper.h"
//Provide the RTDB payload printing info and other helper functions.
#include "addons/RTDBHelper.h"
#define DHTPIN 15
#define DHTTYPE DHT22
// Replace with your network credentials
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// Replace with your Firebase project details
#define FIREBASE_HOST "ddddd-1cdbe-default-rtdb.firebaseio.com/"
#define FIREBASE_API_KEY "AIzaSyB_FdbevS4c3gcVhGMdnWIyP7viqBVD5zU"
DHT dht(DHTPIN, DHTTYPE);
FirebaseData firebaseData;
FirebaseConfig firebaseConfig;
FirebaseAuth firebaseAuth;
unsigned long sendDataPrevMillis = 0;
int count = 0;
bool signupOK = false;
void setup(){
Serial.begin(115200);
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();
// Set Firebase configuration and authentication details
firebaseConfig.database_url = FIREBASE_HOST;
firebaseConfig.api_key = FIREBASE_API_KEY;
/* Sign up */
if (Firebase.signUp(&firebaseConfig, &firebaseAuth, "", "")){
Serial.println("ok");
signupOK = true;
}
else{
Serial.printf("%s\n", firebaseConfig.signer.signupError.message.c_str());
}
/* Assign the callback function for the long running token generation task */
firebaseConfig.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
// Connect to Firebase
Firebase.begin(&firebaseConfig, &firebaseAuth);
Firebase.reconnectWiFi(true);
// Initialize DHT sensor
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Send data to Firebase
if (Firebase.setFloat(firebaseData, "/temperature", temperature)) {
Serial.println("Temperature data sent successfully!");
} else {
Serial.println("Failed to send temperature data");
Serial.println(firebaseData.errorReason());
}
if (Firebase.setFloat(firebaseData, "/humidity", humidity)) {
Serial.println("Humidity data sent successfully!");
} else {
Serial.println("Failed to send humidity data");
Serial.println(firebaseData.errorReason());
}
delay(2000); // Delay for 2 seconds before the next loop
}
*** XML ***
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="20dp"
tools:context=".MainActivity">
<Switch
android:id="@+id/switchStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch ON/OFF"
android:textSize="18sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="submit"
android:id="@+id/btnid"
/>
<TextView
android:id="@+id/textViewData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Waiting for data..."
android:textSize="22sp"
android:textStyle="bold"
android:layout_marginTop="20dp"/>
<TextView
android:id="@+id/humidity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Waiting for data..."
android:textSize="22sp"
android:textStyle="bold"
android:layout_marginTop="20dp"/>
</LinearLayout>
**** JAVA CODE****
package com.example.day_7;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class MainActivity extends AppCompatActivity {
private Switch switchStatus;
private TextView textViewData;
private TextView humidity;
private DatabaseReference databaseRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
switchStatus = findViewById(R.id.switchStatus);
textViewData = findViewById(R.id.textViewData);
humidity = findViewById(R.id.humidity);
// Firebase Database Reference
databaseRef = FirebaseDatabase.getInstance().getReference();
// Switch Change Listener
switchStatus.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String status = isChecked ? "ON" : "OFF";
databaseRef.child("SwitchStatus").setValue(status);
}
});
// Read Int Value from Firebase in Real-time
databaseRef.child("temperature").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
int temperature = snapshot.getValue(Integer.class);
textViewData.setText("Sensor Value: " + temperature);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
textViewData.setText("Error Loading Data");
}
});
// Read Int Value from Firebase in Real-time
databaseRef.child("humidity").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
int humiditys = snapshot.getValue(Integer.class);
humidity.setText("Sensor Value: " + humiditys);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
textViewData.setText("Error Loading Data");
}
});
}
}