#define BLYNK_TEMPLATE_NAME "FYP1"
#define BLYNK_TEMPLATE_ID "TMPL6yV9DUzxP"
#define BLYNK_AUTH_TOKEN "VEt8zkTcKa_XkA5JC_1GA2p6--h5aNg3"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClient.h>
#include "DHT.h" // Correct DHT library header
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3d ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Blynk auth token and Wi-Fi credentials
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// DHT22 setup
#define DHTPIN 18 // GPIO pin connected to DHT22 Data pin
#define DHTTYPE DHT22 // Sensor type
DHT dht(DHTPIN, DHTTYPE);
// Pin definitions
#define PHOTORESISTOR_PIN 35 // Photoresistor sensor pin
#define POTENTIOMETER_PIN 32 // Potentiometer pin
// Variable
float potVoltage;
float photoVoltage;
float temperature;
float humidity;
// Timers
BlynkTimer timer;
void sendSensorData(){
potVoltage = 40;
photoVoltage = 34;
temperature = -42.4;
humidity = 50;
Blynk.virtualWrite(V0, potVoltage);
Blynk.virtualWrite(V1, photoVoltage);
Blynk.virtualWrite(V2, temperature);
Blynk.virtualWrite(V3, humidity);
}
// Function to read data and send to Blynk
void potentiodata_blynk() {
// Potentiometer Value
int potValue = analogRead(POTENTIOMETER_PIN);
potVoltage = potValue * (3.3 / 4095.0); // ESP32 ADC to Voltage
Blynk.virtualWrite(V0, potVoltage);
Serial.print("Potentiometer:");
Serial.print(potVoltage);
Serial.println(" Ohm");
}
void potentiodata() {
// Potentiometer Value
int potValue = analogRead(POTENTIOMETER_PIN);
potVoltage = potValue * (3.3 / 4095.0); // ESP32 ADC to Voltage
Serial.print("Potentiometer:");
Serial.print(potVoltage);
Serial.println(" Ohm");
}
void photodata_blynk(){
// Photoresistor Sensor Value (Digital)
int photoValue = analogRead(PHOTORESISTOR_PIN);
photoVoltage = photoValue * (3.3 / 4095.0); // Convert to Voltage
Blynk.virtualWrite(V1, photoVoltage);
Serial.print("Photoresistor:");
Serial.print(photoVoltage);
Serial.println(" V");
}
void photodata(){
// Photoresistor Sensor Value (Digital)
int photoValue = analogRead(PHOTORESISTOR_PIN);
photoVoltage = photoValue * (3.3 / 4095.0); // Convert to Voltage
Serial.print("Photoresistor:");
Serial.print(photoVoltage);
Serial.println(" V");
}
void temperaturedata_blynk(){
// DHT22 Temperature and Humidity
temperature = dht.readTemperature();
if (!isnan(temperature)) {
Blynk.virtualWrite(V2, temperature);
Serial.print("Temperature:");
Serial.print(temperature);
Serial.println(" °C");
} else {
Serial.println("DHT22 Sensor error!");
}
}
void temperaturedata(){
// DHT22 Temperature and Humidity
temperature = dht.readTemperature();
if (!isnan(temperature)) {
Serial.print("Temperature:");
Serial.print(temperature);
Serial.println(" °C");
} else {
Serial.println("DHT22 Sensor error!");
}
}
void humiditydata_blynk(){
// DHT22 Temperature and Humidity
humidity = dht.readHumidity();
if ( !isnan(humidity)) {
Blynk.virtualWrite(V3, humidity);
Serial.print("Humidity:");
Serial.print(humidity);
Serial.println(" %");
} else {
Serial.println("DHT22 Sensor error!");
}
}
void humiditydata(){
// DHT22 Temperature and Humidity
humidity = dht.readHumidity();
if (!isnan(humidity)) {
Serial.print("Humidity:");
Serial.print(humidity);
Serial.println(" %");
} else {
Serial.println("DHT22 Sensor error!");
}
}
void displaytext() {
display.clearDisplay();
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Pot:");
display.print(potVoltage);
display.println(" Ohm");
display.setCursor(0, 10);
display.print("Photo:");
display.print(photoVoltage);
display.println(" V");
display.setCursor(0, 20);
display.print("Temp:");
display.print(temperature);
display.println(" °C");
display.setCursor(0, 30);
display.print("Hum:");
display.print(humidity);
display.println(" %");
display.display(); // Show initial text
delay(100);
}
void setup() {
potVoltage = 0;
photoVoltage = 0;
temperature = 0;
humidity = 0;
Serial.println("Hello, ESP32!");
// Serial Monitor
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.display();
delay(2000); // Pause for 2 seconds
// Clear the buffer
display.clearDisplay();
display.display();
// Initialize Blynk
Blynk.begin(auth, ssid, pass);
// Initialize DHT22
dht.begin();
// Flame Sensor as INPUT
pinMode(PHOTORESISTOR_PIN, INPUT);
// Potentiometer Sensor
pinMode(POTENTIOMETER_PIN, INPUT);
// Timer to send data every 2 seconds
timer.setInterval(2000L, sendSensorData);
}
void loop() {
potentiodata();
photodata();
temperaturedata();
humiditydata();
displaytext();
Blynk.run();
timer.run();
delay(1000);
}