Programowanie ESP8266 pod Linuksem

Napisano dnia 24.08.2015 r. o godzinie 17:00
Autor: Piotr Sperka

Wstęp

W tym artykule opiszę w jaki sposób zainstalować potrzebne narzędzia pod Linuksem do programowania dla ESP8266 oraz w jaki sposób wgrać skompilowany program. Wszystkie opisywane operacje były wykonywanie pod czystą instalacją systemu Linux Mint 17.

Instalacja toolchaina

1. Instalujemy potrzebne zależności do kompilacji toolchaina:

sudo apt-get install git autoconf automake build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-amd64 python-serial libexpat-dev

2. Tworzymy katalog dla instalacji (proponuję /opt/Espressif) oraz nadajemy sobie do niego prawa właściciela:

sudo mkdir /opt/Espressif
sudo chown NAZWA_UŻYTKOWNIKA /opt/Espressif/

3. Pobieramy z GitHuba źródła crosstool-NG:

cd /opt/Espressif
git clone -b lx106-g++ https://github.com/jcmvbkbc/crosstool-NG.git

4. Kompilujemy toolchain. Wykonujemy kolejno:

cd crosstool-NG
./bootstrap && ./configure --prefix=`pwd` && make && make install
./ct-ng xtensa-lx106-elf
./ct-ng build

5. Czekamy około 15 – 60 minut zależnie od szybkości komputera i połączenia z siecią (polecenie ./ct-ng build pobiera potrzebne źródła).

6. Dodajemy do zmiennej systemowej PATH lokalizację naszego toolchaina. Edytujemy plik ~/.bashrc dowolnym edytorem, na przykład:

nano ~/.bashrc

Na końcu pliku dopisujemy linię:

export PATH=/opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin/:$PATH

Zapisujemy plik. Po ponownym uruchomieniu konsoli powinniśmy mieć bezpośredni dostęp do toolchaina. Sprawdzamy to wpisując:

xtensa-lx106-elf-gcc --version

Powinniśmy zobaczyć informacje o wersji kompilatora.

Instalacja oprogramowania do flashowania

1. Przechodzimy do katalogu:

cd /opt/Espressif

2. Pobieramy program esptool-py:

git clone https://github.com/themadinventor/esptool esptool-py

3. Tworzymy dowiązanie symboliczne:

chmod +w /opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin
ln -s /opt/Espressif/esptool-py/esptool.py crosstool-NG/builds/xtensa-lx106-elf/bin/

Instalacja wybranego SDK

Do ESP8266 dostępnych jest kilka różnych SDK, jednak najbardziej popularne są oficjalne esp_iot_sdk oraz esp_iot_rtos_sdk. To ostatnie jest wyposażone w system FreeRTOS, dzięki czemu można tworzyć bardziej zaawanowane aplikacje.

Instalacja esp_iot_rtos_sdk

1. Przechodzimy do katalogu:

cd /opt/Espressif

2. Pobieramy SDK:

git clone https://github.com/espressif/esp_iot_rtos_sdk.git

3. Przechodzimy do katalogu z pobranym właśnie SDK:

cd esp_iot_rtos_sdk

4. Pobieramy dodatkowe biblioteki (bez nich nie uda się niczego skompilować):

wget -O lib/libc.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libc.a
wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a

5. Wydajemy polecenie:

make COMPILE=gcc

Wszystko powinno się bezbłędnie skompilować. Oznacza to poprawną instalację oprogramowania we wszystkich poprzednich krokach.

6. Możemy już zacząć tworzenie własnej aplikacji – polecam wykonać kopię czystego sdk do wybranego miejsca. Główny plik kodu aplikacji użytkownika znajduje się w KATALOG_SDK/app/user/user_main.c

Instalacja esp_iot_sdk

1. Pobieramy najnowsze archiwum z http://espressif.com/new-sdk-release/

2. Rozpakowujemy je w wybranym miejscu, a następnie z konsoli przechodzimy do tego katalogu.

3. Pobieramy dodatkowe biblioteki:

wget -O lib/libc.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libc.a
wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a

4. Aby sprawdzić działanie SDK kopiujemy zawartość któregoś z przykładów, np. KATALOG_SDK/examples/at do katalogu KATALOG_SDK/app.

5. Wydajemy polecenie:

make COMPILE=gcc

6. Jeżeli wszystko wykonaliśmy poprawnie, program powinien się skompilować bez błędów.

Flashowanie

1. Zwieramy wyprowadzenie GPIO0 do masy.

2. Podłączamy zasilanie układu, a także wyprowadzenia RX, TX oraz GND do konwertera USB – Serial (np. opartego o układ FT232).

3. Wydajemy polecenie:

sudo esptool.py --port /dev/ttyUSB0 write_flash 0x00000 "ŚCIEŻKA_DO_SDK/bin/boot_v1.4(b1).bin" 0x01000 "ŚCIEŻKA_DO_SDK/bin/upgrade/user1.4096.new.6.bin" -fs 32m

W powyższym poleceniu zarówno ścieżki i nazwy plików bin, jak i miejsca do ich wgrania mogą się różnić zależnie od konfiguracji kompilacji. Po skompilowaniu naszego kodu dostaniemy informacje, jakie pliki i gdzie należy wgrać, np.:

!!!
Support boot_v1.4 and +
Generate user1.4096.new.6.bin successully in folder bin/upgrade.
boot.bin------------>0x00000
user1.4096.new.6.bin--->0x01000
!!!

Parametr -fs 32m oznacza, że mój moduł ESP-12 jest wyposażony w 4MB pamięci flash (32Mb). Ścieżkę do portu RS232 należy oczywiście odpowiednio zmodyfikować, zależnie od posiadanego sprzętu (w przykładzie /dev/ttyUSB0).

4. Po zakończeniu wgrywania rozłączamy zasilanie, a także wyprowadzenie GPIO0 od masy i ponownie podłączamy układ do zasilania.

Zakończenie

Mam nadzieję, że powyższy poradnik pomoże Wam bezproblemowo rozpocząć przygodę z programowaniem dla ESP8266. Co prawda temat ten jest szeroko omówiony w Internecie, jednak dużo poradników zawiera błędy i niedopowiedzenia, których starałem się unikać. W razie pytań z chęcią na nie odpowiem.