Wgrywamy firmware do NodeMCU v2 - krok po kroku
W poprzednim tygodniu opisywałem świetną płytkę NodeMCU v2 opartą na układzie ESP8266. Oprócz podstawowych zagadnień, pokazywałem również jak wgrać nowy firmware w postaci binarnej jaki przygotowali twórcy. Najnowsza dostępna wersja w dniu tego wpisu to NodeMCU 0.9.6 datowana na 2015/02/16. Możemy jednak wgrać nowszy build, a nawet skorzystać z rozwojowego drzewa dev120.
Wszystko czego będziemy potrzebowali to Linuksa, trochę czasu i odrobinę miejsca na dysku twardym (około 4GB)
ESP Open SDK
W pierwszej kolejności sklonujmy repozytorium ESP Open SDK i przygotujmy zestaw odpowiednich narzędzi:
- cd ~
- mkdir nodemcu
- cd nodemcu/
- git clone https://github.com/pfalcon/esp-open-sdk.git
- cd esp-open-sdk/
- make STANDALONE=y
W zależności od posiadanego sprzętu i prędkości sieci, proces ten może zając od kilku do kilkunastu minut. Po tym czasie powinien wyświetlić się komunikat o pomyślnym wykonaniu zadania z prośbą o modyfikację zmiennej środowiskowej PATH. W moim przypadku będzie to:
- export PATH=/home/korneliusz/nodemcu/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
Sprawdźmy jeszcze, czy wszystko jest poprawnie, wydając poniższe polecenie:
- xtensa-lx106-elf-gcc -v
Using built-in specs.
COLLECT_GCC=xtensa-lx106-elf-gcc
COLLECT_LTO_WRAPPER=/home/korneliusz/nodemcu/esp-open-sdk/xtensa-lx106-elf/libexec/gcc/xtensa-lx106-elf/4.8.2/lto-wrapper
Target: xtensa-lx106-elf
Configured with: /home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.2/configure --build=x86_64-build_unknown-linux-gnu --host=x86_64-build_unknown-linux-gnu --target=xtensa-lx106-elf --prefix=/home/korneliusz/nodemcu/esp-open-sdk/xtensa-lx106-elf --with-local-prefix=/home/korneliusz/nodemcu/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sysroot --disable-libmudflap --with-sysroot=/home/korneliusz/nodemcu/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sysroot --with-newlib --enable-threads=no --disable-shared --with-pkgversion='crosstool-NG 1.20.0' --disable-__cxa_atexit --with-gmp=/home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-mpfr=/home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-mpc=/home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-isl=/home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-cloog=/home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-libelf=/home/korneliusz/nodemcu/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/buildtools --enable-lto --enable-target-optspace --disable-libgomp --disable-libmudflap --disable-nls --disable-multilib --enable-languages=c,c++
Thread model: single
gcc version 4.8.2 (crosstool-NG 1.20.0):
Możemy przystąpić do budowania firmware
Ponownie klonujemy repozytorium - tym razem zawierające firmware:
- cd ~/nodemcu/
- git clone https://github.com/nodemcu/nodemcu-firmware.git
- cd nodemcu-firmware.git/
Na tym etapie musimy zdecydować, czy interesuje nas gałąź master (obecnie z wersją 0.9.6), czy może chcemy spróbować deweloperskiej wersji 1.2.0. Jeśli tak, wybieramy gałąź dev120. Jeśli nie, pomijamy poniższe polecenie:
- git checkout dev120
Na koniec nie pozostaje nam już nic innego, jak wydanie polecenia kompilacji:
- make
Kiedy kompilacja dobiegnie końca, możemy przygotować nasz firmware i wgrać go NodeMCU v2 (oczywiście podłączająć go do USB):
- tools/esptool.py elf2image app/.output/eagle/debug/image/eagle.app.v6.out
- tools/esptool.py write_flash -fm dio -fs 32m -ff 40m 0x00000 app/.output/eagle/debug/image/eagle.app.v6.out-0x00000.bin 0x10000 app/.output/eagle/debug/image/eagle.app.v6.out-0x10000.bin
I praktycznie tyle. Sprawdźmy jeszcze za pomocą minicoma, czy rezultat jest zgodny z oczekiwaniami:
- minicom -D /dev/ttyUSB0 -b 9600
Po restarcie powinniśmy ujrzeć świeży firmware:
Custom firmware
Przed kompilacją i wgraniem, możemy zmodyfikować konfigurację naszego firmwareu edytując plik app/include/user_modules.h.
Właśnie tutaj zdecydujemy o dostępności poszczególnych modułów, oszczędzając tym samym cenne kilobajty.
Wpisy na podobny temat
- 19 Jul 2015 » NodeMCU v2 - idealna płytka dla IoT Hardware Arduino
- 24 Jun 2013 » SoundBall + oświetlenie relaksacyjne - Prototyp Arduino
- 23 Nov 2013 » Nowy dział poradnika Arduino Blog Arduino
Komentarze
Rozglądam się za jakąś baterią do tego ustrojstwa, ale na elty nic znaleść nie mogę. Możesz coś polecić?
2*AA?
Nie bardzo rozumiem pytania ;) Podpinasz pod Vin od 3.3 max do 8V. Jest tam regulator LDO
No chyba właśnie chciałem przekombinować niepotrzebnie z bateryjką pokroju: https://elty.pl/pl/p/750mAh-Battery-for-ODROID-W/1146
Jeśli chodzi o budowanie, to znalazłem takie coś http://frightanic.com/nodemcu-custom-build/ - nie trzeba budować u siebie. (Btw na githubie właśnie usunęli katalog pre_build).
ale trzeba podawać maila :)
Fakt, trzeba, o ile ktoś nie ma adresu specjalnie na śmieciowanie to można jeszcze użyć docker imagea: https://hub.docker.com/r/marcelstoer/nodemcu-build/ żeby nie szarpać się instalacją zależności