The code was pretty messed up, so I cleaned it up leaving only the parts that really matter.
(The status of the lamp switch was already created by me and is working in another version that uses Wifi)
As I said before, I did a validation to check the connection status, and if it is no longer connected, start a new connection, however, if Blynk can’t connect, ESP is forced to restart, staying in this loop until it gets a connection with Blynk. How can I prevent this restart and make the code run normally when it fails to connect (Since I already have a validation for it to try to connect again)?
My code below:
#define TINY_GSM_MODEM_SIM800
//------------------------------------------------------------------
#include "Adafruit_FONA.h"
#include <SoftwareSerial.h>
#include "Wire.h"
#include <FS.h>
//GPS Module RX pin to NodeMCU D3
//GPS Module TX pin to NodeMCU D4
#define rxPin D4
#define txPin D3
#define FONA_RST 13
SoftwareSerial Sim800L(txPin,rxPin);
SoftwareSerial *fonaSerial = &Sim800L;
//Hardware serial is also possible! for ESP32
//HardwareSerial *fonaSerial = &Serial2;
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
//------------------------------------------------------------------
#define BLYNK_TEMPLATE_ID "TMPL_aJxEwab"
#define BLYNK_DEVICE_NAME "SmartAstra v01"
#define BLYNK_AUTH_TOKEN "TOKEN"
//------------------------------------------------------------------
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
//------------------------------------------------------------------
char auth[] = BLYNK_AUTH_TOKEN;
// Your GPRS credentials
// Leave empty, if missing user or pass
char apn[] = "zap.vivo.com.br";
char user[] = "vivo";
char pass[] = "vivo";
//------------------------------------------------------------------
TinyGsm modem(fona);
BlynkTimer timer;
//------------------------------------------------------------------
#define pin_rele_lamp D5
//------------------------------------------------------------------
int rele_lamp = 0;
//------------------------------------------------------------------
//Change the virtual pins, as you have set in the blynk account.
#define virtual_pin_radio V1
//------------------------------------------------------------------
String gsm_buff ="";
char sendsms[15];
char caller_id[32];
int len=0;
unsigned long temporizador1 = millis();
int lampApp = 0;
int temporizador3 = 0;
int reiniciaConexao = 1;
//------------------------------------------------------------------
BLYNK_WRITE(virtual_pin_lamp) {
if (interrup == 0 ){
rele_lamp = param.asInt();
lampApp = param.asInt();
}
//digitalWrite(pin_rele_lamp, rele_lamp);
Serial.print("Relay 1 is ");
if(rele_lamp==0)
Serial.println("OFF");
else
Serial.println("ON");
}
//------------------------------------------------------------------
void statusLamp(){
if(digitalRead(D6)==HIGH){
Serial.println("DESLIGADO");
valor = "DESLIGADO";
}
else{
if(digitalRead(D6)==LOW){
Serial.println("LIGADO");
valor = "LIGADO";
}
}
Blynk.virtualWrite(virtual_pin_status_lamp, valor);
}
//------------------------------------------------------------------
void controlaLamp(){
//Se interruptor ligado > ligar lampada
if(interrup ==1){
Serial.println("LIGOU PELO INTERRUPTOR");
Blynk.virtualWrite(virtual_pin_lamp, 1);
rele_lamp = 1;
digitalWrite(pin_rele_lamp, HIGH);
}
//Se no app estiver como ligado > ligar lampada
else if(rele_lamp == 1){
Serial.println("LIGOU PELO APP");
digitalWrite(pin_rele_lamp, HIGH);
Blynk.virtualWrite(virtual_pin_lamp, 1);
}
//Se no app estiver como desligado > desligar radio
else if(rele_lamp == 0){
digitalWrite(pin_rele_lamp, LOW);
Serial.println("DESLIGOU PELO APP");
Blynk.virtualWrite(virtual_pin_lamp, 0);
}
}
//------------------------------------------------------------------
void verifyConnection(){
if( Blynk.connected() ){
Serial.println("Connection OK");
}
else if(!Blynk.connected()){
Serial.println("NO CONNECTION");
Serial.println("INITIATING CONNECTION");
modem.restart();
Blynk.begin(auth, modem, apn, user, pass);
Serial.println("CONNECTED");
}
}
//------------------------------------------------------------------
void setup()
{
Serial.begin(115200);
//--------------------------------------------------------------------
pinMode(pin_rele_lamp, OUTPUT);
pinMode(pin_rele_status_lamp, INPUT_PULLUP);
//--------------------------------------------------------------------
//During Starting all Relays should TURN OFF
digitalWrite(pin_rele_lamp, LOW);
digitalWrite(pin_rele_status_lamp, LOW);
//--------------------------------------------------------------------
delay(2000);
fonaSerial->begin(9600);
if (! fona.begin(*fonaSerial)) {
Serial.println(F("Couldn't find FONA"));
while(1);
}
//--------------------------------------------------------------------
Serial.println(F("FONA is OK"));
fona.println("AT+CMGF=1"); // Configuring TEXT mode
delay(1000);
fona.print ("AT+CSMP=17,167,0,0\r");// Configuring TEXT mode
delay(1000);
fona.print("AT+CNMI=2,1\r\n"); //set up the fona to send a +CMTI notification when an SMS is received
//fona.println(F("AT+CMGDA=\"DEL ALL\""));
//delay(5000);
delay(1000);
Serial.println("FONA Ready");
//--------------------------------------------------------------------
modem.restart();
Blynk.begin(auth, modem, apn, user, pass);
Blynk.virtualWrite(virtual_pin_lamp, rele_lamp);
Blynk.virtualWrite(virtual_pin_status_lamp, valor);
//--------------------------------------------------------------------
timer.setInterval(1L, statusLamp);
timer.setInterval(1L, controlaLamp);
}
void loop()
{
Blynk.run();
timer.run();
}```