View on GitHub

Arduino projekty pro děti

Zápisky z našich domácích Arduino projektů

← zpět na zápisky z Arduino projektů

← zpět na Maplebot

Flash firmware Micropythonu do NodeMCU (ESP8266)

Tuto sekci jsem prováděl bez dětí. Flashování firmware není zrovna záživná záležitost. Nicméně jednou se k ní děti třeba vrátí, až si budou chtít přeflashovat svoje NodeMCU :-)

Pořídil jsem několik NodeMCU devkitů šlapajících na ESP8266. Tyto čipy díky svému výkonu (v základu 80 MHz, lze zvýšit až na 160 MHz - což i výkon zvýší asi dvojnásobně) zvládají nejen Wifi, ale i interpretované jazyky. Obvykle se nabízí ke koupi s předchystaným interpretem jazyka Lua (vlastně spíš eLua), ale je možné jej vyměnit i za Micropython nebo Arduino (programujeme pak v jazyce Wiring, který je velmi podobný C/C++).

Zvolil jsem nakonec Micropython. Nechtělo se mi učit jazyk Lua a C++ je zase trochu nemotorné pro výuku dětí. Má to své výkonové dopady (Lua je zhruba 20× pomalejší než C++, Micropython asi 10×), ale jsem s tím srozuměn a jdeme to zkusit. Vždy můžeme flashovat něco jiného.

Tohle je návod, jak nahrát nový firmware právě do NodeMCU. Vlastní flash firmware jsem prováděl na Windows i Linux, návod popisuje obě platformy.

Co je potřeba umět

Hardware

Software

Aneb někdy taky toolchain. SW nářadí, které bude potřeba.

Postup

1. Stáhnout a nainstalovat NodeMCU driver

aby ho rozpoznal operační systém. NodeMCU driver najdeme zde.

2. Připojit NodeMCU k počítači přes microUSB kabel

3. Zjistit, na jakém portu se objevil

Windows (nemám bohužel českou verzi)

Linux

ls -l /dev/tty*

nebo ještě lépe

dmesg | tail

4. Nainstalovat Python

Brát verzi 3.x, na Linuxu velmi pravděpodobně už Python je.

5. Získat Esptool

Nástroj napsaný v pythonu pro flashování ESP8266 z příkazové řádky. Lze ho stáhnout přímo z Githubu a nebo je možné ho samozřejmě nainstalovat přímo přes pip:

pip install esptool

6. Zjistit typ čipu

Pokud jsme zvědaví, můžeme zjistit typ čipu.

python esptool.py --port <port> flash_id

Kde <port> je náš port, kde se NodeMCU zrovna nachází. Pro Windows tedy nějak takto:

python esptool.py --port COM28 flash_id

Pro Linux pak třeba takto:

python esptool.py --port /dev/ttyUSB0 flash_id

A dostaneme nějakou podobnou odpověď

esptool.py v2.2-dev
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting...

7. Zjistit MAC adresu

Můžeme si nechat prozradit i MAC adresu zařízení.

python esptool.py --port <port> read_mac
esptool.py v2.2-dev
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Uploading stub...
Running stub...
Stub running...
MAC: 70:01:88:20:22:21
Hard resetting...

8. Stáhnout Micropython firmware pro ESP8266

Stahujeme bin soubor.

9. Přepnout NodeMCU do flash režimu

Některé návody uvádí, že je potřeba vždy uvést čip do flash režimu pomocí tlačítek Flash a Reset. Jiné pak doplňují, že je to hodně hardwarově závislé a pokud má deska USB konektor, USB-serial konvertor a DTR + RTS piny, tak že si to vše obstará sama bez naší asistence.

NodeMCU se umí samo přepnout do flash režimu. Tento krok tedy uvádím jen pro úplnost. Netřeba nic dělat.

10. Smazat obsah flash

Některé návody se o tom nezmiňují, jiné píší o tom, že mnoho potíží je zapřičiněno tím, že předchozí firmware není řádně vymazán. Proto doporučuji nejdříve flash smazat.

python esptool.py --port <port> erase_flash
esptool.py v2.2-dev
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 5.3s
Hard resetting...

11. Zapsat nový firmware do NodeMCU

python esptool.py --baud 115200 --port <port> write_flash --flash_mode dio 0x00000 <micropython_esp_firmware>.bin

kde

Případné další parametry lze nastudovat v dokumentaci esptool.

Celá operace chvíli trvá (zhruba do minuty).

esptool.py v2.2-dev
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0240
Compressed 601136 bytes to 392067...
Wrote 601136 bytes (392067 compressed) at 0x00000000 in 34.6 seconds (effective 138.8 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting...

12. Test

Je dobré udělat test. Prvních několik flashů se mi nepovedlo (nenastavil jsem --flash-mode) a nikdo neprotestoval (ani NodeMCU, ani esptool).

Flash Micropythonu se nejlépe ověří přihlášením do konzole Micropythonu. Jsou v zásadě 3 způsoby, REPL, WebREPL AP a WebREPL klient.

Jak rozběhat Micropython REPL/WebREPL