Adds a 12K OTA stub 3rd stage bootloader, which reads new firmware from the LittleFS filesystem and flashes on reboot. By storing the OTA commands in a file in flash, it is possible to recover from a power failure during OTA programming. On power resume, the OTA block will simply re-program from the beginning. Support cryptographic signed OTA updates, if desired. Includes host-side signing logic via openssl. Add PicoOTA library which encapsulates the file format for the updater, including CRC32 checking. Add LEAmDNS support to allow Arduino IDE discovery Add ArduinoOTA class for IDE uploads Add MD5Builder class Add Updater class which supports writing and validating cryptographically signed binaries from any source (http, Ethernet, WiFi, Serial, etc.) Add documentation and readmes.
75 lines
1.5 KiB
Arduino
75 lines
1.5 KiB
Arduino
#include <ESP8266WiFi.h>
|
|
#include <ESP8266mDNS.h>
|
|
#include <WiFiUdp.h>
|
|
#include <ArduinoOTA.h>
|
|
|
|
#ifndef STASSID
|
|
#define STASSID "your-ssid"
|
|
#define STAPSK "your-password"
|
|
#endif
|
|
|
|
const char* ssid = STASSID;
|
|
const char* password = STAPSK;
|
|
const char* host = "OTA-LEDS";
|
|
|
|
int led_pin = 13;
|
|
#define N_DIMMERS 3
|
|
int dimmer_pin[] = { 14, 5, 15 };
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
|
|
/* switch on led */
|
|
pinMode(led_pin, OUTPUT);
|
|
digitalWrite(led_pin, LOW);
|
|
|
|
Serial.println("Booting");
|
|
WiFi.mode(WIFI_STA);
|
|
|
|
WiFi.begin(ssid, password);
|
|
|
|
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
|
|
WiFi.begin(ssid, password);
|
|
Serial.println("Retrying connection...");
|
|
}
|
|
/* switch off led */
|
|
digitalWrite(led_pin, HIGH);
|
|
|
|
/* configure dimmers, and OTA server events */
|
|
analogWriteRange(1000);
|
|
analogWrite(led_pin, 990);
|
|
|
|
for (int i = 0; i < N_DIMMERS; i++) {
|
|
pinMode(dimmer_pin[i], OUTPUT);
|
|
analogWrite(dimmer_pin[i], 50);
|
|
}
|
|
|
|
ArduinoOTA.setHostname(host);
|
|
ArduinoOTA.onStart([]() { // switch off all the PWMs during upgrade
|
|
for (int i = 0; i < N_DIMMERS; i++) {
|
|
analogWrite(dimmer_pin[i], 0);
|
|
}
|
|
analogWrite(led_pin, 0);
|
|
});
|
|
|
|
ArduinoOTA.onEnd([]() { // do a fancy thing with our board led at end
|
|
for (int i = 0; i < 30; i++) {
|
|
analogWrite(led_pin, (i * 100) % 1001);
|
|
delay(50);
|
|
}
|
|
});
|
|
|
|
ArduinoOTA.onError([](ota_error_t error) {
|
|
(void)error;
|
|
rp2040.restart();
|
|
});
|
|
|
|
/* setup the OTA server */
|
|
ArduinoOTA.begin();
|
|
Serial.println("Ready");
|
|
}
|
|
|
|
void loop() {
|
|
ArduinoOTA.handle();
|
|
}
|