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?
- záloha stávající flash paměti
- od vydavatele firmware
- 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.
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.
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;)
W10 1809 python jistě též není právě ověřeno.
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.