Skip to content

Instantly share code, notes, and snippets.

@ddlsmurf
Last active August 7, 2021 00:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ddlsmurf/9548d2098d62995a50376d8b5e075c6b to your computer and use it in GitHub Desktop.
Save ddlsmurf/9548d2098d62995a50376d8b5e075c6b to your computer and use it in GitHub Desktop.
ESP32 https OTA #watchy #esp32
#include <wifi_update_client.h>
#include <esp_log.h>
#include <esp32-hal.h>
#include <esp_https_ota.h>
static const char *LOG_TAG = "wifi_update_client";
const char *url = "https://raw.githubusercontent.com/sqfmi/Watchy/master/examples/WatchFaces/7_SEG/7_SEG.bin";
// Thanks to Elder Scroll on the Watchy discord:
// echo "" | openssl s_client -showcerts -connect raw.githubusercontent.com:443 | sed -n "1,/Root/d; /BEGIN/,/END/p" | openssl x509 -outform PEM > raw.githubusercontent.com.pem
// The certificate should be in the file raw.githubusercontent.com.pem
const char *github_cert =
"-----BEGIN CERTIFICATE-----\n"
"MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs\n"
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"
"ZSBFViBSb290IENBMB4XDTEzMTAyMjEyMDAwMFoXDTI4MTAyMjEyMDAwMFowcDEL\n"
"MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"
"LmRpZ2ljZXJ0LmNvbTEvMC0GA1UEAxMmRGlnaUNlcnQgU0hBMiBIaWdoIEFzc3Vy\n"
"YW5jZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2\n"
"4C/CJAbIbQRf1+8KZAayfSImZRauQkCbztyfn3YHPsMwVYcZuU+UDlqUH1VWtMIC\n"
"Kq/QmO4LQNfE0DtyyBSe75CxEamu0si4QzrZCwvV1ZX1QK/IHe1NnF9Xt4ZQaJn1\n"
"itrSxwUfqJfJ3KSxgoQtxq2lnMcZgqaFD15EWCo3j/018QsIJzJa9buLnqS9UdAn\n"
"4t07QjOjBSjEuyjMmqwrIw14xnvmXnG3Sj4I+4G3FhahnSMSTeXXkgisdaScus0X\n"
"sh5ENWV/UyU50RwKmmMbGZJ0aAo3wsJSSMs5WqK24V3B3aAguCGikyZvFEohQcft\n"
"bZvySC/zA/WiaJJTL17jAgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA\n"
"MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n"
"NAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy\n"
"dC5jb20wSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29t\n"
"L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDA9BgNVHSAENjA0MDIG\n"
"BFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ\n"
"UzAdBgNVHQ4EFgQUUWj/kK8CB3U8zNllZGKiErhZcjswHwYDVR0jBBgwFoAUsT7D\n"
"aQP4v0cB1JgmGggC72NkK8MwDQYJKoZIhvcNAQELBQADggEBABiKlYkD5m3fXPwd\n"
"aOpKj4PWUS+Na0QWnqxj9dJubISZi6qBcYRb7TROsLd5kinMLYBq8I4g4Xmk/gNH\n"
"E+r1hspZcX30BJZr01lYPf7TMSVcGDiEo+afgv2MW5gxTs14nhr9hctJqvIni5ly\n"
"/D6q1UEL2tU2ob8cbkdJf17ZSHwD2f2LSaCYJkJA69aSEaRkCldUxPUd1gJea6zu\n"
"xICaEnL6VpPX/78whQYwvwt/Tv9XBZ0k7YXDK/umdaisLRbvfXknsuvCnQsH6qqF\n"
"0wGjIChBWUMo0oHjqvbsezt3tkBigAVBRQHvFwY+3sAzm2fTYS5yh+Rp/BIAV0Ae\n"
"cPUeybQ=\n"
"-----END CERTIFICATE-----\n";
static const char *event_to_str(esp_http_client_event_id_t id) {
switch (id) {
case HTTP_EVENT_ERROR: return "HTTP_EVENT_ERROR";
case HTTP_EVENT_ON_CONNECTED: return "HTTP_EVENT_ON_CONNECTED";
case HTTP_EVENT_HEADER_SENT: return "HTTP_EVENT_HEADER_SENT";
case HTTP_EVENT_ON_HEADER: return "HTTP_EVENT_ON_HEADER";
case HTTP_EVENT_ON_DATA: return "HTTP_EVENT_ON_DATA";
case HTTP_EVENT_ON_FINISH: return "HTTP_EVENT_ON_FINISH";
case HTTP_EVENT_DISCONNECTED: return "HTTP_EVENT_DISCONNECTED";
default: return "HTTP_EVENT_unknown";
}
}
esp_err_t http_event_handler(esp_http_client_event_t *evt) {
ESP_LOGI(LOG_TAG, "Download event %s (%d)", event_to_str(evt->event_id), evt->data_len);
yield();
return ESP_OK;
}
const char *wifi_update_client() {
ESP_LOGI(LOG_TAG, "Starting image download from %s", url);
disableCore0WDT();
esp_http_client_config_t config = {
.method = HTTP_METHOD_GET,
.url = url,
.cert_pem = github_cert,
.event_handler = http_event_handler,
};
esp_err_t err = esp_https_ota(&config);
if (err == ESP_OK) {
ESP_LOGI(LOG_TAG, "Download OK - restarting");
esp_restart();
return NULL;
}
return esp_err_to_name(err);
}
#ifndef WIFI_UPDATE_CLIENT_H__
#define WIFI_UPDATE_CLIENT_H__
# ifdef __cplusplus
extern "C" {
# endif
const char *wifi_update_client();
# ifdef __cplusplus
}
# endif
#endif // WIFI_UPDATE_CLIENT_H__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment