ESP32 + Linux + VS Code — jak zacząć zabawę, czyli migamy! (edycja 2026)
Ten wpis to uwspółcześniona wersja mojego tutoriala z 2020 roku (oryginał na forum.lothar-team.pl). Przez 5 lat zmieniło się praktycznie wszystko — i to na lepsze. Kiedyś trzeba było ręcznie klonować repo, pilnować submodułów i wklejać kilometrowe ścieżki do
.bashrc. Dziś całość stawia się w kilkanaście minut, a Python 2.7 odszedł (na szczęście) w niepamięć.
Co się zmieniło od 2020?
| Było (ESP-IDF v4.1, 2020) | Jest (ESP-IDF v6.x, 2026) |
|---|---|
ręczne git clone --recursive + checkout release |
instalator EIM robi wszystko sam |
install.sh + ręczne dopisywanie PATH do .bashrc |
jedna komenda aktywująca środowisko |
| Python 2.7 (już wtedy martwy) | Python ≥ 3.10 |
make, make flash |
idf.py build, idf.py flash monitor |
| VS Code = goły edytor + wtyczki C/C++ i CMake | oficjalne rozszerzenie ESP-IDF (build/flash/monitor/menuconfig z poziomu edytora) |
| tylko ESP32 | ESP32, S2, S3, C3, C6, H2, P4... |
1. Instalacja ESP-IDF przez EIM
Espressif ma teraz oficjalny instalator: ESP-IDF Installation Manager (EIM). Na Ubuntu/Debianie dodajemy repozytorium APT i instalujemy:
echo "deb [trusted=yes] https://dl.espressif.com/dl/eim/apt/ stable main" | sudo tee /etc/apt/sources.list.d/espressif.list
sudo apt update
sudo apt install eim # GUI + CLI (albo: eim-cli, jeśli wolisz sam terminal)
Następnie instalujemy najnowszą stabilną wersję ESP-IDF (w chwili pisania: v6.1):
eim install
I to naprawdę wszystko. EIM pobierze ESP-IDF, toolchain (kompilator, OpenOCD, esptool),
postawi środowisko Pythona i skonfiguruje ścieżki. Żadnego grzebania w .bashrc,
żadnego kopiowania kilometrowego PATH jak 5 lat temu 😉
Jeśli chcesz wybrać konkretną wersję IDF albo ścieżkę instalacji, odpal interaktywny kreator:
eim wizard
2. Aktywacja środowiska
Po instalacji EIM wypisze ścieżkę do skryptu aktywacyjnego. Środowisko aktywujemy w terminalu:
source ~/.espressif/activate_idf_v6.1.sh
Warto dodać sobie alias do ~/.bashrc (to jedyna rzecz, jaką dziś dopisujemy do basha!):
alias idf='source ~/.espressif/activate_idf_v6.1.sh'
Od teraz wpisanie idf w terminalu daje nam dostęp do idf.py i całego toolchaina.
3. Uprawnienia do portu szeregowego
To się akurat nie zmieniło — user musi należeć do grupy dialout,
żeby esptool mógł gadać z płytką po /dev/ttyUSB0:
sudo usermod -aG dialout $USER
Po tym trzeba się wylogować i zalogować ponownie (albo zrestartować system).
4. VS Code — teraz z prawdziwym wsparciem
W 2020 pisałem, że "nie ma IDE, po prostu edytujemy pliki". To już nieaktualne. Espressif rozwija oficjalne rozszerzenie ESP-IDF dla VS Code:
- Otwórz VS Code → Extensions (
Ctrl+Shift+X) - Zainstaluj ESP-IDF (wydawca: Espressif Systems)
F1→ ESP-IDF: Configure ESP-IDF Extension → wskaż istniejącą instalację z EIM
Dostajemy: budowanie/flashowanie/monitor jednym kliknięciem z paska na dole,
graficzny menuconfig, debugowanie przez OpenOCD i poprawnie skonfigurowany
IntelliSense bez ręcznej zabawy w c_cpp_properties.json.
5. No to migamy! 🚨
Tworzymy projekt z przykładu (już nie kopiujemy ręcznie folderów z repo):
idf.py create-project-from-example "espressif/led_strip:blink"
# albo klasycznie, z przykładów IDF:
cp -r $IDF_PATH/examples/get-started/blink ~/projekty/blink && cd ~/projekty/blink
Ustawiamy target (nowość — jeden framework obsługuje całą rodzinę chipów):
idf.py set-target esp32 # albo esp32s3, esp32c3, esp32c6...
Numer pinu LED ustawiamy teraz w menuconfig (sekcja Example Configuration),
a nie w kodzie:
idf.py menuconfig
Sam kod też się zmienił. Nowe devkity mają adresowalną diodę RGB (WS2812), więc przykład obsługuje oba warianty. Wersja dla zwykłej diody na GPIO:
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "sdkconfig.h"
static const char *TAG = "example";
#define BLINK_GPIO CONFIG_BLINK_GPIO
static uint8_t s_led_state = 0;
static void configure_led(void)
{
ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
gpio_reset_pin(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}
void app_main(void)
{
configure_led();
while (1) {
ESP_LOGI(TAG, "Turning the LED %s!", s_led_state ? "ON" : "OFF");
gpio_set_level(BLINK_GPIO, s_led_state);
s_led_state = !s_led_state;
vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
}
}
Ciekawostki vs 2020:
gpio_pad_select_gpio()→gpio_reset_pin()(stare API wyleciało),- zamiast
printfużywamyESP_LOGI— logi mają poziomy, tagi i kolory w monitorze, - okres migania (
CONFIG_BLINK_PERIOD) też konfigurujemy wmenuconfig.
Budujemy, wgrywamy i podglądamy logi jedną komendą:
idf.py -p /dev/ttyUSB0 flash monitor
I (315) example: Example configured to blink GPIO LED!
I (325) example: Turning the LED ON!
I (1325) example: Turning the LED OFF!
I (2325) example: Turning the LED ON!
Z monitora wychodzimy przez Ctrl+].
Podsumowanie
Postawienie środowiska ESP32 w 2026 to zupełnie inna bajka niż 5 lat temu: 3 komendy na instalację, 1 na aktywację — i migamy. Espressif odrobił lekcję z developer experience, a ESP-IDF to dziś jeden z przyjemniejszych ekosystemów embedded do pracy pod Linuksem.
Dioda miga, logi lecą — można zaczynać prawdziwą zabawę. 🎉