#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
// Replace these with your network credentials and Firebase details
#define WIFI_SSID "your_wifi_ssid"
#define WIFI_PASSWORD "your_wifi_password"
#define FIREBASE_HOST "your_firebase_database_url"
#define FIREBASE_AUTH "your_firebase_auth_token"
unsigned long prevTime1 = 0, prevTime2 = 0;
const long interval1 = 1000; // Data Aquisition
const long interval2 = 1000; // Data Upload
// Define Firebase Data object
FirebaseData firebaseData;
int pinA = 2; // S2
int pinB = 3; // S1
int pinC = 4; // S0
int value;
float Soil_Moisture, Light_Intensity, Ambient_Humidity, Ambient_Temperature;
void setup() {
Serial.begin(9600);
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
// Connect to Wi-Fi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Set up Firebase connection
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
}
void loop()
{
unsigned long currentTime = millis();
// Data Aquisition
if (currentTime - prevTime1 >= interval1) {
prevTime1 = currentTime;
data_acquisition();
}
// Data Upload
if (currentTime - prevTime2 >= interval2) {
prevTime2 = currentTime;
data_upload();
}
}
void data_acquisition()
{
// Iterate through the channels
for (int a = 0; a <= 7; a++) {
value = a;
// Set binary address using digital pins
digitalWrite(pinA, bitRead(value, 2)); // S2
digitalWrite(pinB, bitRead(value, 1)); // S1
digitalWrite(pinC, bitRead(value, 0)); // S0
delay(10); // Short delay to allow settling
float analogValue = analogRead(A0); // Assuming all channels route to A0
switch (value) {
case 0: {
Soil_Moisture = 100.00 - ((analogValue / 1023.00) * 100.00);
Serial.print("Channel 0 - Soil Moisture = ");
Serial.print(Soil_Moisture);
Serial.println(" %");
break;
}
case 1: {
float volts = analogValue * 5.0 / 1023.0;
float amps = volts / 10000.0; // across 10,000 Ohms
float microamps = amps * 1000000;
Light_Intensity = microamps * 2.0;
Serial.print("Channel 1 - Sunlight = ");
Serial.print(Light_Intensity);
Serial.println(" lux");
break;
}
case 2: {
float voltage = analogValue * (3.3 / 1023.0); // Convert to voltage
Ambient_Humidity = voltage / 0.03;
Serial.print("Channel 2 - Humidity = ");
Serial.print(Ambient_Humidity);
Serial.println(" %");
break;
}
case 3:
{
const float seriesResistor = 10000.0; // 10k ohm resistor
const float nominalResistance = 10000.0; // 10k thermistor at 25°C
const float nominalTemperature = 25.0; // in °C
const float betaCoefficient = 3950.0; // Beta value for thermistor
const float adcMaxValue = 1023.0; // NodeMCU returns 0–1023
float voltage = analogValue / adcMaxValue;
// Convert the ADC value to resistance
float resistance = seriesResistor * (adcMaxValue / analogValue - 1);
// Steinhart-Hart Equation
float steinhart;
steinhart = resistance / nominalResistance; // (R/Ro)
steinhart = log(steinhart); // ln(R/Ro)
steinhart /= betaCoefficient; // 1/B * ln(R/Ro)
steinhart += 1.0 / (nominalTemperature + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // Invert
steinhart -= 273.15; // Convert to °C
Ambient_Temperature = steinhart;
Serial.print("Temperature: ");
Serial.print(Ambient_Temperature);
Serial.println(" °C");
break;
}
case 4:
Serial.print("Channel 4 Analog Value: ");
Serial.println(analogValue);
break;
case 5:
Serial.print("Channel 5 Analog Value: ");
Serial.println(analogValue);
break;
case 6:
Serial.print("Channel 6 Analog Value: ");
Serial.println(analogValue);
break;
case 7:
Serial.print("Channel 7 Analog Value: ");
Serial.println(analogValue);
break;
default:
Serial.println("Invalid Channel");
break;
}
delay(500); // Delay before moving to next channel
}
}
void data_upload()
{
// Upload data to Firebase after reading from all channels
Firebase.setFloat(firebaseData, "/Smart Irrigation/Soil Moisture", Soil_Moisture);
Firebase.setFloat(firebaseData, "/Smart Irrigation/Light Intensity", Light_Intensity);
Firebase.setFloat(firebaseData, "/Smart Irrigation/Ambient Humidity", Ambient_Humidity);
Firebase.setFloat(firebaseData, "/Smart Irrigation/Ambient Temperature", Ambient_Temperature);
// Wait for 5 seconds before uploading new data
delay(5000);
}
Loading
cd74hc4067
cd74hc4067