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.

Instalace esptool

Esptool je balíčkem pro Python a nejprve tak je potřeba si zajistit instalaci pythonu a pip instalátoru.

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 Mojave 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

2. Esptool balíček pro Python

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

 pip3 install esptool

Co esptool umí

Pokud si nejste jistí velikosti flash paměti vašeho ESP8266 nebo ESP32 tak hodí příkaz flash_id, který tuto informaci obsahuje:

Informace o desce

ESP8266

➜  ~ esptool.py flash_id
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 flash_id
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ř:

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

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ř.

Příkladem může být firmware sonoff-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.

2 komentáře

Napsat komentář

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;)

%d blogerům se to líbí: