Blynk.Air OTA minimal code

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.

1 Like