ESP32 STEP 2. ESP-IDF Espressif’s official IoT Development Framework
Środowisko Espressif ESP-IDF jest oficjalną platformą projektową dla mikrokontrolerów ESP32.
IDF używa C/C++ jako głównego języka programowania i obsługuje cross-compilation (generowania kodu maszynowego dla platformy/procesora innej niż ta, na której został ten kompilator uruchomiony). IDF działa w systemach operacyjnych, takich jak Linux, Mac i Windows.
W tym wpisie pokażę jak w Visual Studio Code uruchomić program napisany w środowisku IDF.
Podobnie jak w kroku 1. nie będę ospisywał jak zainstalować IDF i skonfigurować toolchain(nażędzia potrzebne do cross-compilation) tylko dostarczę gotowy kontener który wystarczy uruchomić w VS.
Klonowanie repozytorium z projektem w IDF
W konsoli wpisujemy
git clone https://github.com/sviete/AIS-ESP-DEV-PROJECTS.git
lub jeżeli mieliśmy już wcześniej sklonowane repozytorium z STEP 1. to w konsoli przechodzimy do folderu AIS-ESP-DEV-PROJECTS
i wykonujemy aktualizację kodów:
cd AIS-ESP-DEV-PROJECTS
git pull
Otwieramy projekt IDF w VS Code
W VS Code wybieramy File
→ Open Folder
a następnie wybieramy nasz sklonowany projekt step-2-idf
Uruchamiamy projekt w kontenerze Docker
Projekt ma skonfigurowany kontener Dockera w którym są pobierane i instalowane pakiety, środowisko IDF i dodatek PlatformIO . W CS Code uruchamiamy wiersz poleceń kombinacją klawiszy: Ctrl + Shift + p
a nstępnie w wierszu poleceń wyszukujemy komendy Reopen in container
Instalujemy program na ESP32
W konfiguracji pliku platformIO mamy ustawioną płytę jako esp32-s3-devkitc-1
(bo taką mam) i framework espidf
podłączamy naszą płytę z ESP32 do USB i instalujemy (wybierając w PlatformIO zadanie Upload) nasz pierwszy program w IDF
Program
Po zainstalowaniu nasz program robi 3 rzeczy:
-
Loguje powitanie za pomocą standardowej komendy C
printf
-
Loguje informacje o układze ESP32
-
Przechodzi do nieskończonej pętli - tzw. Super Loop
Debug
Nasz projekt step-2-idf bazuje na projekcie step-1-debug, w kontenerze mamy też zainstalowane narzędzia do debugowania kodu, dzięki czemu możemy ustawić pułapkę (brekpoint) na początku naszego kodu i przejść do jego wykonywania krok po kroku:
Wynik programu w konsoli
Jak widać nasz program wszedł w nieskończoną pętlę tzw. Super Loop, w tej pętli może odbywać się to co nasz program ma robić, czyli wykonywać zadania jedno po drugim, np. mierzyć jakąś wartość z czujnika podłączonego do GPIO i raportować np. do Home Assistant czy do chmury.
Podejście z nieskończoną pętlą jest całkowicie poprawne i szeroko stosowane w frameworku Arduino. Jednak nasze ESP32 potrafi więcej, bo działa na systemie operacyjnym freeRTOS (real time operating system) który może wykonywać zadania jednocześnie. Dzięki Espressif IDF mamy łatwy dostęp do możliwości systemu freeRTOS i możemy uruchamiać zadania w osobnych wątkach - to podejście do programowania ESP32 pokażę w kroku 3.