diff --git a/BIlinkerAndHttpsOta.ino b/BIlinkerAndHttpsOta.ino index fdeacf4..b018abe 100644 --- a/BIlinkerAndHttpsOta.ino +++ b/BIlinkerAndHttpsOta.ino @@ -9,7 +9,10 @@ #include #include #include "httpslei.h" - +/**/ +const String this_version = "v1"; +const String next_version = "v2"; +/**/ void button1_callback(const String & state); void none_callback(const String & data); void ot_callback(const String & state); @@ -69,9 +72,11 @@ void ot_callback(const String & state){ { Blinker.print("hello\n"); ButtonOta.print("on"); - httpsOtaStart(); - }else if (state == "off") - { + int code = checkNewOTA(next_version); //检查文件是否存在 + if (code==HTTP_CODE_OK || code == HTTP_CODE_MOVED_PERMANENTLY){ + httpsOtaStart(); + } + }else if (state == "off"){ ButtonOta.print("off"); } } \ No newline at end of file diff --git a/build/preproc/ctags_target_for_gcc_minus_e.cpp b/build/preproc/ctags_target_for_gcc_minus_e.cpp index 3df9e8d..87b8ac9 100644 --- a/build/preproc/ctags_target_for_gcc_minus_e.cpp +++ b/build/preproc/ctags_target_for_gcc_minus_e.cpp @@ -18,6 +18,7 @@ void ot_callback(const String & state); char *auth = "c7f09e6ce624"; char *ssid = "101_lei"; char *pswd = "leiyun1314"; +const String version = "v1"; BlinkerButton Button1("btn-abc",button1_callback); BlinkerButton ButtonOta("ota",ot_callback); @@ -70,9 +71,11 @@ void ot_callback(const String & state){ { Blinker.print("hello\n"); ButtonOta.print("on"); - httpsOtaStart(); - }else if (state == "off") - { + int code = checkNewOTA(version); + if (code==HTTP_CODE_OK || code == HTTP_CODE_MOVED_PERMANENTLY){ + httpsOtaStart(); + } + }else if (state == "off"){ ButtonOta.print("off"); } } diff --git a/build/sketch/httpslei.cpp b/build/sketch/httpslei.cpp index b862354..eef1c0d 100644 --- a/build/sketch/httpslei.cpp +++ b/build/sketch/httpslei.cpp @@ -3,6 +3,8 @@ #include #include "httpslei.h" #include +#include +#include /* * - ESP_OK: OTA data updated, next reboot will use specified partition. * - ESP_FAIL: For generic failure. @@ -13,6 +15,7 @@ * - For other return codes, refer OTA documentation in esp-idf's app_update component. */ static const char *url = "https://www.lshserver.com:9006/test/esp32-v1.bin"; //state url of your firmware image +String urls = "https://www.lshserver.com:9006/test/"; static const char *server_certificate =\ "-----BEGIN CERTIFICATE-----\n\ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n\ @@ -86,12 +89,50 @@ void readStaus(void *p){ delay(1000); } } +/***/ +int checkNewOTA(const String version){ + WiFiClientSecure *client = new WiFiClientSecure; + int httpCode = 0; + if(client) { + client -> setCACert(server_certificate); + { + // Add a scoping block for HTTPClient https to make sure it is destroyed before WiFiClientSecure *client is + HTTPClient https; + Serial.print("[HTTPS_CHECK] begin "+urls+"esp32-"+version+".bin"+"\n"); + if (https.begin(*client,urls+"esp32-"+version+".bin")) { // HTTPS + Serial.print("[HTTPS_CHECK] GET...\n"); + // start connection and send HTTP header + httpCode = https.GET(); + // httpCode will be negative on error + if (httpCode > 0) { + // HTTP header has been send and Server response header has been handled + Serial.printf("[HTTPS_CHECK] GET... code: %d\n", httpCode); + // file found at server + if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { + Serial.println("file is ok"); + } + } else { + Serial.printf("[HTTPS_CHECK] GET... failed, error: %s\n", https.errorToString(httpCode).c_str()); + } + https.end(); + } else { + Serial.printf("[HTTPS_CHECK] Unable to connect\n"); + } + // End extra scoping block + } + delete client; + } else { + Serial.println("Unable to create client"); + } + return httpCode; +} void httpsOtaStart(){ + HttpsOTA.onHttpEvent(HttpEvent); //启用https 调试信息 HttpsOTA.begin(url,server_certificate);//开始升级 - xTaskCreate(readStaus,"readStaus", 2048,NULL,2, NULL);//状态回调 + xTaskCreate(readStaus,"readStaus",2048,NULL,2, NULL);//状态回调 } void httpsOtaTurnOn(){ - HttpsOTA.onHttpEvent(HttpEvent); //启用https 调试信息 + } /* 第一步:在setup中调用 httpsOtaTurnOn() diff --git a/build/sketch/httpslei.cpp.d b/build/sketch/httpslei.cpp.d index ed7db29..a091adc 100644 --- a/build/sketch/httpslei.cpp.d +++ b/build/sketch/httpslei.cpp.d @@ -215,4 +215,45 @@ c:\Users\32244\Desktop\BIlinkerAndHttpsOta\build\sketch\httpslei.cpp.o: \ C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/esp_rom/include/esp32/rom/rtc.h \ C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/esp_rom/include/esp32/rom/ets_sys.h \ C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/soc/esp32/include/soc/rtc_cntl_reg.h \ - C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\Update\src/HttpsOTAUpdate.h + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\Update\src/HttpsOTAUpdate.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\HTTPClient\src/HTTPClient.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\WiFi\src/WiFiClient.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\WiFiClientSecure\src/WiFiClientSecure.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\WiFiClientSecure\src/ssl_client.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/platform.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/port/include/mbedtls/esp_config.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/config.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/check_config.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/port/include/esp_mem.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/platform_time.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/net.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/net_sockets.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ssl.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/port/include/mbedtls/bignum.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/bignum.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ecp.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ssl_ciphersuites.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/pk.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/md.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/platform_util.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/rsa.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ecdsa.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/cipher.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/x509_crt.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/x509.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/asn1.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/x509_crl.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/dhm.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ecdh.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/debug.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/entropy.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/sha512.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/port/include/sha512_alt.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/hal/include/hal/sha_types.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/esp_rom/include/esp32/rom/sha.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ctr_drbg.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/aes.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/port/include/aes_alt.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/port/include/aes/esp_aes.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/hal/include/hal/aes_types.h \ + C:\Users\32244\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/error.h diff --git a/build/sketch/httpslei.cpp.o b/build/sketch/httpslei.cpp.o index d53c11c..b28a082 100644 Binary files a/build/sketch/httpslei.cpp.o and b/build/sketch/httpslei.cpp.o differ diff --git a/build/sketch/httpslei.h b/build/sketch/httpslei.h index 266a618..0eacc79 100644 --- a/build/sketch/httpslei.h +++ b/build/sketch/httpslei.h @@ -9,4 +9,5 @@ void readStaus(void *p); void httpsOtaStart(void); void httpsOtaTurnOn(void); void otaSuccess(void); +int checkNewOTA(const String version); #endif \ No newline at end of file diff --git a/httpslei.cpp b/httpslei.cpp index 973a201..f5b2459 100644 --- a/httpslei.cpp +++ b/httpslei.cpp @@ -2,6 +2,8 @@ #include #include "httpslei.h" #include +#include +#include /* * - ESP_OK: OTA data updated, next reboot will use specified partition. * - ESP_FAIL: For generic failure. @@ -12,6 +14,7 @@ * - For other return codes, refer OTA documentation in esp-idf's app_update component. */ static const char *url = "https://www.lshserver.com:9006/test/esp32-v1.bin"; //state url of your firmware image +String urls = "https://www.lshserver.com:9006/test/"; static const char *server_certificate =\ "-----BEGIN CERTIFICATE-----\n\ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n\ @@ -85,14 +88,50 @@ void readStaus(void *p){ delay(1000); } } +/** + * @brief 检查版本文件是否存在 + * + * @param version 版本号,例如"v1",最终合成的文件名是 esp32-v1.bin + * @return int 返回https的状态码 + */ +int checkNewOTA(const String version){ + WiFiClientSecure *client = new WiFiClientSecure; + int httpCode = 0; + if(client) { + client -> setCACert(server_certificate); + { + // Add a scoping block for HTTPClient https to make sure it is destroyed before WiFiClientSecure *client is + HTTPClient https; + Serial.print("[HTTPS_CHECK] begin "+urls+"esp32-"+version+".bin"+"\n"); + if (https.begin(*client,urls+"esp32-"+version+".bin")) { // HTTPS + Serial.print("[HTTPS_CHECK] GET...\n"); + // start connection and send HTTP header + httpCode = https.GET(); + // httpCode will be negative on error + if (httpCode > 0) { + // HTTP header has been send and Server response header has been handled + Serial.printf("[HTTPS_CHECK] GET... code: %d\n", httpCode); + // file found at server + if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { + Serial.println("file is ok"); + } + } else { + Serial.printf("[HTTPS_CHECK] GET... failed, error: %s\n", https.errorToString(httpCode).c_str()); + } + https.end(); + } else { + Serial.printf("[HTTPS_CHECK] Unable to connect\n"); + } + // End extra scoping block + } + delete client; + } else { + Serial.println("Unable to create client"); + } + return httpCode; +} void httpsOtaStart(){ - HttpsOTA.begin(url,server_certificate);//开始升级 - xTaskCreate(readStaus,"readStaus", 2048,NULL,2, NULL);//状态回调 -} -void httpsOtaTurnOn(){ HttpsOTA.onHttpEvent(HttpEvent); //启用https 调试信息 -} -/* -第一步:在setup中调用 httpsOtaTurnOn() -第二步:在需要升级的时候调用 httpsOtaStart(); -*/ \ No newline at end of file + HttpsOTA.begin(url,server_certificate);//开始升级 + xTaskCreate(readStaus,"readStaus",2048,NULL,2, NULL);//状态回调 +} \ No newline at end of file diff --git a/httpslei.h b/httpslei.h index 03fdb98..e39ae88 100644 --- a/httpslei.h +++ b/httpslei.h @@ -1,11 +1,10 @@ #ifndef _HTTPSLEI_H__ #define _HTTPSLEI_H__ -#include "esp_http_client.h" -#include "esp_https_ota.h" -#include "HttpsOTAUpdate.h" -void HttpEvent(HttpEvent_t*event); -void readStaus(void *p); -void httpsOtaStart(void); -void httpsOtaTurnOn(void); -void otaSuccess(void); + #include "esp_http_client.h" + #include "esp_https_ota.h" + #include "HttpsOTAUpdate.h" + void HttpEvent(HttpEvent_t*event); + void readStaus(void *p); + void httpsOtaStart(void); + int checkNewOTA(const String version); #endif \ No newline at end of file