mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
* Deprecate SPIFFS, move examples to LittleFS SPIFFS has been a great filesystem, but it has significant problems in many cases (and it's also pretty slow). Development seems to have slowed/stopped on the upstream version, and we're not able to provide support or fix the known issues with it as-is. Deprecate SPIFFS variable. Update all examples to use LittleFS instead of SPIFFS. Also, minor cleanup on very old examples which has obsolete delays waiting for the Serial port to come up, or which were stuck at 9600 baud because of their ancient AVR heritage. Fixes #7095 * Remove leftover debug code * Clean up comments in some examples * Update documentation on SPIFFS deprecation * Fix host tests to avoid deprecation warnings * Fix cut-n-paste error * Restore SpeedTest.ino, adjust to allow custom FSes Co-authored-by: Develo <deveyes@gmail.com>
123 lines
3.3 KiB
C++
123 lines
3.3 KiB
C++
/**
|
|
httpUpdateSecure.ino
|
|
|
|
Created on: 20.06.2018 as an adaptation of httpUpdate.ino
|
|
|
|
*/
|
|
|
|
#include <ESP8266WiFi.h>
|
|
#include <ESP8266WiFiMulti.h>
|
|
|
|
#include <ESP8266HTTPClient.h>
|
|
#include <ESP8266httpUpdate.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <FS.h>
|
|
#include <LittleFS.h>
|
|
|
|
#ifndef APSSID
|
|
#define APSSID "APSSID"
|
|
#define APPSK "APPSK"
|
|
#endif
|
|
|
|
ESP8266WiFiMulti WiFiMulti;
|
|
|
|
// A single, global CertStore which can be used by all
|
|
// connections. Needs to stay live the entire time any of
|
|
// the WiFiClientBearSSLs are present.
|
|
#include <CertStoreBearSSL.h>
|
|
BearSSL::CertStore certStore;
|
|
|
|
// Set time via NTP, as required for x.509 validation
|
|
void setClock() {
|
|
configTime(0, 0, "pool.ntp.org", "time.nist.gov"); // UTC
|
|
|
|
Serial.print(F("Waiting for NTP time sync: "));
|
|
time_t now = time(nullptr);
|
|
while (now < 8 * 3600 * 2) {
|
|
yield();
|
|
delay(500);
|
|
Serial.print(F("."));
|
|
now = time(nullptr);
|
|
}
|
|
|
|
Serial.println(F(""));
|
|
struct tm timeinfo;
|
|
gmtime_r(&now, &timeinfo);
|
|
Serial.print(F("Current time: "));
|
|
Serial.print(asctime(&timeinfo));
|
|
}
|
|
|
|
void setup() {
|
|
|
|
Serial.begin(115200);
|
|
// Serial.setDebugOutput(true);
|
|
|
|
Serial.println();
|
|
Serial.println();
|
|
Serial.println();
|
|
|
|
for (uint8_t t = 4; t > 0; t--) {
|
|
Serial.printf("[SETUP] WAIT %d...\n", t);
|
|
Serial.flush();
|
|
delay(1000);
|
|
}
|
|
|
|
WiFi.mode(WIFI_STA);
|
|
WiFiMulti.addAP(APSSID, APPSK);
|
|
|
|
LittleFS.begin();
|
|
|
|
int numCerts = certStore.initCertStore(LittleFS, PSTR("/certs.idx"), PSTR("/certs.ar"));
|
|
Serial.print(F("Number of CA certs read: "));
|
|
Serial.println(numCerts);
|
|
if (numCerts == 0) {
|
|
Serial.println(F("No certs found. Did you run certs-from-mozill.py and upload the LittleFS directory before running?"));
|
|
return; // Can't connect to anything w/o certs!
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
// wait for WiFi connection
|
|
if ((WiFiMulti.run() == WL_CONNECTED)) {
|
|
|
|
setClock();
|
|
|
|
BearSSL::WiFiClientSecure client;
|
|
bool mfln = client.probeMaxFragmentLength("server", 443, 1024); // server must be the same as in ESPhttpUpdate.update()
|
|
Serial.printf("MFLN supported: %s\n", mfln ? "yes" : "no");
|
|
if (mfln) {
|
|
client.setBufferSizes(1024, 1024);
|
|
}
|
|
client.setCertStore(&certStore);
|
|
|
|
// The line below is optional. It can be used to blink the LED on the board during flashing
|
|
// The LED will be on during download of one buffer of data from the network. The LED will
|
|
// be off during writing that buffer to flash
|
|
// On a good connection the LED should flash regularly. On a bad connection the LED will be
|
|
// on much longer than it will be off. Other pins than LED_BUILTIN may be used. The second
|
|
// value is used to put the LED on. If the LED is on with HIGH, that value should be passed
|
|
ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);
|
|
|
|
t_httpUpdate_return ret = ESPhttpUpdate.update(client, "https://server/file.bin");
|
|
// Or:
|
|
//t_httpUpdate_return ret = ESPhttpUpdate.update(client, "server", 443, "file.bin");
|
|
|
|
|
|
switch (ret) {
|
|
case HTTP_UPDATE_FAILED:
|
|
Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
|
|
break;
|
|
|
|
case HTTP_UPDATE_NO_UPDATES:
|
|
Serial.println("HTTP_UPDATE_NO_UPDATES");
|
|
break;
|
|
|
|
case HTTP_UPDATE_OK:
|
|
Serial.println("HTTP_UPDATE_OK");
|
|
break;
|
|
}
|
|
}
|
|
}
|