#define BLYNK_TEMPLATE_ID "TMPLxxxxxxxx"
#define BLYNK_DEVICE_NAME "DeviceName"
#define BLYNK_AUTH_TOKEN "AuthToken"
#define BLYNK_FIRMWARE_VERSION "0.0.1"
// #define BLYNK_PRINT Serial
#include <BlynkSimpleEsp32.h>
#include <Update.h>
#include <HTTPClient.h>
char auth[] = BLYNK_AUTH_TOKEN;
bool StartDelay_24813074 = false;
bool BlynkCon = false;
unsigned long ConnectTime_24813074;
unsigned long prevMil;
#include <WiFi.h>
#include <EEPROM.h>
bool ESPControllerWifiClient_HRD = 0;
bool ESPControllerWifiClient_status = 1;
bool isWifiClientReconectWite = 0;
unsigned long startWifiClientReconectWite ;
bool ESPControllerWifiClient_isDHCP = 1;
bool ESPControllerWifiClient_IsNeedReconect = 0;
bool ESPControllerWifiClient_workStatus = 1;
char ESPControllerWifiClient_SSID[40] = "12345678";
char ESPControllerWifiClient_password[40] = "12345678";
IPAddress ESPControllerWifiClient_ip(0, 0, 0, 0);
IPAddress ESPControllerWifiClient_dns (0, 0, 0, 1);
IPAddress ESPControllerWifiClient_gateway (0, 0, 0, 1);
IPAddress ESPControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESPControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
bool isNeededEEpromCommit = 0;
bool _SysParRead_1_Out;
bool Out_238044322_149185419;
bool Out_128069072_149185419;
String overTheAirURL = "";
BLYNK_WRITE(InternalPinOTA)
{
overTheAirURL = param.asString();
HTTPClient http;
Blynk.disconnect();
http.begin(overTheAirURL);
int httpCode = http.GET();
if (httpCode != HTTP_CODE_OK)
{
return;
}
int contentLength = http.getSize();
if (contentLength <= 0)
{
return;
}
bool canBegin = Update.begin(contentLength);
if (!canBegin)
{
return;
}
Client& client = http.getStream();
int written = Update.writeStream(client);
if (written != contentLength)
{
return;
}
if (!Update.end())
{
return;
}
if (!Update.isFinished())
{
return;
}
reboot();
}
void setup()
{
Blynk.config(auth);
EEPROM.begin(1);
WiFi.mode(WIFI_STA);
if (WiFi.getAutoConnect() != true) WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
_esp32WifiModuleClientReconnect();
_parseMacAddressString(WiFi.macAddress(), ESPControllerWifiClient_mac);
}
void loop()
{
if (((ESPControllerWifiClient_status)) && (!BlynkCon) && (millis() - prevMil > (60 * 1000)))
{
Blynk.connect();
prevMil = millis();
}
BlynkCon = Blynk.connected();
if (BlynkCon)
{
Blynk.run();
Out_238044322_149185419 = BlynkCon;
if (Out_238044322_149185419)
{
StartDelay_24813074 = _isTimer(ConnectTime_24813074, 1000);
}
else
{
StartDelay_24813074 = false;
}
Out_128069072_149185419 = StartDelay_24813074;
}
else
{
Out_238044322_149185419 = false;
Out_128069072_149185419 = false;
}
if (isNeededEEpromCommit)
{
EEPROM.commit();
isNeededEEpromCommit=0;
}
if(ESPControllerWifiClient_IsNeedReconect)
{
_esp32WifiModuleClientReconnect();
ESPControllerWifiClient_IsNeedReconect = 0;
}
ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESPControllerWifiClient_status)
{
if (! ESPControllerWifiClient_HRD)
{
ESPControllerWifiClient_ip = WiFi.localIP();
ESPControllerWifiClient_subnet = WiFi.subnetMask();
ESPControllerWifiClient_gateway = WiFi.gatewayIP();
ESPControllerWifiClient_dns = WiFi.dnsIP();
ESPControllerWifiClient_HRD = 1;
}
}
else
{
ESPControllerWifiClient_HRD = 0;
}
if(ESPControllerWifiClient_workStatus&&(! ESPControllerWifiClient_status))
{
if (! isWifiClientReconectWite)
{
isWifiClientReconectWite = 1;
startWifiClientReconectWite = millis();
}
else
{
if (_isTimer(startWifiClientReconectWite , 5000))
{
WiFi.disconnect();
_esp32WifiModuleClientReconnect();
isWifiClientReconectWite = 0;
}
}
}
_SysParRead_1_Out = ESPControllerWifiClient_status;
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return EEPROM.readByte(addres);
}
void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value)
{
EEPROM.writeByte(addres, value);
isNeededEEpromCommit = 1;
return;
}
int hexStrToInt(String instring)
{
byte len = instring.length();
if (len == 0) return 0;
int result = 0;
for (byte i = 0; i < 8; i++)
{
char ch = instring[i];
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - '0');
else result = result | (ch - 'A' + 10);
}
return result;
}
void _esp32WifiModuleClientReconnect()
{
if(ESPControllerWifiClient_isDHCP)
{
WiFi.config(0U, 0U, 0U, 0U, 0U);
}
else
{
WiFi.config(ESPControllerWifiClient_ip, ESPControllerWifiClient_gateway, ESPControllerWifiClient_subnet, ESPControllerWifiClient_dns , ESPControllerWifiClient_dns);
}
WiFi.begin(ESPControllerWifiClient_SSID, ESPControllerWifiClient_password);
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array[i] == 255)
{
return 0;
}
if (array[i] > 0)
{
result = 1;
}
}
return result;
}
void _parseMacAddressString(String value, byte array[])
{
int index;
byte buffer[6] = {255, 255, 255, 255, 255, 255};
byte raz = 0;
String tempString;
while ((value.length() > 0) && (raz <= 6))
{
index = value.indexOf(":");
if (index == -1)
{
tempString = value;
value = "";
}
else
{
tempString = value.substring(0, index);
value = value.substring(index + 1);
}
buffer[raz] = byte(hexStrToInt(tempString));
raz++;
}
if (_checkMacAddres(buffer))
{
for (byte i = 0; i < 6; i++)
{
array[i] = buffer[i];
}
}
}
bool _compareMacAddreses(byte array1[], byte array2[])
{
for (byte i = 0; i < 6; i++)
{
if (array1[i] != array2[i])
{
return 0;
}
}
return 1;
}
bool _compareMacAddresWithString(byte array[], String value)
{
byte buffer[6] = {255, 255, 255, 255, 255, 255};
_parseMacAddressString(value, buffer);
return _compareMacAddreses(array, buffer);
}
bool _checkMacAddresString(String value)
{
byte buffer[6] = {255, 255, 255, 255, 255, 255};
_parseMacAddressString(value, buffer);
return _checkMacAddres(buffer);
}
String _macAddresToString(byte array[])
{
String result = "";
String temp ="";
for (byte i = 0; i < 6; i++)
{
temp=String(array[i],HEX);
if (temp.length() < 2)
{
temp = String("0") + temp;
}
result = result + temp;
if (i < 5)
{
result = result + String(":");
}
}
result.toUpperCase();
return result;
}
void reboot()
{
#if defined(ARDUINO_ARCH_MEGAAVR)
wdt_enable(WDT_PERIOD_8CLK_gc);
#elif defined(__AVR__)
wdt_enable(WDTO_15MS);
#elif defined(__arm__)
NVIC_SystemReset();
#elif defined(ESP8266) || defined(ESP32)
ESP.restart();
#else
#error "MCU reset procedure not implemented"
#endif
for (; ;)
{
}
}
BLYNK_CONNECTED()
{
ConnectTime_24813074 = millis();
Serial.println(String(ConnectTime_24813074));
Blynk.syncAll();
}
Here is the whole code.
But I don’t understand why it is needed, if by default - Blynk.connect() - everything works correctly, but with any other timeout value - nothing works.