This was the sketch I used…
#define BLYNK_TEMPLATE_ID "REDACTED"
#define BLYNK_DEVICE_NAME "REDACTED"
#define BLYNK_AUTH_TOKEN "REDACTED"
#define BLYNK_FIRMWARE_VERSION "1.1.3"
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <ESP8266Ping.h>
//ESP32
//#include <Update.h>
//#include <HTTPClient.h>
//ESP8266
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
//________________________________________________________________
String overTheAirURL = "";
#define WIFI_SSID "REDACTED" //Enter Wifi Name
#define WIFI_PASS "REDACTED" //Enter wifi Password
boolean setBlynk = 0;
void setup() {
Serial.begin(74880);
checkConnection();
checkInternet();
pinMode(D4,OUTPUT);
}
boolean checkConnection() {
Serial.print("Check connecting to ");
Serial.println(WIFI_SSID);
WiFi.disconnect();
WiFi.mode(WIFI_AP_STA);
WiFi.begin(WIFI_SSID,WIFI_PASS);
int count=0;
while(count < 20){
if(WiFi.status() == WL_CONNECTED){
Serial.print("Connected to ");
Serial.println(WIFI_SSID);
Serial.print("Web Server IP Address: ");
Serial.println(WiFi.localIP());
Serial.println("");
return true;
}
delay(5000);
Serial.print(".");
count++;
}
Serial.println("Timed out........ hiddenAP = 0;");
Serial.println("");
return false;
}
void checkInternet(){
Serial.println("");
bool ret = Ping.ping("www.google.com");
if(ret){
if(setBlynk == 0){
Serial.println("ket noi NEW BLYNK NEW");
Blynk.config(BLYNK_AUTH_TOKEN);
setBlynk = 1;
}
if(!Blynk.connected()){
Serial.println("Not connected to Blynk server");
Blynk.connect(); // try to connect to server with default timeout
}else{
Serial.println("Connected to Blynk server");
}
Serial.println("");
}
}
void loop(){
Blynk.run();
if(!Blynk.connected()){
int count=0;
while(count < 3){//5 lan chay 6s Blynk.run la 30s
Blynk.run();//thoi gian chay 6s
if(Blynk.connected()){
Serial.println("!Blynk.connected(); Blynk.connected())");Serial.println("");
delay(500);
return;
}
delay(1000);
Serial.print(".");
count++;
}
Serial.println("!Blynk.connected(); internetState = 0;");Serial.println("");
delay(500);
}
}
BLYNK_CONNECTED() {
// Request the latest state from the server
Blynk.syncVirtual(V4);
}
BLYNK_WRITE(V4) {
int stateD4 = param.asInt();
digitalWrite(D4, stateD4);
}
BLYNK_WRITE(InternalPinOTA) {
Serial.println("OTA Started");
overTheAirURL = param.asString();
Serial.print("overTheAirURL = ");
Serial.println(overTheAirURL);
WiFiClient my_wifi_client;
HTTPClient http;
http.begin(my_wifi_client, overTheAirURL);
int httpCode = http.GET();
Serial.print("httpCode = ");
Serial.println(httpCode);
if (httpCode != HTTP_CODE_OK) {return;}
int contentLength = http.getSize();
Serial.print("contentLength = ");
Serial.println(contentLength);
if (contentLength <= 0) {return; }
bool canBegin = Update.begin(contentLength);
Serial.print("canBegin = ");
Serial.println(canBegin);
if (!canBegin) { return;}
Client& client = http.getStream();
int written = Update.writeStream(client);
Serial.print("written = ");
Serial.println(written);
if (written != contentLength) {return;}
if (!Update.end()) {return;}
if (!Update.isFinished()) {return;}
reboot();
}
void reboot()
{
Serial.println("Rebooting after OTA Update...");
#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 (;;) {}
}
//_________
Pete.