blog.vyoralek.cz

ESP8266 a ESP32 – záloha a nahrání nového firmware pomocí esptool

Pokud chceme do hardwarového zařízení s čipem ESP8266 či ESP32 nahrát nový firmware je vhodné nejprve zálohovat ten stávající. A nejen na to se nám může hodit utilita esptool.

🎙 Poslední aktualizace článku 25.4.2020. Pokud najdete nějaké rozdíly v aktuálním stavu, dejte vědět v komentářích, díky.

Níže uvedený postup je možno použít jak pro vývojové desky s čipem ESP8266 / ESP32 tak i hotové produkty obsahující tento čip – například od firmy iTead s označením Sonoff – za předpokladu, že mají vyvedené porty pro sériovou komunikaci

Instalace esptool

Esptool je balíčkem pro Python a nejprve tak je potřeba si zajistit instalaci pythonu a pip instalátoru. Je možné ho nainstalovat jak do Pythonu 2.x tak 3.x, ale určitě doporučuji použít spíše Python 3.x.

1. Python + PIP

Windows

V aktuální verzi Windows 10 je již přítomen jak python 3 tak i pip3 instalátor balíčků. – tak jak jsem byl upozorněn, zatím Python 3 ve Windows 10 není. Pokud máme starší verzi Windows a nebo z jakéhokoliv jiného důvodu nemůžeme python najít pak si ho stáhneme a nainstalujeme z oficiálních stránek.

MacOS

Ve výchozí instalaci poslední verze MacOS Catalina máme pouze python 2.7 bez pip instalátoru. Pokud používáte balíčkovací systém brew – což rozhodně doporučuji – nainstalujeme si python 3 i s utilitou pip3 pomocí:

brew install python3

Samotná instalace nás pak informuje, že máme k dispozici pip3 instalátor balíčků:

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.7/site-packages

Linux

U Linuxu je situace nejjednodušší – já používám víceméně pouze Ubuntu a u něj (a zřejmě i u zbytku Linuxových distribucí) je Python součástí základní instalace v obou verzí, tj. jak 2.x tak 3.x a Python tak není potřeba extra instalovat.

2. Esptool balíček pro Python

Jakmile máme připravený python s pip pak esptool nainstalujeme příkazem:

# pro Python 2.x
pip install esptool

# pro Python 3.x
pip3 install esptoool

Zobrazení informací o použitém chipu

Pokud si nejste jistí velikosti flash paměti tak hodí příkaz

~ esptool.py flash_id

který nejen tuto informaci obsahuje.

ESP8266

esptool.py v2.5.1
Found 4 serial ports
Serial port /dev/cu.usbserial-1A150
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:2f:86:18
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

ESP32

esptool.py v2.5.1
Found 2 serial ports
Serial port COM4
Connecting........___
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core
MAC: 30:ae:a4:21:c2:b4
Uploading stub...
Running stub...
Stub running...
Warning: ESP32 has no Chip ID. Reading MAC instead.
MAC: 30:ae:a4:21:c2:b4
Hard resetting via RTS pin...

Občas se může hodit specifikovat přímo sériový port – zejména pokud jich máme více aktivních a to uděláme pomocí volby --port, tedy např:

# Linux/MacOS
~ esptool.py --port /dev/cu.SLAB_USBtoUART flash_id 

# Windows
~ esptool.py --port COM4 flash_id 

Promazání stávajícího obsahu flash paměti

Doporučovaný krok, než začněme nahrávat nový firmware je po vytvoření zálohy stávajícího vymazat obsah flash paměti:

~ esptool.py --port /dev/cu.SLAB_USBtoUART erase_flash
esptool.py v2.5.1
Serial port /dev/cu.SLAB_USBtoUART
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 5c:cf:7f:58:2f:21
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.7s
Hard resetting via RTS pin...

Nahrání nového firmware / obnovení zálohy

Druhým užitečným příkazem je write_flash, který slouží k nahrání nového firmware a nebo zálohy do flash paměti desky.

~ esptool.py write_flash 0x00000 backup.img
esptool.py v2.5.1
Found 4 serial ports
Serial port /dev/cu.usbserial-1A150
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:2f:86:18
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0340
Compressed 4194304 bytes to 399650...
Wrote 4194304 bytes (399650 compressed) at 0x00000000 in 38.7 seconds (effective 866.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Kde image pro nahrání vzít?

  1. záloha stávající flash paměti
  2. od vydavatele firmware
  3. kompilací ze zdrojových souborů

1. Záloha stávající flash paměti

První možností vytvoření image je příkaz read_flash, který uloží obsah flash paměti na váš disk a budete tak mít kompletní zálohu.

~ esptool.py read_flash 0x00000 0x400000 backup.img
esptool.py v2.5.1
Found 4 serial ports
Serial port /dev/cu.usbserial-1A150
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:2f:86:18
Uploading stub...
Running stub...
Stub running...
4194304 (100 %)
4194304 (100 %)
Read 4194304 bytes at 0x0 in 379.4 seconds (88.4 kbit/s)...
Hard resetting via RTS pin...

2. Od vydavatele firmware

Kromě zdrojových souborů jsou často k dispozici i předkompilované bin soubory v různých variantách. Stahujte ale jen od prověřených zdrojů, jelikož neuvidíte co je uvnitř.

Sonoff

Oficiálně získat binární souboru firmwaru od Sonoffu je vypadá to nemožné. Naneštěstí je možné si vyrobit zálohu výše uvedeným způsobem a níže najdete oficiální firmware alespoň pro pár produktů od Sonoffu:

Tasmota

Příkladem alternativního firmware může být firmware Tasmota, o kterém mám na blogu spousty článků a který je vydáván i jako BIN soubory v mnoha modifikacích.

Příklad binárních image pro přímé nahrání do flash paměti
Příklad binárních image pro přímé nahrání do flash paměti

3. Kompilace ze zdrojových souborů

Samotnou kompilaci můžete také provést na jednom počítači a nahrání pomocí esptool.py na dalším.

Pokud budete chtít vyexportovat binární soubor z Arduino IDE, pak tuto možnost najdete v menu Projekt -> Export kompilovaného Binaru.

V případě použití Visual Studio Code je potřeba zapnout PlatformIO: Build a výsledné soubory najdeme v podadresáři .pioenvs adresáře se zdrojovými soubory. Např. build sonoff je uložen v .pioenvs/sonoff/firmware.bin.

Aktualizace ESPTool

pip install esptool --upgrade

Kompletní a vyčerpávající popis všech možnosti esptoolu najdete na stránkách projektu na GitHubu.

4 comments

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

  • Nevím, že by ve windows měl být python, v 1803 není, v 1809 možná ano, ale nikde jsem o tom nenašel zmínku. Dokonce si ho nenainstalovalo ani visual studio 2017, tak nějak jsem měl pocit, že jsem to tam kdysi měl. Ale tak to je jen drobný komentář pro autora, jestli je to fakt ve W10 nyní standardně (samotného by mě to zajímalo;)

  • Dobrý den. Snažím se postupovat podle návodu, ale narazil jsem na divné chování. Po připojení k Sonoff RF Bridge mi esptool dovolí vždy zadat jen jeden příkaz. Například esptool.py –port COM5 flash_id se provede a když zadám jakýkoli další příkaz skončí komunikace s COM portem na timeout. Když Sonoff restartuji, zase můžu zadat jen jeden příkaz a další skončí na timeout. A tak pořád dokola …. netušíte, co dělám špatně?

    • Po konzultaci na Tasmota Chatu na https://discordapp.com/ jsem se dozvěděl, že to odpojování po každém příkazu je „normální“ chování pro „4-wire flash mode“ a jediné řešení je restart zařízení před každým dalším příkazem. Překvapilo mne, že se o tom na žádném manuálu pro Tasmota flashing nepíše.

Odebírejte blog emailem

Mějte ihned informaci o novém článku ze světa technologií.