-
Notifications
You must be signed in to change notification settings - Fork 637
TwoStepUpdates
Starting with ESPurna version 1.14.1 and when building with Arduino Core 2.7.4+, it is possible to upload .bin file compressed with gzip
See our OTA page for more information
As more and more features get packed into the firmware the binary image grows bigger. Until a few weeks ago it was one of my requirements to build images below the 512000 bytes size. That's the maximum size of an image so two of them would fit in a 1MB flash memory using the '1M (no SPIFFS)' memory layout.
The flash memory is split into 4096 bytes sectors, so a 1MB flash memory has 256 sectors. One of those sectors is used for EEPROM and 4 more are reserved space at the end of the flash. That leaves us with 251 sectors for code (assuming no SPIFFS partition). And that means the code must not be larger than 125 sectors to be able to do OTA. That's 512000 bytes or 500Kb.
ESPurna is close to that limit and I have sacrificed some features that are disabled by default so the limit is not met. But with the release of Arduino Core 2.4.0 things have gone worst on the size battle, albeit much better on other aspects.
That's why I'm starting to use another approach: the two-step updates. The idea behind it is to flash a stripped-down version of the firmware first, lighter and with the minimum features required to flash it again with the real, full-featured image. This lighter version is the ESPurna minimal binary and right now it is around ~350Kb. This means that using this method you can now flash an image of up to ~650Kb.
Of course, it's not as easy as it is doing a single flash, but I think it's worth it.
Well, as the name says, you will have to flash over-the-air your device twice. The first time with the 'minimal' image and the second one with the specific image for your device. You can do the first OTA upgrade using any of the OTA methods.
The actual .bin can only be flashed by:
- Using WebUI or HTTP
/upgrade
endpoint (only when using -minimal-webui) - Using espota.py script (only when using -minimal-arduino-ota)
- Connecting via the telnet and typing
ota http://$local_http_server/firmware.bin
. (HTTP protocol support is very limited) - Running
env ESPURNA_IP=192.168.1.115 ESPURNA_AUTH=your_password pio run -e ... -t upload
- Selecting the proper "Network Port" in the Arduino IDE (under "Tools > Port > Network ports") (only when using -minimal-arduino-ota)
If you are using PlatformIO to build the firmware, you can also try using the ESPurna OTA Manager (still a beta feature) that will guide you through the process...
This image is basically a stripped-off version of the ESPurna firmware, without several features that usually come bundled in. Currently, there are only two variants:
-
-minimal-arduino-ota
with every module disabled, but: mDNS server, Telnet (no debug logs!), Terminal commands, ArduinoOTA and WiFi -
-minimal-webui
with stock web server, to allow HTTP updates instead of ArduinoOTA
If you're looking for support:
- Issues: this is the most dynamic channel at the moment, you might find an answer to your question by searching open or closed issues.
- Wiki pages: might not be as up-to-date as we all would like (hey, you can also contribute in the documentation!).
- Gitter channel: you have better chances to get fast answers from project contributors or other ESPurna users. (also available with any Matrix client!)
- Issue a question: as a last resort, you can open new question issue on GitHub. Just remember: the more info you provide the more chances you'll have to get an accurate answer.
- Backup the stock firmware
- Flash a pre-built binary image
- Flash a virgin Itead Sonoff device without opening
- Flash TUYA-based device without opening
- Flash Shelly device without opening
- Using PlatformIO
- from Visual Studio Code
- Using Arduino IDE
- Build the Web Interface
- Over-the-air updates
- Two-step updates
- ESPurna OTA Manager
- NoFUSS
- Troubleshooting
- MQTT
- REST API
- Domoticz
- Home Assistant
- InfluxDB
- Prometheus metrics
- Thingspeak
- Alexa
- Google Home
- Architecture
- 3rd Party Plugins
- Coding style
- Pull Requests