Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Any filesystem (SD/SPIFFS/LittleFS/SD_MMC) #92

Merged
merged 55 commits into from
Sep 16, 2022
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
a6cd6aa
Brought spiffs into the scope of this library
tobozo Feb 13, 2021
eb5d6e9
synching
tobozo Sep 9, 2022
787c539
tuan-karma's compiler warning fix (#a0e9e5c)
tobozo Sep 9, 2022
cb9500c
LittleFS/SD/SD_MMC/SPIFFS (any FS) support
tobozo Sep 9, 2022
089a7d6
LittleFS/SD/SD_MMC/SPIFFS (any FS) support
tobozo Sep 9, 2022
800d9a4
auto assign filesystem when applicable
tobozo Sep 9, 2022
404fdb8
Added SPIFFS/LittleFS to execOTA()
tobozo Sep 11, 2022
e7aeb78
Added progress handler
tobozo Sep 11, 2022
484e1de
bugfixes and fixtures (#3)
tobozo Sep 11, 2022
47803c4
test suite
tobozo Sep 12, 2022
b03cfd9
test suite
tobozo Sep 12, 2022
23f103d
test suite
tobozo Sep 12, 2022
3633ab3
test suite
tobozo Sep 12, 2022
2c20a59
test suite
tobozo Sep 12, 2022
9001fc9
Added workflow_dispatch to allow manual triggering
tobozo Sep 12, 2022
bc2ccb6
test suite
tobozo Sep 12, 2022
41d1931
cleanup test suite
tobozo Sep 13, 2022
3e1f16a
Implements esp32fota.setExtraHTTPHeader( name, value )
tobozo Sep 13, 2022
c6f670e
Gen test suite (#6)
tobozo Sep 14, 2022
48022b1
Update genTestSuite.yml
tobozo Sep 14, 2022
0a77ad6
Update genTestSuite.yml
tobozo Sep 14, 2022
215bee6
Update genTestSuite.yml
tobozo Sep 14, 2022
58a8268
Update genTestSuite.yml
tobozo Sep 14, 2022
3b3d618
Update genTestSuite.yml
tobozo Sep 14, 2022
35a288b
Update genTestSuite.yml
tobozo Sep 14, 2022
eb9eceb
github is utterly f****d up 😡 😠
tobozo Sep 14, 2022
df50e0b
Create gen-test-suite.yml
tobozo Sep 14, 2022
db99fd0
Update gen-test-suite.yml
tobozo Sep 14, 2022
e03a311
Update gen-test-suite.yml
tobozo Sep 14, 2022
c85a379
Update gen-test-suite.yml
tobozo Sep 14, 2022
62f95dc
Update gen-test-suite.yml
tobozo Sep 14, 2022
166aade
Update 5.final-stage.ino
tobozo Sep 14, 2022
580153b
Update 5.final-stage.ino
tobozo Sep 14, 2022
4755344
Update gen-test-suite.yml
tobozo Sep 14, 2022
995f2c8
Update gen-test-suite.yml
tobozo Sep 14, 2022
1e45c94
Update gen-test-suite.yml
tobozo Sep 14, 2022
7c0e7ce
Update gen-test-suite.yml
tobozo Sep 14, 2022
8ce7e63
Update gen-test-suite.yml
tobozo Sep 14, 2022
56be299
Update gen-test-suite.yml
tobozo Sep 14, 2022
585606b
Update gen-test-suite.yml
tobozo Sep 14, 2022
9ebaeff
Update gen-test-suite.yml
tobozo Sep 14, 2022
b0af696
Update gen-test-suite.yml
tobozo Sep 14, 2022
a460f50
Update gen-test-suite.yml
tobozo Sep 14, 2022
93a94c2
Update firmware.test-suite.json
tobozo Sep 14, 2022
557031b
Update gen-test-suite.yml
tobozo Sep 14, 2022
afc6be7
Update gen-test-suite.yml
tobozo Sep 14, 2022
0068f16
Update 3.cert-in-progmem.ino
tobozo Sep 14, 2022
8833b83
Create root_ca.h
tobozo Sep 14, 2022
cd5d746
Update gen-test-suite.yml
tobozo Sep 14, 2022
deb4dba
Update gen-test-suite.yml
tobozo Sep 14, 2022
0294cbe
update test suite
tobozo Sep 14, 2022
aab04a4
improving flow with manifest
tobozo Sep 14, 2022
337a2dc
C++11 compliance
tobozo Sep 14, 2022
2afd39f
Credits update
tobozo Sep 14, 2022
1f091b2
bump version
tobozo Sep 14, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/platformio.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
pull_request:
branches:
- master
workflow_dispatch:

jobs:
build:
Expand All @@ -30,4 +31,4 @@ jobs:
- name: Build test
run: |
pio run

93 changes: 93 additions & 0 deletions examples/anyFS/anyFS.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/**
esp32 firmware OTA

Purpose: Perform an OTA update from a bin located on a webserver (HTTPS)

Setup:
Step 1 : Set your WiFi (ssid & password)
Step 2 : set esp32fota()
Step 3 : Provide SPIFFS filesystem with root_ca.pem of your webserver

Upload:
Step 1 : Menu > Sketch > Export Compiled Library. The bin file will be saved in the sketch folder (Menu > Sketch > Show Sketch folder)
Step 2 : Upload it to your webserver
Step 3 : Update your firmware JSON file ( see firwmareupdate )

*/

// declare filesystem first !

//#include <SD.h>
//#include <SD_MMC.h>
//#include <SPIFFS.h>
#include <LittleFS.h>
//#include <PSRamFS.h>

#include <esp32fota.h> // fota pulls WiFi library

CryptoFileAsset *MyRootCA = new CryptoFileAsset( "/github.aaakk.us.kg.cert.pem", &LittleFS );


//CryptoMemAsset *MyRSAKey = new CryptoMemAsset("RSA Public Key", rsa_key_pub, strlen(rsa_key_pub)+1 );
//CryptoMemAsset *MyRootCA = new CryptoMemAsset("Certificates Chain", root_ca, strlen(root_ca)+1 );


// Change to your WiFi credentials
const char *ssid = "";
const char *password = "";

// esp32fota esp32fota("<Type of Firme for this device>", <this version>, <validate signature>, <allow insecure TLS>);
esp32FOTA esp32FOTA("esp32-fota-http", 1, false );

void setup_wifi()
{
delay(10);
Serial.print("Connecting to WiFi ");
Serial.println( WiFi.macAddress() );
//Serial.println(ssid);

WiFi.begin(/*ssid, password*/);

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println(WiFi.localIP());

esp32FOTA.setRootCA( MyRootCA );

}


void setup()
{
Serial.begin(115200);
// Provide filesystem with root_ca.pem to validate server certificate
if( ! LittleFS.begin( false ) ) {
Serial.println("LittleFS Mounting failed, aborting!");
while(1) vTaskDelay(1);
}
// use this when more than one filesystem is used in the sketch
// esp32FOTA.setCertFileSystem( &SD );

esp32FOTA.checkURL = "https://github.com/tobozo/esp32FOTA/raw/tests/examples/anyFS/test/stage1/firmware.json";
tobozo marked this conversation as resolved.
Show resolved Hide resolved


setup_wifi();
}

void loop()
{

bool updatedNeeded = esp32FOTA.execHTTPcheck();
if (updatedNeeded)
{
esp32FOTA.execOTA();
}

delay(20000);
}

77 changes: 77 additions & 0 deletions examples/anyFS/data/github.aaakk.us.kg-chain.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
-----BEGIN CERTIFICATE-----
MIIFajCCBPCgAwIBAgIQBRiaVOvox+kD4KsNklVF3jAKBggqhkjOPQQDAzBWMQsw
CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMTAwLgYDVQQDEydEaWdp
Q2VydCBUTFMgSHlicmlkIEVDQyBTSEEzODQgMjAyMCBDQTEwHhcNMjIwMzE1MDAw
MDAwWhcNMjMwMzE1MjM1OTU5WjBmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs
aWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMR2l0SHVi
LCBJbmMuMRMwEQYDVQQDEwpnaXRodWIuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
AQcDQgAESrCTcYUh7GI/y3TARsjnANwnSjJLitVRgwgRI1JlxZ1kdZQQn5ltP3v7
KTtYuDdUeEu3PRx3fpDdu2cjMlyA0aOCA44wggOKMB8GA1UdIwQYMBaAFAq8CCkX
jKU5bXoOzjPHLrPt+8N6MB0GA1UdDgQWBBR4qnLGcWloFLVZsZ6LbitAh0I7HjAl
BgNVHREEHjAcggpnaXRodWIuY29tgg53d3cuZ2l0aHViLmNvbTAOBgNVHQ8BAf8E
BAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBgNVHR8EgZMw
gZAwRqBEoEKGQGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRMU0h5
YnJpZEVDQ1NIQTM4NDIwMjBDQTEtMS5jcmwwRqBEoEKGQGh0dHA6Ly9jcmw0LmRp
Z2ljZXJ0LmNvbS9EaWdpQ2VydFRMU0h5YnJpZEVDQ1NIQTM4NDIwMjBDQTEtMS5j
cmwwPgYDVR0gBDcwNTAzBgZngQwBAgIwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3
dy5kaWdpY2VydC5jb20vQ1BTMIGFBggrBgEFBQcBAQR5MHcwJAYIKwYBBQUHMAGG
GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBPBggrBgEFBQcwAoZDaHR0cDovL2Nh
Y2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VExTSHlicmlkRUNDU0hBMzg0MjAy
MENBMS0xLmNydDAJBgNVHRMEAjAAMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkA
dgCt9776fP8QyIudPZwePhhqtGcpXc+xDCTKhYY069yCigAAAX+Oi8SRAAAEAwBH
MEUCIAR9cNnvYkZeKs9JElpeXwztYB2yLhtc8bB0rY2ke98nAiEAjiML8HZ7aeVE
P/DkUltwIS4c73VVrG9JguoRrII7gWMAdwA1zxkbv7FsV78PrUxtQsu7ticgJlHq
P+Eq76gDwzvWTAAAAX+Oi8R7AAAEAwBIMEYCIQDNckqvBhup7GpANMf0WPueytL8
u/PBaIAObzNZeNMpOgIhAMjfEtE6AJ2fTjYCFh/BNVKk1mkTwBTavJlGmWomQyaB
AHYAs3N3B+GEUPhjhtYFqdwRCUp5LbFnDAuH3PADDnk2pZoAAAF/jovErAAABAMA
RzBFAiEA9Uj5Ed/XjQpj/MxQRQjzG0UFQLmgWlc73nnt3CJ7vskCICqHfBKlDz7R
EHdV5Vk8bLMBW1Q6S7Ga2SbFuoVXs6zFMAoGCCqGSM49BAMDA2gAMGUCMCiVhqft
7L/stBmv1XqSRNfE/jG/AqKIbmjGTocNbuQ7kt1Cs7kRg+b3b3C9Ipu5FQIxAM7c
tGKrYDGt0pH8iF6rzbp9Q4HQXMZXkNxg+brjWxnaOVGTDNwNH7048+s/hT9bUQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEFzCCAv+gAwIBAgIQB/LzXIeod6967+lHmTUlvTANBgkqhkiG9w0BAQwFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaMFYxCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMDAuBgNVBAMTJ0RpZ2lDZXJ0IFRMUyBI
eWJyaWQgRUNDIFNIQTM4NCAyMDIwIENBMTB2MBAGByqGSM49AgEGBSuBBAAiA2IA
BMEbxppbmNmkKaDp1AS12+umsmxVwP/tmMZJLwYnUcu/cMEFesOxnYeJuq20ExfJ
qLSDyLiQ0cx0NTY8g3KwtdD3ImnI8YDEe0CPz2iHJlw5ifFNkU3aiYvkA8ND5b8v
c6OCAYIwggF+MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAq8CCkXjKU5
bXoOzjPHLrPt+8N6MB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA4G
A1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdgYI
KwYBBQUHAQEEajBoMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j
b20wQAYIKwYBBQUHMAKGNGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdp
Q2VydEdsb2JhbFJvb3RDQS5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2Ny
bDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDA9BgNVHSAE
NjA0MAsGCWCGSAGG/WwCATAHBgVngQwBATAIBgZngQwBAgEwCAYGZ4EMAQICMAgG
BmeBDAECAzANBgkqhkiG9w0BAQwFAAOCAQEAR1mBf9QbH7Bx9phdGLqYR5iwfnYr
6v8ai6wms0KNMeZK6BnQ79oU59cUkqGS8qcuLa/7Hfb7U7CKP/zYFgrpsC62pQsY
kDUmotr2qLcy/JUjS8ZFucTP5Hzu5sn4kL1y45nDHQsFfGqXbbKrAjbYwrwsAZI/
BKOLdRHHuSm8EdCGupK8JvllyDfNJvaGEwwEqonleLHBTnm8dqMLUeTF0J5q/hos
Vq4GNiejcxwIfZMy0MJEGdqN9A57HSgDKwmKdsp33Id6rHtSJlWncg+d0ohP/rEh
xRqhqjn1VtvChMQ1H3Dau0bwhr9kAMQ+959GG50jBbl9s08PqUU643QwmA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----
22 changes: 22 additions & 0 deletions examples/anyFS/data/github.aaakk.us.kg.cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----
88 changes: 88 additions & 0 deletions examples/anyFS/test/1.nosecurity/1.nosecurity.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/**
esp32 firmware OTA

Purpose: Perform an OTA update to both firmware and filesystem from binaries located
on a webserver (HTTPS) without checking for certificate validity

Usage: If the ESP32 had a previous successful WiFi connection, then no need to set the ssid/password
to run this sketch, the credentials are still cached :-)
Sketch 1 will FOTA to Sketch 2, then Sketch 3, and so on until all versions in firmware.json are
exhausted.


*/

#include <esp32fota.h>

// esp32fota settings
const int firmware_version = 1;
const char* fota_url = "https://github.com/tobozo/esp32FOTA/raw/tests/examples/anyFS/test/stage1/firmware.json";
const char* firmware_name = "esp32-fota-http";
const bool check_signature = false;
const bool disable_security = true;
// for debug only
const char* description = "Basic example with no security and no filesystem";

const char* fota_debug_fmt = R"DBG_FMT(

***************** STAGE %i *****************

Description : %s
Firmware type : %s
Firmware version : %i
Signature check : %s
TLS Cert check : %s

********************************************

)DBG_FMT";


// esp32fota esp32fota("<Type of Firmware for this device>", <this version>, <validate signature>, <allow insecure TLS>);
esp32FOTA esp32FOTA( String(firmware_name), firmware_version, check_signature, disable_security );

void setup_wifi()
{
delay(10);
//Serial.print("Connecting to WiFi ");
//Serial.println( ssid );
Serial.print("MAC Address ");
Serial.println( WiFi.macAddress() );

WiFi.begin(); // no WiFi creds in this demo :-)

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println(WiFi.localIP());

}


void setup()
{
Serial.begin(115200);
Serial.printf( fota_debug_fmt, firmware_version, description, firmware_name, firmware_version, check_signature?"Enabled":"Disabled", disable_security?"Disabled":"Enabled" );

esp32FOTA.checkURL = fota_url;

setup_wifi();
}

void loop()
{

bool updatedNeeded = esp32FOTA.execHTTPcheck();
if (updatedNeeded)
{
esp32FOTA.execOTA();
}

delay(20000);
}


91 changes: 91 additions & 0 deletions examples/anyFS/test/2.cert-in-spiffs/2.cert-in-spiffs.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/**
esp32 firmware OTA

Purpose: Perform an OTA update firmware from a bin located on a webserver (HTTPS)
while using filesystem to check for certificate validity

*/

#include <SPIFFS.h> // include filesystem **before** esp32fota !!
#include <esp32fota.h>


// esp32fota settings
const int firmware_version = 2;
const char* fota_url = "https://github.com/tobozo/esp32FOTA/raw/tests/examples/anyFS/test/stage1/firmware.json";
const char* firmware_name = "esp32-fota-http";
const bool check_signature = false;
const bool disable_security = false;
// for debug only
const char* description = "SPIFFS example with security";

const char* fota_debug_fmt = R"DBG_FMT(

***************** STAGE %i *****************

Description : %s
Firmware type : %s
Firmware version : %i
Signature check : %s
TLS Cert check : %s

********************************************

)DBG_FMT";

// esp32fota esp32fota("<Type of Firme for this device>", <this version>, <validate signature>, <allow insecure TLS>);
esp32FOTA esp32FOTA( String(firmware_name), firmware_version, check_signature, disable_security );

// create an abstraction of the root_ca file
CryptoFileAsset *GithubRootCA = new CryptoFileAsset( "/github.aaakk.us.kg.cert.pem", &SPIFFS );

void setup_wifi()
{
delay(10);
Serial.print("MAC Address ");
Serial.println( WiFi.macAddress() );

WiFi.begin(); // no WiFi creds in this demo :-)

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println(WiFi.localIP());
}


void setup()
{
Serial.begin(115200);
Serial.printf( fota_debug_fmt, firmware_version, description, firmware_name, firmware_version, check_signature?"Enabled":"Disabled", disable_security?"Disabled":"Enabled" );
// Provide filesystem with root_ca.pem to validate server certificate
if( ! SPIFFS.begin( false ) ) {
Serial.println("SPIFFS Mounting failed, aborting!");
while(1) vTaskDelay(1);
}

esp32FOTA.checkURL = fota_url;
esp32FOTA.setRootCA( GithubRootCA );

setup_wifi();

}

void loop()
{

bool updatedNeeded = esp32FOTA.execHTTPcheck();
if (updatedNeeded)
{
esp32FOTA.execOTA();
}

delay(20000);
}



Loading