first commit
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* This example demonstrates how to use to update the firmware using Arduino_ESP_OTA library
|
||||
*
|
||||
* Steps:
|
||||
* 1) Create a sketch for your ESP board and verify
|
||||
* that it both compiles and works.
|
||||
* 2) In the IDE select: Sketch -> Export compiled Binary.
|
||||
* 3) Create an OTA update file utilising the tools 'lzss.py' and 'bin2ota.py' stored in
|
||||
* https://github.com/arduino-libraries/ArduinoIoTCloud/tree/master/extras/tools .
|
||||
* A) ./lzss.py --encode SKETCH.bin SKETCH.lzss
|
||||
* B) ./bin2ota.py ESP SKETCH.lzss SKETCH.ota
|
||||
* 4) Upload the OTA file to a network reachable location, e.g. LOLIN_32_Blink.ino.ota
|
||||
* has been uploaded to: http://downloads.arduino.cc/ota/LOLIN_32_Blink.ino.ota
|
||||
* 5) Verify if a custom ca_cert is needed by default Amazon root CA are used
|
||||
* https://www.amazontrust.com/repository/
|
||||
* 6) Perform an OTA update via steps outlined below.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* INCLUDE
|
||||
******************************************************************************/
|
||||
|
||||
#include <Arduino_ESP32_OTA.h>
|
||||
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "arduino_secrets.h"
|
||||
|
||||
#include "root_ca.h"
|
||||
|
||||
/******************************************************************************
|
||||
* CONSTANT
|
||||
******************************************************************************/
|
||||
|
||||
/* Please enter your sensitive data in the Secret tab/arduino_secrets.h */
|
||||
static char const SSID[] = SECRET_SSID; /* your network SSID (name) */
|
||||
static char const PASS[] = SECRET_PASS; /* your network password (use for WPA, or use as key for WEP) */
|
||||
|
||||
|
||||
#if defined(ARDUINO_NANO_ESP32)
|
||||
static char const OTA_FILE_LOCATION[] = "https://downloads.arduino.cc/ota/NANO_ESP32_Blink.ino.ota";
|
||||
#else
|
||||
static char const OTA_FILE_LOCATION[] = "https://downloads.arduino.cc/ota/LOLIN_32_Blink.ino.ota";
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* SETUP/LOOP
|
||||
******************************************************************************/
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {}
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
Serial.print ("Attempting to connect to '");
|
||||
Serial.print (SSID);
|
||||
Serial.println("'");
|
||||
WiFi.begin(SSID, PASS);
|
||||
delay(2000);
|
||||
}
|
||||
Serial.print ("You're connected to '");
|
||||
Serial.print (WiFi.SSID());
|
||||
Serial.println("'");
|
||||
|
||||
Arduino_ESP32_OTA ota;
|
||||
Arduino_ESP32_OTA::Error ota_err = Arduino_ESP32_OTA::Error::None;
|
||||
|
||||
/* Configure custom Root CA */
|
||||
ota.setCACert(root_ca);
|
||||
|
||||
Serial.println("Initializing OTA storage");
|
||||
if ((ota_err = ota.begin()) != Arduino_ESP32_OTA::Error::None)
|
||||
{
|
||||
Serial.print ("Arduino_ESP_OTA::begin() failed with error code ");
|
||||
Serial.println((int)ota_err);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Serial.println("Starting download to flash ...");
|
||||
int const ota_download = ota.download(OTA_FILE_LOCATION);
|
||||
if (ota_download <= 0)
|
||||
{
|
||||
Serial.print ("Arduino_ESP_OTA::download failed with error code ");
|
||||
Serial.println(ota_download);
|
||||
return;
|
||||
}
|
||||
Serial.print (ota_download);
|
||||
Serial.println(" bytes stored.");
|
||||
|
||||
|
||||
Serial.println("Verify update integrity and apply ...");
|
||||
if ((ota_err = ota.update()) != Arduino_ESP32_OTA::Error::None)
|
||||
{
|
||||
Serial.print ("ota.update() failed with error code ");
|
||||
Serial.println((int)ota_err);
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("Performing a reset after which the bootloader will start the new firmware.");
|
||||
#if defined(ARDUINO_NANO_ESP32)
|
||||
Serial.println("Hint: Arduino NANO ESP32 will blink Red Green and Blue.");
|
||||
#else
|
||||
Serial.println("Hint: LOLIN32 will blink Blue.");
|
||||
#endif
|
||||
delay(1000); /* Make sure the serial message gets out before the reset. */
|
||||
ota.reset();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
#define SECRET_SSID ""
|
||||
#define SECRET_PASS ""
|
||||
@@ -0,0 +1,88 @@
|
||||
const char* root_ca = \
|
||||
/* Baltimore CyberTrust Root */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE\n" \
|
||||
"ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li\n" \
|
||||
"ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC\n" \
|
||||
"SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs\n" \
|
||||
"dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME\n" \
|
||||
"uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB\n" \
|
||||
"UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C\n" \
|
||||
"G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9\n" \
|
||||
"XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr\n" \
|
||||
"l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI\n" \
|
||||
"VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB\n" \
|
||||
"BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh\n" \
|
||||
"cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5\n" \
|
||||
"hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa\n" \
|
||||
"Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H\n" \
|
||||
"RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 1 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD\n" \
|
||||
"VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1\n" \
|
||||
"MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv\n" \
|
||||
"bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" \
|
||||
"ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH\n" \
|
||||
"FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ\n" \
|
||||
"gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t\n" \
|
||||
"dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce\n" \
|
||||
"VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n" \
|
||||
"/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3\n" \
|
||||
"DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM\n" \
|
||||
"CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy\n" \
|
||||
"8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa\n" \
|
||||
"2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2\n" \
|
||||
"xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 2 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"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\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 3 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG\n" \
|
||||
"EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy\n" \
|
||||
"NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ\n" \
|
||||
"MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB\n" \
|
||||
"f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr\n" \
|
||||
"Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43\n" \
|
||||
"rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc\n" \
|
||||
"eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 4 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG\n" \
|
||||
"EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy\n" \
|
||||
"NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ\n" \
|
||||
"MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN\n" \
|
||||
"/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri\n" \
|
||||
"83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\n" \
|
||||
"HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA\n" \
|
||||
"MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1\n" \
|
||||
"AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n" \
|
||||
"-----END CERTIFICATE-----\n";
|
||||
Reference in New Issue
Block a user