i’m in trouble with my project. my blynk offline randomly. it usually happens when the relay changed conditions from LOW to HIGH. but sometimes before relay changed conditions, my blynk suddenly offline too. i’m trying to use reconnect code but its not working. i don’t know what happens
This is the situation…
Arduino Mega 2560
ESP8266-01 WiFi Shield
1 x DHT21 sensor to measure humidity
1 x DS18B20 sensor
1 x Capacitive Soil Moisture sensor
4 x 5V relays
L293D motor driver to drive 12VDC Motor
for my esp i used 3.3v adaptor 1A and my arduino connect to my laptop. i used blynk server
How can i solve ?
Thank You
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <DHT.h>
#define DHTPIN 6
#define DHTTYPE DHT21
#define relayheater 4
#define pengaduk 3
#define IN_3 24
#define IN_4 25
#define relay 5
#define PL1 30
#define PL2 31
const int pb1 = 35;
int persen, sensorsoil, suhu, outputvalue, lim1, suhudimmer, h;
unsigned long interval=2*60000;
unsigned long previousMillis=0;
char auth[] = "zsVnSQHmphEPtsjltOkuVE7x0kLDfN0y";
char ssid[] = "SamsungJ2Prime";
char pass[] = "12345678";
char server[] = "192.168.1.100"; // URL for Blynk Cloud Server
int port = 8080;
#define EspSerial Serial1
//#include <SoftwareSerial.h>
//SoftwareSerial EspSerial(2, 3); // RX, TX
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);// Pass the oneWire reference to Dallas Temperature.
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
WidgetLCD lcd(V14);
int buttonState1=0;
int ReCnctFlag; // Reconnection Flag
int ReCnctCount = 0; // Reconnection counter
void setup() {
Serial.begin(115200);
EspSerial.begin(ESP8266_BAUD);
delay(10);
pinMode(pb1, INPUT_PULLUP);
pinMode(relay, OUTPUT);
pinMode(relayheater, OUTPUT);
pinMode(pengaduk, OUTPUT);
pinMode(PL1, OUTPUT);
pinMode(PL2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
digitalWrite(pb1, HIGH);
digitalWrite(PL1, HIGH);
digitalWrite(PL2, HIGH);
digitalWrite(relay, HIGH);
digitalWrite(relayheater, HIGH);
wifi.setDHCP(1, 1, 1);
Blynk.config(wifi, auth, server, port);
if (Blynk.connectWiFi(ssid, pass)) {
Blynk.connect();
}
sensors.begin();
dht.begin();
timer.setInterval(2000L, heater);
}
void loop(){
timer.run();
if (Blynk.connected()) { // If connected run as normal
Blynk.run();
} else if (ReCnctFlag == 0) { // If NOT connected and not already tring to reconnect, set timer to try to reconnect in 60 seconds
ReCnctFlag = 1; // Set reconnection Flag
Serial.println("Starting reconnection timer in 30 seconds...");
timer.setTimeout(30000L, []() { // Lambda Reconnection Timer Function
ReCnctFlag = 0; // Reset reconnection Flag
ReCnctCount++; // Increment reconnection Counter
Serial.print("Attempting reconnection #");
Serial.println(ReCnctCount);
wifi.setDHCP(1, 1, 1); //Enable dhcp in station mode and save in flash of esp8266
Blynk.config(wifi, auth, server, port);
Blynk.connect(); // Try to reconnect to the server
if (Blynk.connectWiFi(ssid, pass)) {
Blynk.connect();
}
});
}
}
void heater() {
lcd.print(1, 0, "Alat READY");
buttonState1 = digitalRead(pb1);
digitalWrite(PL2, LOW);
digitalWrite(PL1, LOW);
lcd.clear();
while (buttonState1 == 0){
sensorsoil = analogRead(A0);
float persen=-0.04*sensorsoil+32.5; // konversi ke persen
float h = dht.readHumidity();
sensors.requestTemperatures();
float suhu= (sensors.getTempCByIndex(0));
suhudimmer = suhu;
outputvalue = map(h, 0, 100, 100, 0);
Blynk.virtualWrite(V1, suhu);
Blynk.virtualWrite(V9, outputvalue);
Blynk.virtualWrite(V8, persen);
Blynk.virtualWrite(V7, h);
digitalWrite(PL2, HIGH);
digitalWrite(PL1, LOW);
unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) <= interval)
{
digitalWrite(relayheater, LOW);
lcd.print(3, 0, "PENGERINGAN");
lcd.print(1, 1, "Heater Menyala");
}
else {
if(suhudimmer < 50){
digitalWrite(relay, LOW);
digitalWrite(relayheater, LOW);
lcd.print(3, 0, "PENGERINGAN");
lcd.print(0, 1, "HeaterBlower ON");
}
else if (suhudimmer >= 50){
digitalWrite(relay, HIGH);
digitalWrite(relayheater, HIGH);
lcd.print(3, 0, "PENGERINGAN");
lcd.print(0, 1, "HeaterBlower OFF");
}
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite(pengaduk, outputvalue);
}
}
}