wtorek, 9 maja 2017

ESP32 - Konfiguracja środowiska

Co będzie nam potrzebne

Najpierw trzeba sobie przygotować środowisko w którym będziemy pisać i kompilować oprogramowanie. Potrzebne nam będzie:

  • komputer PC z dowolnym systemem operacyjnym: Windows, Linux lub Mac. Ja będę używał Windowsa ale poza Toolchainem reszta powinna wyglądać identycznie na każdym systemie.
  • Toolchain do kompilacji aplikacji na ESP32. Toolchain to w uproszczeniu kross-kompilator i biblioteka standardowa C
  • ESP-IDF który zasadniczo zawiera API dla ESP32 i skrypty do obsługi Toolchaina
  • Edytor tekstowy  do pisania programów w C np. Eclipse, Notepad++, Visual Studio Code albo cokolwiek w czym lubisz pisać
  • no i oczywiście moduł ESP32. Ja będę używał ESP‑DevKitC, który ma na pokładzie ESP-WROOM-32, przyciski do resetu i wgrywania firmware'u, interfejs USB i wyprowadzone większość pinów. Przyda się również kabel microUSB.


Konfiguracja Toolchaina

Przygotować Toolchain można sobie na dwa sposoby. Najszybszym i najprostszym sposobem na rozpoczęcie pracy z ESP32 jest zainstalowanie gotowego Toolchaina. 
Zamiast pobierać binarny toolchain z witryny Espressif, możesz samodzielnie zbudować narzędzie.
Jeśli nie przychodzą Ci do głowy powody, dla których musisz go samodzielnie zbudować, prawdopodobnie lepiej jest trzymać się wersji binarnej. Oto niektóre z przyczyn, dla których warto skompilować toolchain ze źródła:
  • chcesz użyć innej wersji GCC (np. 7.1)
  • chcesz użyć jakiejś alternatywy dla newlib np. newlib-nano
  • jesteś ciekawy i / lub masz dużo wolnego czasu
  • nie masz zaufania do plików binarnych pobranych z Internetu
Ja wybieram opcję pierwszą i pobieram toolchain ze strony Espressif: https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20170330.zip a następnie rozpakowuję na dysku D. Po rozpakowaniu w katalogu d:/msys32 możesz uruchomić terminal mingw32.exe.


Pobranie ESP-IDF

Oprócz toolchaina potrzebne są nam również biblioteki/API do ESP32. Są one udostępniane przez Espressif w repozytorum na githubie https://github.com/espressif/esp-idf . Użyjemy je i w tym celu tworzymy otwieramy terminal, tworzymy katalog w którym chcemy umieścić ESP-IDF, przechodzimy do niego i robimy klona za pomocą polecenie git clone:
mkdir ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git

Toolchain potrzebuje dostępu do ESP-IDF, bo w przeciwnym razie projekty nie będą się budować. Aby wskazać gdzie ESP-IDF się znajduje należy ustawić zmienną środowiskową IDF_PATH. Można to robić ręcznie po każdym uruchomieniu komputera lub na trwałe ustawić to w profilu użytkownika. W tym celu w katalogu D:\msys32\etc\profile.d tworzymy nowy skrypt o nazwie export_idf_path.sh w którym umieszczamy:

export IDF_PATH="D:/msys32/home/Mateusz/esp/esp-idf"

Oczywiście ścieżkę trzeba odpowiednio zmodyfikować, bo nie każdy ma na imię Mateusz ;)
Teraz zapisujemy plik, zamykamy konsolę i ponownie otwieramy. Aby sprawdzić czy wszystko poszło ok, wklepujemy: printenv IDF_PATH Powinniśmy dostać coś takiego:

Zasadniczo już teraz mamy przygotowane całe środowisko do zabawy z ESP32. Sprawdźmy teraz czy jesteśmy w stanie skompilować jakiś przykład i wgrać do ESP-DevKitC


Hello world!

Skopiujmy sobie przykład hello_world dostarczony przez Espresiff do nowego katalogu:

cd ~/esp/
cp -r $IDF_PATH/examples/get-started/hello_world .

Zauważ, że na końcu drugiego polecenia jest kropka, która oznacza: "skopiuj do katalogu w którym jestem".

Teraz potrzebna nam będzie informacja pod jakim numerem portu COM pojawia się moduł. Podłączamy więc moduł do komputera i sprawdzamy w menadżerze urządzeń:
W moim przypadku jest to port COM4 - trzeba tę informację zapamiętać.
Przejdźmy teraz do katalogu z projektem i go skonfigurujmy:

cd ~/esp/hello_world 
make menuconfig

Po chwili pokaże się menu znajome każdemu kto próbował kiedykolwiek zmienić coś w jądrze Linuksa. 

Przechodzimy do Serial flasher config > Default serial port i ustawiamy odpowiednio port, po czym wychodzimy i na końcu zapisujemy.

Teraz pozostało nam jedynie skompilować projekt i wgrać do urządzenia. Można to zrobić jednym poleceniem:

make flash

Jeśli wszystko pójdzie dobrze na końcu powinieneś zobaczyć coś takiego:

Przykład, który wgraliśmy wysyła Hello world! na konsolę i po chwili się resetuje. Możemy to podejrzeć w dowolnym terminalem np Putty (baudrate 115200) lub za pomocą wbudowanych narzędzi w ESP-IDF:

make monitor


No to tyle na dzisiaj. Następnym razem odpalimy GPIO, podłączymy LED i może jakiś switch i spróbujemy to oprogramować.

niedziela, 7 maja 2017

Wznawiam działalność bloga. Parę słów o ESP32

Minęły ponad 3 lata od ostatniego wpisu, więc zostały przekroczone wszelkie możliwe timeouty. Czas zatem na reaktywację. Impulsem do tego są dary, które zamówione od naszych żółtych braci właśnie dotarły.
Post udostępniony przez Mateusz Klatecki (@kltcki)
Jakiś czas temu zamówiłem moduły ESP-WROOM-32 oraz ESP-DevKitC żeby ułatwić sobie prototypowanie.
Cena modułów ESP-WROOM-32 jest stosunkowo niewielka ok. $5 jeśli zamówi się w Chinach.  W Polsce można znaleźć poniżej 30zł. A możliwości takiej kosteczki o rozmiarach 18x25 mm są naprawdę duże. Na pokładzie znajdziemy m.in. :

  • dwurdzeniowy MCU taktowany zegarem do 240MHz
  • Wi-Fi z wbudowaną anteną na PCB
  • Bluetooth 4.2 i BLE
  • 448 kB wewnętrznej pamięci Flash i 4 MB zewnętrznej
  • 520 kB wewnętrznej pamięci SRAM
  • wbudowany czujnik temperatury i Halla
  • RTC (potrzebny zewnętrzny kwarc)
  • i 32 wyprowadzenia GPIO ze sporą ilością interfejsów:
    • 3x UART
    • 3x SPI
    • 2x I2C 
    • 2x I2S
    • 2x 12-bitowy przetwornik ADC z sukcesywną aproksymacją
    • 2x 8-bitowy przetwornik DAC
    • Wyjścia PWM
    • Interfejs kart SD
Ważną rzeczą jest również to, że moduły mają certyfikaty: FCC, CE, IC, TELEC, SRRC & KCC, dzięki czemu wprowadzenie komercyjnego produktu na rynek będzie dużo łatwiejsze.

Pomysłów na wykorzystanie tego modułu mam w głowie kilka a proces poznawania modułu i odpalania poszczególnych peryferiów postanowiłem uwiecznić na blogu. So, stay tuned :)