Home Automation Using ESP32 and ANN Main Code
Home Automation Using ESP32 and ANN Main Code
#include <Arduino.h>
#include <ArduTFLite.h>
#include "model.h" // Include the TensorFlow Lite model header file
#include "DHT11.h"
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
BlynkTimer timer;
// DHT11 Sensor
#define DHT_PIN 2
DHT11 dht11(DHT_PIN);
// LED Matrix
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define CS_PIN 5
#define MAX_DEVICES 4
MD_Parola display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
#define relay1_pin 13
#define relay2_pin 12
#define relay3_pin 14
#define relay4_pin 27
int relay1_state = 0;
int relay2_state = 0;
int relay3_state = 0;
int relay4_state = 0;
#define button1_vpin V1
#define button2_vpin V2
#define button3_vpin V3
#define button4_vpin V4
BLYNK_WRITE(button2_vpin) {
relay2_state = param.asInt();
digitalWrite(relay2_pin, relay2_state);
}
BLYNK_WRITE(button3_vpin) {
relay3_state = param.asInt();
digitalWrite(relay3_pin, relay3_state);
}
BLYNK_WRITE(button4_vpin) {
relay4_state = param.asInt();
digitalWrite(relay4_pin, relay4_state);
}
void setup() {
Serial.begin(115200);
// Initialize pins
pinMode(button1_pin, INPUT_PULLUP);
pinMode(button2_pin, INPUT_PULLUP);
pinMode(button3_pin, INPUT_PULLUP);
pinMode(button4_pin, INPUT_PULLUP);
pinMode(relay1_pin, OUTPUT);
pinMode(relay2_pin, OUTPUT);
pinMode(relay3_pin, OUTPUT);
pinMode(relay4_pin, OUTPUT);
digitalWrite(relay1_pin, HIGH);
digitalWrite(relay2_pin, HIGH);
digitalWrite(relay3_pin, HIGH);
digitalWrite(relay4_pin, HIGH);
// Initialize DHT11
Serial.println("DHT11 initialized.");
// Initialize TensorFlow Lite
Serial.println("Initializing TensorFlow Lite model...");
if (!modelInit(model, tensor_arena, kTensorArenaSize)) {
Serial.println("Model initialization failed!");
while (1);
}
Serial.println("TensorFlow Lite model initialized.");
}
void loop() {
Blynk.run();
timer.run();
listen_push_buttons();
read_and_display_data();
}
void read_and_display_data() {
int temperature = 0, humidity = 0;
if (dht11.readTemperatureHumidity(temperature, humidity) == 0) {
// Use TensorFlow Lite model to predict rain likelihood
modelSetInput(float(temperature), 0);
modelSetInput(float(humidity), 1);
float rain_likelihood = 0;
if (modelRunInference()) {
rain_likelihood = modelGetOutput(0) * 100;
while (!display.displayAnimate()) {
// Wait for the scrolling animation to complete
}
}
void listen_push_buttons() {
if (digitalRead(button1_pin) == LOW) {
delay(200);
control_relay(1);
Blynk.virtualWrite(button1_vpin, relay1_state);
}
if (digitalRead(button2_pin) == LOW) {
delay(200);
control_relay(2);
Blynk.virtualWrite(button2_vpin, relay2_state);
}
if (digitalRead(button3_pin) == LOW) {
delay(200);
control_relay(3);
Blynk.virtualWrite(button3_vpin, relay3_state);
}
if (digitalRead(button4_pin) == LOW) {
delay(200);
control_relay(4);
Blynk.virtualWrite(button4_vpin, relay4_state);
}
}