This code works on blynk 1.0 without any problems, but when I migrated it to blynk 2.0, node mcu rebooted as if there was a fatal error
#define BLYNK_TEMPLATE_ID "TMPLJdwoGQJZ"
#define BLYNK_DEVICE_NAME "ULTRA TECH"
#define BLYNK_FIRMWARE_VERSION "0.3.0"
#define BLYNK_PRINT Serial
#define APP_DEBUG
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
#include "BlynkEdgent.h"
#include <TimeLib.h>
#include <ESP8266Ping.h>
#define VT_PIN A0
#define vPIN_LedRelay1 V0 // ليد ريلي 1
#define vPIN_Relay1 V1 // فيرجوال ريلي 1
#define vPIN_LogTerminal V2 // terminal
#define vPIN_OnOffTimr1 V3 // تفعيل وتعطيل مؤقت 1
#define vPIN_BatteryVoltage V4 // فيرجوال الفولت
#define vPIN_LowVoltage V5 //فيرجوال انخفاض الفولط للرسالة
#define vPIN_XVoltage V6 // معايرة الفولت
#define vPIN_LogTerminalPing V7 // تيرمنال البينغ
#define vPIN_OnOffPing V8 // تفعيل وتعطيل البينغ
#define vPIN_Timer1 V15 // مؤقت 1
#define vPIN_Time V16 // الساعة
#define vPIN_Date V17 // التاريخ
BlynkTimer UltraTimer;
WidgetLED LedRelay1(vPIN_LedRelay1);
const int Relay1 = D1;
const int Switsh1 = D0;
bool OnOffTimr1 =LOW;
bool OnOffPing =LOW;
bool buttonStatus1 = 0;
bool buttonTemp1 = 0;
bool IsFirstRun = 1;
float XVolt = 0;
int vt_read = 0;
float voltage = 50;
float LowVolt = 0;
bool AlertMsgLowVolt = 0;
const char* remote_host = "8.8.8.8"; // ايبي لعمل بينغ عليه
int WaitBlynk1 = 60;
int Wait1 = 0;
long StartH1;
long StartM1;
long StartS1;
long StopH1;
long StopM1;
long StopS1;
int start_time; // وقت البدء المجدول (بالثواني)
int active_duration; // مدة التنشيط (بالثواني)
int weekdays[8]; // أيام الأسبوع المجدولة (الصفيف 8: 0 غير مستخدم)
BLYNK_CONNECTED() // استعادة القيم من السيرفر بعد اعادة اقلاع الجهاز
{
Blynk.sendInternal("rtc", "sync");
if (IsFirstRun==1)
{
delay(200);
Blynk.syncVirtual(vPIN_Timer1,vPIN_OnOffTimr1,vPIN_Relay1,vPIN_OnOffPing,vPIN_XVoltage,vPIN_LowVoltage);
}}
///////////////// BLYNK_WRITES ////////////////////////////
BLYNK_WRITE(vPIN_Relay1) // اداة التحكم في الريلي
{
if (param.asInt() == 1)
{
digitalWrite(Relay1, HIGH);
LedRelay1.on();
Serial.println("1 تم التشغيل من التطبيق");
Blynk.notify("1 تم التشغيل من التطبيق");
Blynk.virtualWrite(vPIN_LogTerminal,"تم التشغيل من الموبايل الساعة: "+String(hour()) + ":" + minute() + ":" + second()+" بتاريخ: " +String (day()) + "-" + month() + "-" + year());
}
else
{
digitalWrite(Relay1, LOW);
LedRelay1.off();
Serial.println("1 تم الايقاف من التطبيق");
Blynk.notify("1 تم الايقاف من التطبيق");
Blynk.virtualWrite(vPIN_LogTerminal,"تم الإيقاف من الموبايل الساعة: "+String(hour()) + ":" + minute() + ":" + second()+" بتاريخ: " +String (day()) + "-" + month() + "-" + year());
}
}
BLYNK_WRITE(vPIN_XVoltage) // اداة معايرة فولت البطاريات
{
XVolt=param.asFloat();
}
BLYNK_WRITE(vPIN_LowVoltage) // اداة ارسال اشعار عند انخفاض الفولت
{
LowVolt=param.asFloat();
Serial.println("تم تغيير الحد الأدنى للفولط");
}
BLYNK_WRITE(vPIN_OnOffPing) // اداة تفعيل وتعطيل البينغ
{
OnOffPing=param.asFloat();
if (OnOffPing==HIGH){
// Blynk.virtualWrite(vPIN_LogTerminal1,"تم تفعيل الاتصال الذكي الوقت: " +String(hour()) + ":" + minute() + ":" + second()+" " +String (day()) + "-" + month() + "-" + year() );
}
if(OnOffPing==LOW){
//Blynk.virtualWrite(vPIN_LogTerminal1,"تم تعطيل الاتصال الذكي الوقت: " +String(hour()) + ":" + minute() + ":" + second()+" " +String (day()) + "-" + month() + "-" + year() );
}
}
BLYNK_WRITE(vPIN_OnOffTimr1) // ادا تفعيل وتعطيل المؤقت الزمني
{
OnOffTimr1=param.asFloat();
if (OnOffTimr1==HIGH){
Blynk.virtualWrite(vPIN_LogTerminal,"تم تفعيل المؤقت1 الوقت: " +String(hour()) + ":" + minute() + ":" + second()+" " +String (day()) + "-" + month() + "-" + year() );
}
if(OnOffTimr1==LOW){
Blynk.virtualWrite(vPIN_LogTerminal,"تم تعطيل المؤقت1 الوقت: " +String(hour()) + ":" + minute() + ":" + second()+" " +String (day()) + "-" + month() + "-" + year() );
}
}
BLYNK_WRITE(vPIN_Timer1) // اداة ادخال الوقت في المؤقت رقم 1
{
setTime(param);
}
BLYNK_WRITE(InternalPinRTC) // يتحقق من قيمة InternalPinRTC عند المزامنة مع Blynk
{
const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
unsigned long blynkTime = param.asLong();
if (blynkTime >= DEFAULT_TIME) // تحقق من أن العدد الصحيح وقت صالح (أكبر من 1 كانون الثاني (يناير) 2013)
{
setTime(blynkTime); // مزامنة الساعة في مكتبة TimeLib مع القيمة المستلمة من Blynk
//Serial.println(blynkTime);
String currentTime = String(hour()) + ":" + minute() + ":" + second();
String currentDate = String(day()) + "-" + month() + "-" + year();
Serial.println(" التاريخ: "+String(currentDate)+"الساعة: "+String(currentTime));
Blynk.virtualWrite(vPIN_Time, "الساعة: "+String(currentTime));
Blynk.virtualWrite(vPIN_Date, "التاريخ: "+String(currentDate));
}
}
/////////////////////// VOIDS /////////////////////////
void checkStatusButton1() // تابع التشغيل من الطقة
{
buttonStatus1 = digitalRead(Switsh1);
if (buttonStatus1 != buttonTemp1)
{
if (buttonStatus1 == HIGH) {
digitalWrite(Relay1, HIGH);
Blynk.virtualWrite(vPIN_Relay1, 1);
LedRelay1.on();
Serial.println("1 تم التشغيل يدويا");
Blynk.notify("1 تم التشغيل يدويا");
Blynk.virtualWrite(vPIN_LogTerminal,"تم التشغيل من الطقة الساعة: "+String(hour()) + ":" + minute() + ":" + second()+" بتاريخ: " +String (day()) + "-" + month() + "-" + year());
}
else {
digitalWrite(Relay1, LOW);
Blynk.virtualWrite(vPIN_Relay1, 0);
LedRelay1.off();
Serial.println("1 تم الايقاف يدويا");
Blynk.notify("1 تم الايقاف يدويا");
Blynk.virtualWrite(vPIN_LogTerminal,"تم الإيقاف من الطقة الساعة: "+String(hour()) + ":" + minute() + ":" + second()+" بتاريخ: " +String (day()) + "-" + month() + "-" + year());
}
buttonTemp1 = buttonStatus1;
}
}
void Timr1() // تابع المؤقت رقم 1
{
if ((hour() == StartH1) and (minute() == StartM1) and (second() > StartS1)and(digitalRead(Relay1)==LOW)and(OnOffTimr1==HIGH))
{
digitalWrite(Relay1, HIGH );
Serial.println("تم التشغيل");
Blynk.virtualWrite(V1,1);
LedRelay1.on();
Serial.println("تم التشغيل من المؤقت الساعة: ");
Blynk.virtualWrite(vPIN_LogTerminal,"تم التشغيل من المؤقت الساعة: "+String(hour()) + ":" + minute() + ":" + second()+" بتاريخ: " +String (day()) + "-" + month() + "-" + year());
}
if ((hour() == StopH1) and (minute() == StopM1) and (second() > StopS1)and(digitalRead(Relay1)==HIGH)and(OnOffTimr1==HIGH))
{
digitalWrite(Relay1, LOW );
Serial.println("تم الايقاق");
Blynk.virtualWrite(V1,0);
LedRelay1.off();
Serial.println("تم الإيقاف من المؤقت الساعة: ");
Blynk.virtualWrite(vPIN_LogTerminal,"تم الإيقاف من المؤقت الساعة: "+String(hour()) + ":" + minute() + ":" + second()+" بتاريخ: " +String (day()) + "-" + month() + "-" + year());
}
}
void ping1() // تابع البينغ
{
if(OnOffPing==HIGH){
if(Ping.ping(remote_host)) {
Serial.println("PIN: "+String(Ping.averageTime()) + "ms" );
Blynk.virtualWrite(vPIN_LogTerminalPing,"البينغ: "+String(Ping.averageTime()) + "ms" );
} else {
Serial.println("انقطع البينغ");
Blynk.virtualWrite(vPIN_LogTerminalPing, "انقطع البينغ" );
}
if (( Ping.averageTime() < 1 ) and ( Wait1<WaitBlynk1 ))
{
Blynk.run();
delay(1000);
Wait1++;
Serial.println("انقطع البينغ");
Serial.println(Wait1);
}
if ((Ping.averageTime() < 1 ) and ( Wait1==WaitBlynk1 ))
{
//Blynk.run();
Wait1 = 0;
}
} }
void checkTime() // تابع تحديث الوقت من السيرفر
{
Blynk.sendInternal("rtc", "sync");
}
void PowerMeter() // تابع فولت البطاريات
{
vt_read = analogRead(VT_PIN);
voltage = vt_read * (XVolt / 1023.0) * 3.0;
Blynk.virtualWrite(vPIN_BatteryVoltage, voltage);
Serial.print("Volts: ");
Serial.println(voltage, 3);
if ((voltage>LowVolt)&& (AlertMsgLowVolt==1))
{
AlertMsgLowVolt=0;
}
if ((voltage<LowVolt) && (AlertMsgLowVolt==0))
{
Blynk.logEvent("فولط البطاريات أقل من الحد المحدد ""\n"+String(LowVolt));
Blynk.virtualWrite(vPIN_LogTerminal,"فولط البطاريات أقل من الحد المحدد الوقت: " +String(hour()) + ":" + minute() + ":" + second()+" " +String (day()) + "-" + month() + "-" + year() );
AlertMsgLowVolt=1;
}
}
void setTime(BlynkParam param) // الحصول على البيانات من اداة إدخال الوقت وتخزينها في المتغيرات
{
TimeInputParam t(param);
if (t.hasStartTime()) {
Serial.println(String("وقت التشغيل: ") +
t.getStartHour() + ":" +
t.getStartMinute() + ":" +
t.getStartSecond());
StartH1 = t.getStartHour() ;
StartM1 = t.getStartMinute() ;
StartS1 = t.getStartSecond() ;
Serial.println("StartH1: "+String(StartH1));
Serial.println("StartM1: "+String(StartM1));
Serial.println("StartS1: "+String(StartS1));
}
if (t.hasStopTime()) {
Serial.println(String("وقت الايقاف: ") +
t.getStopHour() + ":" +
t.getStopMinute() + ":" +
t.getStopSecond());
StopH1 = t.getStopHour() ;
StopM1 = t.getStopMinute() ;
StopS1 = t.getStopSecond();
Serial.println("StopH1: "+String(StopH1));
Serial.println("StopM1: "+String(StopM1));
Serial.println("StopS1: "+String(StopS1));
Blynk.virtualWrite(vPIN_LogTerminal,"تم ضبط المؤقت 1 تشغيل الساعة: "+String(StartH1)+":"+String(StartM1)+":"+String(StartS1)+" -ايقاف الساعة: "+String(StopH1)+":"+String(StopM1)+":"+String(StopS1));
}
for (int i = 1; i <= 7; i++) // يتم تشغيله كل يوم من أيام الأسبوع (1 الاثنين ، 2 الثلاثاء ، 3 الأربعاء ، إلخ.)
{
if (t.isWeekdaySelected(i)) {
Serial.println(String("Day ") + i + " is selected");
}
}
}
void setup()
{
BlynkEdgent.begin();
Serial.begin(115200);
pinMode(Relay1,OUTPUT);
pinMode(Switsh1, INPUT);
pinMode(10,INPUT_PULLUP);
digitalWrite(D0,HIGH);
UltraTimer.setInterval(1000L, checkTime);
UltraTimer.setInterval(1000L, Timr1);
UltraTimer.setInterval(1000L, checkStatusButton1);
UltraTimer.setInterval(1000L, ping1);
UltraTimer.setInterval(1000L, PowerMeter);
}
void loop()
{
BlynkEdgent.run();
UltraTimer.run();
} ```