#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <BlynkSimpleEsp32_SSL.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
char auth[] = "FlKPz9CWFecvdXHZHEfsioRxU5Oxb68K";
char ssid[] = "Pak Jasno";
char pass[] = "tirtalawu";
#define DHTPIN 15
#define DHTTYPE DHT11
#define treshold 30
const int rly1Pin = 12;
const int rly2Pin = 13;
const int rly3Pin = 23;
const int rly4Pin = 19;
const int rly5Pin = 18;
const int rly6Pin = 5;
const int rly7Pin = 4;
const int rly8Pin = 2;
const int btn1Pin = 14;
const int btn2Pin = 27;
const int btn3Pin = 26;
const int btn4Pin = 25;
const int btn5Pin = 33;
const int btn6Pin = 32;
const int btn7Pin = 35;
const int btn8Pin = 34;
DHT dht(DHTPIN , DHTTYPE);
BlynkTimer timer;
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}
void checkPhysicalButton();
int rly1State = LOW;
int rly2State = LOW;
int rly3State = LOW;
int rly4State = LOW;
int rly5State = LOW;
int rly6State = LOW;
int rly7State = LOW;
int rly8State = LOW;
int btn1State = HIGH;
int btn2State = HIGH;
int btn3State = HIGH;
int btn4State = HIGH;
int btn5State = HIGH;
int btn6State = HIGH;
int btn7State = HIGH;
int btn8State = HIGH;
BLYNK_CONNECTED() {
Blynk.syncVirtual(V1, rly1State);
Blynk.syncVirtual(V2, rly2State);
Blynk.syncVirtual(V3, rly3State);
Blynk.syncVirtual(V4, rly4State);
Blynk.syncVirtual(V7, rly5State);
Blynk.syncVirtual(V8, rly6State);
Blynk.syncVirtual(V9, rly7State);
Blynk.syncVirtual(V10,rly8State);
}
BLYNK_WRITE(V1) {
rly1State = param.asInt();
digitalWrite(rly1Pin, rly1State);
}
BLYNK_WRITE(V2) {
rly2State = param.asInt();
digitalWrite(rly2Pin, rly2State);
}
BLYNK_WRITE(V3) {
rly3State = param.asInt();
digitalWrite(rly3Pin, rly3State);
}
BLYNK_WRITE(V4) {
rly4State = param.asInt();
digitalWrite(rly4Pin, rly4State);
}
BLYNK_WRITE(V7) {
rly1State = param.asInt();
digitalWrite(rly1Pin, rly1State);
}
BLYNK_WRITE(V8) {
rly2State = param.asInt();
digitalWrite(rly2Pin, rly2State);
}
BLYNK_WRITE(V9) {
rly3State = param.asInt();
digitalWrite(rly3Pin, rly3State);
}
BLYNK_WRITE(V10) {
rly4State = param.asInt();
digitalWrite(rly4Pin, rly4State);
}
void checkPhysicalButton()
{
if (digitalRead(btn1Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn1State != LOW) {
// Toggle LED state
rly1State = !rly1State;
digitalWrite(rly1Pin, rly1State);
// Update Button Widget
Blynk.virtualWrite(V1, rly1State);
}
btn1State = LOW;
} else {
btn1State = HIGH;
}
if (digitalRead(btn2Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn2State != LOW) {
// Toggle LED state
rly2State = !rly2State;
digitalWrite(rly2Pin, rly2State);
// Update Button Widget
Blynk.virtualWrite(V2, rly2State);
}
btn2State = LOW;
} else {
btn2State = HIGH;
}
if (digitalRead(btn3Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn3State != LOW) {
// Toggle LED state
rly3State = !rly3State;
digitalWrite(rly3Pin, rly3State);
// Update Button Widget
Blynk.virtualWrite(V3, rly3State);
}
btn3State = LOW;
} else {
btn3State = HIGH;
}
if (digitalRead(btn4Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn1State != LOW) {
// Toggle LED state
rly4State = !rly4State;
digitalWrite(rly4Pin, rly4State);
// Update Button Widget
Blynk.virtualWrite(V4, rly4State);
}
btn4State = LOW;
} else {
btn4State = HIGH;
}
if (digitalRead(btn5Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn5State != LOW) {
// Toggle LED state
rly5State = !rly5State;
digitalWrite(rly5Pin, rly5State);
// Update Button Widget
Blynk.virtualWrite(V7, rly5State);
}
btn5State = LOW;
} else {
btn5State = HIGH;
}
if (digitalRead(btn6Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn6State != LOW) {
// Toggle LED state
rly6State = !rly6State;
digitalWrite(rly6Pin, rly6State);
// Update Button Widget
Blynk.virtualWrite(V8, rly6State);
}
btn6State = LOW;
} else {
btn6State = HIGH;
}
if (digitalRead(btn7Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn7State != LOW) {
// Toggle LED state
rly7State = !rly7State;
digitalWrite(rly7Pin, rly7State);
// Update Button Widget
Blynk.virtualWrite(V9, rly7State);
}
btn7State = LOW;
} else {
btn7State = HIGH;
}
if (digitalRead(btn8Pin) == LOW) {
// btnState is used to avoid sequential toggles
if (btn8State != LOW) {
// Toggle LED state
rly8State = !rly8State;
digitalWrite(rly8Pin, rly8State);
// Update Button Widget
Blynk.virtualWrite(V4, rly4State);
}
btn8State = LOW;
} else {
btn8State = HIGH;
}
}
void setup()
{
lcd.init();
lcd.backlight();
dht.begin();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(0, 1);
lcd.print("Humidity:");
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
dht.begin();
pinMode(rly1Pin, OUTPUT);
pinMode(rly2Pin, OUTPUT);
pinMode(rly3Pin, OUTPUT);
pinMode(rly4Pin, OUTPUT);
pinMode(rly5Pin, OUTPUT);
pinMode(rly6Pin, OUTPUT);
pinMode(rly7Pin, OUTPUT);
pinMode(rly8Pin, OUTPUT);
pinMode(btn1Pin, INPUT_PULLUP);
pinMode(btn2Pin, INPUT_PULLUP);
pinMode(btn3Pin, INPUT_PULLUP);
pinMode(btn4Pin, INPUT_PULLUP);
pinMode(btn5Pin, INPUT_PULLUP);
pinMode(btn6Pin, INPUT_PULLUP);
pinMode(btn7Pin, INPUT_PULLUP);
pinMode(btn8Pin, INPUT_PULLUP);
digitalWrite(rly1Pin, rly1State);
digitalWrite(rly2Pin, rly2State);
digitalWrite(rly3Pin, rly3State);
digitalWrite(rly4Pin, rly4State);
digitalWrite(rly5Pin, rly5State);
digitalWrite(rly6Pin, rly6State);
digitalWrite(rly7Pin, rly7State);
digitalWrite(rly8Pin, rly8State);
timer.setInterval(1000L, sendSensor);
timer.setInterval(10L, checkPhysicalButton);
}
void loop()
{
delay(500);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
lcd.print("ERROR");
return;
}
lcd.setCursor(5,0);
lcd.print(t);
lcd.setCursor(9,1);
lcd.print(h);
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
}
}
With this program I am actually to control 8 relay using small push button, and then I changed my push button to 8 channel touch sensors but when I use the touch snesors, one ore the other relay turn on and off automatically randomly.
Please help
Thank you in advance