This is an old revision of the document!
NodeMCU
Poslední velkou zajímavostí v oblasti levných IoT zařízení je bezdrátový mikrokontroler ESP8266 dodávaný čínským výrobcem Espressif Systems. Původní myšlenka byla vytvořit funkční UART bridge s WiFi pro mikrokontrolery. Nasledně vznikl ESP8266 mikrokontroler založený na procesoru 32-bit Tensilica Xtensa LX106 běžící na frekvenci 80 MHz s plně funkční WiFi sestavou.
NodeMCU je open-source firmware a hardwarová vývojářská sada, která urychluje vývoj prototypů IoT zařízení v několika řádcích LUA skriptovacího prostředí. NodeMCU firmware je postaven pro čip ESP8266 WiFi SOC a přináší LUA skriptovací prostředí založené na jazyku eLua. Vývojářská sada NodeMCU je založena na ESP8266 a implementuje GPIO, PWM, IIC, 1-Wirend a ADC na jedné desce.
Firmware NodeMCU Github
Developer Kit v1.0 NodeMCU DevKit 1.0 Github
Dokumentace k NodeMCU firmware a modulům je dostupná na adrese NodeMCU Documentation
Dokumentace k NodeMCU firmware skriptovacího prostředí na adrese NodeMCU LUA Scripting Documentation
Hardware
NodeMCU hardware je vybaven převodníkem ESP8266 se zabudovaným WiFi vysílačem, dále čipem pro komunikaci přes seriový port 'USB to URT' CP2102-9, lineárním DC stabilizátorem SPX3819, A/D převodníkem SS12 a dvěmi tlačítky pro RST a FLASH PTS820
Technické parametry:
- CPU: 80/160 MHz Tensilica Xtensa LX106
- RAM: 64 KiB of instruction RAM, 96 KiB of data RAM
- Flash: 512M - 4M, velikost zaleží na modelu ESP8266
- WiFi zabudovaná v NodeMCU
- 16 GPIO pinů, SPI, I2C, I2S, UART, 10-bit ADC
Diagramy
Hardwarové zapojení jednotlivých částí NodeMCU je v dokumentaci na GitHubu. Dokumentaci zapojení najdete na NODEMCU_DEVKIT
PIN Mapa
Důležité upozornění
- Pin D0 (
GPIO16
) můžete použít jenom jako gpio read/write a nepodporuje interrupt/pwm/i2c/ow. - Při každém bootování, resetu ci probuzení pin
GPIO15
MUSÍ
být nastaven naLOW
a pinGPIO2
MUSÍ
být nastaven naHIGH
. K tomu třeba dát pozor na pinGPIO0
, který při nastavení naHIGH
nabootuje doRUN
módu a při nastavení naLOW
se zapneFLASH
mód. - Pokud chcete použít
SLEEP
mód, pak propojte pinyGPIO16
aRST
, aGPIO16
bude nastaven po každém probuzení na hodnotuLOW
.
Software
Programování NodeMCU vyžaduje programovací model velice podobny Node.js a namísto JavaScript používáte LUA. Programovací model je asynchroní a even-driven model, který se vyplatí používat.
Firmware
Firmware může obsahovat různé moduly, které jsou rozšířením funkcí pro jazyk eLua použitý v NodeMCU. Firmware je open source a je možné ho získat několika způsoby
- služba v cloudu, která podle zvolených komponent vytvoří požadovaný firmware NodeMCU BUILD
- kompilací firmwaru v předpřipraveném Docker Image
- vytvořením vlastního prostředí s nástroji a toolchainem pro sestavení firmware
- stažením již existujícího firmwaru s vybranými moduly od třetích stran
Kompilace firmware
Linux Build Environment - Návod jak postupovat při instalaci a nastavení prostředí na Ubuntu Serveru, a následné kompilace firmware pomocí nástroje make
.
Originální návod je dostupný na ESP8266 Wiki
Prostředí pro kompilaci firmware pro NodeMCU je postaveno na serveru Ubuntu.
Pro instalaci nám stačí mini verze. 64-bit Ubuntu (mini.iso)
V instalátoru Ubuntu vybereme pouze “Basic Ubuntu Server” a “openSSH Server”
Po restaru je potřeba doinstalovat následující aplikace
$ sudo apt-get install build-essential zip gdb vim make unrar autoconf automake bison texinfo libtool mc gcc g++ gperf libc-dbg ncurses-dev expat lua5.1 lua5.1-doc luarocks gperf bison flex texinfo git help2man gawk python python-pip unzip screen python2.7 python-serial $ for m in lua-bitlib luafilesystem md5 luaposix luasocket; do sudo luarocks install $m; done $ sudo pip install mkdocs
Stáhnout z githubu ESP Open SDK a spustit make
$ git clone --recursive https://github.com/pfalcon/esp-open-sdk $ cd esp-open-sdk $ make STANDALONE=y |& tee make0.log
Pokud se při spuštění make STANDALONE=y |& tee make0.log vyskytne chyba (chybějící aplikace a pod.), tak je třeba ji doinstalovat a spustit make STANDALONE=y |& tee make0.log znovu
Editovat soubor ~/.bashrc
a přidat na jeho konec
export PATH="$HOME/esp-open-sdk/xtensa-lx106-elf/bin/:$PATH" alias xgcc="xtensa-lx106-elf-gcc"
Na stránce s firmware zjistit odkaz na poslední verzi
Stáhnout zdrojové soubory a rozbalit je
$ cd ~ $ wget https://github.com/nodemcu/nodemcu-firmware/archive/1.5.4.1-master_20161001.zip $ unzip 1.5.4.1-master_20161001.zip -d nodemcu-firmware
Otevřít adresář
$ cd ~/nodemcu-firmware/nodemcu-firmware-1.5.4.1-master_20161001
V souboru user_modules.h
je možné zapínat a vypínat moduly, které budou zahrnuty do firmware
$ mcedit app/include/user_modules.h
Spuštění kompilace firmware se provede příkazem
$ make
Výsledný firmware je uložen ve složce bin, např.
-rw-rw-r-- 1 node node 27872 Oct 26 11:21 0x00000.bin -rw-rw-r-- 1 node node 357683 Oct 26 11:21 0x10000.bin
Nahrání firmware na ESP8266
Firmware je potřeba do esp8266 nahrát. K tomuto účelu jsou na internetu dostupné programy a skripty. Předvedeme si dva nástroje jeden pro Linux napsaný v Pythonu Esptool.py a druhý pro Windows napsaný v Deplhi NodeMCU-Flasher.
Před nahráním NodeMCU firmware se ujistěte, že jej se máte zkompilovaný. Také před nahráním firmwaru je třeba na NodeMCU zapnout FLASH mód a budťo zmáčknutím tlačítka FLASH na NodeMCU nebo před rebootem nastavte na pin GPIO0
na hodnotu LOW
. Viz. upozornění
Výsledný zkopilovaný bootloader a firmware je uložen ve složce ../nodemcu-firmware/bin
.
Bootloader nese název 0x00000.bin a firmware 0x10000.bin.
-rw-rw-r-- 1 node node 27872 Oct 26 11:21 0x00000.bin -rw-rw-r-- 1 node node 357683 Oct 26 11:21 0x10000.bin
Nástoj Esptool.py
Esptool vyžaduje Python 2. K instalaci esptool
použijeme správce balíčků pip
.Pokud používáte verzi Pythonu 2 >=2.7.9 nebo Python 3 >=3.4 pip
je již součástí vaší instalace.
Instalace pip:
$ python get-pip.py
Instalace esptool pomocí pip:
$ sudo pip install –upgrade esptool
Pokud máte výchozí verzi Python 3, pak příkaz bude následující:
$ sudo pip2 install esptool
Zkombinování bin souborů do monolitní binárky:
$ esptool.py make_image -f bin/0x00000.bin -a 0x00000 -f bin/0x10000.bin -a 0x10000 bin/flash.bin
Předtím než budeme nahrávat firmware ujistěte se, že jste členy dialout
skupiny, která vám dá práva a můžete komunikovat přes sériový port např. /dev/ttyUSB0
.
Přidání aktuálního uživatele do dialout
skupiny:
$ sudo adduser $USER dialout
Nahrání výsledných binárek po kompilaci:
$ esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 bin/0x00000.bin 0x10000 bin/0x10000.bin
Nahrání monolitické binárky:
$ esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 bin/flash.bin
Nástoj ESP8266 Flasher
Stránka projektu na GitHubu: NodeMCU Flasher
Stáhněte z GitHubu NodeMCU Flasher.
Osobně používám pro práci s GIT prostředím na Windows 10 GIT scm.
ESP8266Flasher najdete ve ložce kam jste si stáhli soubory z GitHubu.
%PATHNODEMCUFLASHER%\Win64\Release\ESP8266Flasher.exe
Ověřit ve Správci zařízení seriový port pro kominikaci s NodeMCU.
devmgmt.msc
Nahrání LUA skriptů na ESP8266
Nástrojů pro nahravání existuje víc než dost a jsou zdokumentovány zde.
Nástroj Luatool
Stránka projektu na GitHubu: LUA Tool
Stáhněte si luatool
:
$ mkdir -p ~/.opt && cd ~/.opt $ git clone https://github.com/4refr0nt/luatool.git $ cd ~/.opt/luatool/luatool
Nahrání init.lua soboru:
$ cd ~/.opt/luatool/luatool $ python luatool.py --port /dev/ttyUSB0 --src init.lua --dest init.lua --verbose
Nástroj ESPlorer
Stránka projektu na GitHubu: ESPlorer
ESPlorer můžete stáhnout zde.
ESPlorer je integrované vývojařské prosředí pro ESP8266, primarně podporující LUA pro NodeMCU, MicroPython a vybrané AT príkazy. Vyžaduje instalované JAVA prostředí Standard Edition - SE ver 7 a vyšší.
Podporované platformy:
- Windows(x86, x86-64)
- Linux(x86, x86-64, ARM soft & hard float)
- Solaris(x86, x86-64)
- Mac OS X(x86, x86-64, PPC, PPC64)