„ESP32 czy Pico?” to jedno z najczęstszych pytań na forach elektronicznych. Obie platformy mają Wi‑Fi i Bluetooth, obie są tanie i obie da się programować w MicroPythonie. Różnią się jednak w szczegółach, które przy konkretnym projekcie mogą przesądzić o wyborze. W tym porównaniu opieram się wyłącznie na oficjalnych dokumentach: datasheetach Espressif oraz dokumentacji Raspberry Pi. Tam, gdzie dane są niejednoznaczne albo ich brakuje, piszę to wprost.
Najpierw ważne zastrzeżenie: „ESP32” to rodzina
Mówiąc „ESP32”, ludzie mają na myśli różne rzeczy. Espressif sprzedaje całą rodzinę układów:
ESP32 (klasyczny): Xtensa LX6, Wi‑Fi 4 i Bluetooth 4.2 (Classic + LE),
ESP32‑S3: dwa rdzenie Xtensa LX7, Bluetooth LE 5, natywne USB,
ESP32‑C3: jeden rdzeń RISC‑V do 160 MHz, Wi‑Fi 4 i Bluetooth LE 5,
ESP32‑C6: rdzeń RISC‑V do 160 MHz plus rdzeń niskiego poboru do 20 MHz, Wi‑Fi 6 (802.11ax) w 2,4 GHz, Bluetooth LE 5 i IEEE 802.15.4 (Zigbee, Thread),
i kolejne warianty.
Dodatkowo mało kto kupuje sam układ. Zwykle jest to płytka deweloperska z modułem, więc ilość flash, obecność PSRAM, stabilizator czy liczba wyprowadzonych pinów zależą od konkretnej płytki. Poniżej porównuję układy ESP32 i ESP32‑S3 z płytką Raspberry Pi Pico 2 W, bo tak zwykle wygląda realny wybór.
Pico 2 W w skrócie
Pico 2 W to płytka w formacie 21 × 51 mm z mikrokontrolerem RP2350 i układem radiowym Infineon CYW43439. RP2350 ma nietypową cechę: zawiera dwa rdzenie Arm Cortex‑M33 oraz dwa rdzenie Hazard3 RISC‑V i można wybrać, która para ma pracować. Taktowanie sięga 150 MHz, a pamięć SRAM ma 520 kB. Radio jest jednopasmowe (2,4 GHz, 802.11n) i obsługuje Bluetooth 5.2, a według datasheetu wspiera zarówno BLE (role central i peripheral), jak i Bluetooth Classic.
Tabela porównawcza
Cecha | ESP32 (klasyczny) | ESP32‑S3 | Pico 2 W (RP2350 + CYW43439) |
|---|---|---|---|
Rdzenie | 1 lub 2 × Xtensa LX6 | 2 × Xtensa LX7 | 2 × Cortex‑M33 lub 2 × Hazard3 RISC‑V |
Maks. taktowanie | 240 MHz (wariant S0WD: 160 MHz) | 240 MHz | 150 MHz |
SRAM | 520 KB (+16 KB RTC) | 512 KB (+16 KB RTC) | 520 kB |
Flash | zewnętrzny, zależy od modułu (wyjątek: U4WDH z 4 MB w obudowie) | zewnętrzny lub w obudowie (np. 8 MB w S3FN8) | 4 MB na płytce |
PSRAM | opcjonalny, zależy od modułu | opcjonalny, w obudowie w części wariantów (np. S3R8: 8 MB) | brak na płytce |
Wi‑Fi | 802.11b/g/n, 2,4 GHz | 802.11b/g/n, 2,4 GHz | 802.11n, 2,4 GHz |
Bluetooth | 4.2 BR/EDR + BLE | LE 5 (bez Classic) | 5.2, LE + Classic |
GPIO | 34 programowalne (6 tylko wejścia) | 45 programowalnych | 26 wyprowadzonych na złącze |
ADC | 12‑bit SAR, do 18 kanałów | 2 × 12‑bit SAR, do 20 kanałów | 12‑bit, 500 ksps, 3 kanały na złączu |
DAC | 2 × 8‑bit | brak | brak |
Programowalne I/O | RMT, LED PWM, MCPWM | RMT, LED PWM, MCPWM | PIO: 3 bloki, 12 maszyn stanów |
USB | brak natywnego (zwykle konwerter na płytce) | USB OTG full‑speed + USB Serial/JTAG | USB 1.1 host/device |
Deep‑sleep (układ) | 10 µA (RTC timer + pamięć RTC) | 7 µA | brak danych dla płytki |
Dane ESP32 pochodzą z datasheetu ESP32 v5.3, dane S3 z datasheetu ESP32‑S3 v2.2, a dane Pico 2 W z datasheetów Pico 2 W i RP2350.
Rdzenie i wydajność
Na papierze ESP32 i S3 mają przewagę taktowania: 240 MHz wobec 150 MHz. Espressif podaje w datasheetach wyniki CoreMark swoich układów, ale dla RP2350 oficjalnego wyniku w dokumentacji Raspberry Pi nie ma, więc nie porównuję wydajności liczbowo. S3 ma dodatkowo instrukcje SIMD, przydatne przy obróbce sygnałów. Sama różnica MHz między różnymi architekturami (Xtensa i Cortex‑M33) nie przekłada się wprost na wydajność.
W praktyce hobbystycznej moc obliczeniowa rzadko jest wąskim gardłem. Częściej decydują peryferia, pamięć i radio.
Pamięć
SRAM jest bardzo podobna (512–520 KB). Różnica leży gdzie indziej: ESP32 i S3 mogą korzystać z PSRAM, czyli dodatkowych megabajtów RAM. Przy S3 jest ona w obudowie niektórych wariantów, np. ESP32‑S3R8 ma 8 MB PSRAM. To ważne przy wyświetlaczach z buforem ramki, kamerze czy obróbce audio. Na płytce Pico 2 W nie ma PSRAM.
Flash w Pico 2 W to 4 MB na płytce, tak podaje strona produktu i lista cech w datasheecie. Przy ESP32 pojemność flash zależy od wybranego modułu lub płytki.
Radio
To najważniejsza część porównania dla wielu projektów:
Klasyczny ESP32 ma Wi‑Fi 802.11b/g/n do 150 Mb/s oraz Bluetooth 4.2 w trybie dual‑mode (Classic BR/EDR + BLE).
ESP32‑S3 ma to samo Wi‑Fi (kanały 20/40 MHz), ale Bluetooth tylko LE 5 (plus Mesh), bez Classic.
Pico 2 W ma radio CYW43439: 802.11n w 2,4 GHz i Bluetooth 5.2 z obsługą LE i Classic według datasheetu.
Jeśli potrzebujesz Wi‑Fi 6, Zigbee albo Thread, żadna z trzech powyższych opcji tego nie da. Spójrz na ESP32‑C6.
Wszystkie opisane tu układy działają wyłącznie w paśmie 2,4 GHz.
GPIO i analog
ESP32 i S3 mają więcej pinów, ale nie wszystkie są w pełni swobodne. W klasycznym ESP32 6 z 34 GPIO to wyłącznie wejścia, a 5 to piny „strapping”, które wpływają na tryb startu. Piny połączone z pamięcią flash/PSRAM datasheet odradza do innych celów, więc zawsze sprawdzaj pinout konkretnej płytki.
ADC a Wi‑Fi w ESP32. Dokumentacja ESP‑IDF wprost zaznacza, że ADC2 jest współdzielony z Wi‑Fi. Sterownik co prawda pilnuje dostępu, ale odczyt może się nie udać (błąd timeout), gdy ADC2 jest zajęty. W praktyce przy włączonym Wi‑Fi planuj pomiary analogowe na ADC1.
Pico 2 W ma trzy wejścia ADC na złączu (GP26–GP28). ADC ma 12 bitów i 500 ksps. Piny cyfrowe RP2350 są według datasheetu tolerancyjne na 5 V, gdy układ jest zasilony, ale nie dotyczy to pinów ADC: ich napięcie nie może przekroczyć IOVDD o więcej niż ok. 300 mV. Klasyczny ESP32 ma dodatkowo dwa 8‑bitowe przetworniki DAC i 10 sensorów dotyku (S3 ma 14 pinów dotykowych, ale nie ma DAC).
PIO: największy atut RP2350
PIO (Programmable I/O) to małe, niezależne maszyny stanów z własnym zestawem instrukcji, które sterują pinami niezależnie od rdzeni. Na RP2350 są trzy bloki PIO, razem 12 maszyn. Pozwalają zaimplementować własne protokoły i nietypowe interfejsy „sprzętowo”, bez obciążania procesora i bez zakłóceń czasowych od przerwań.
ESP32 i S3 nie mają bezpośredniego odpowiednika. Mają za to wyspecjalizowane peryferia: RMT (generowanie i odbiór przebiegów impulsowych, np. dla podczerwieni czy adresowalnych diod LED), LED PWM i MCPWM (sterowanie silnikami). Część zadań, do których na Pico używa się PIO, da się zrobić tymi blokami. PIO jest jednak bardziej uniwersalne, więc nie traktowałbym ich jako równoważnych.
Pico 2 W: rdzenie ──► PIO (3 bloki × 4 maszyny) ──► dowolny protokół na pinach
ESP32: rdzenie ──► RMT / LED PWM / MCPWM ──► przebiegi impulsowe, PWM, silniki
Pobór prądu i uśpienie
Tu uczciwe porównanie jest trudne, bo dokumenty podają różne rzeczy:
ESP32 (tabela z datasheetu): modem‑sleep przy 240 MHz na dwóch rdzeniach 30–68 mA, light‑sleep 0,8 mA, deep‑sleep 10 µA (z timerem RTC i pamięcią RTC; ok. 150 µA z pracującym koprocesorem ULP), hibernacja 5 µA.
ESP32‑S3: light‑sleep typowo 240 µA, deep‑sleep 7 µA.
RP2350: datasheet opisuje tryby SLEEP i DORMANT oraz stany niskiego poboru. Podane tam wartości to jednak liczby dla samego mikrokontrolera. Datasheet płytki Pico 2 W nie podaje tabeli poboru prądu, a na płytce pracują też przetwornica i układ radiowy.
Ważne: to są wartości dla układów, nie dla płytek deweloperskich. Dioda zasilania, stabilizator czy konwerter USB‑UART na płytce też pobierają prąd, a datasheet układu tego nie obejmuje. Przy projekcie na baterię mierz pobór na docelowym sprzęcie. W zastosowaniach „budzi się co kwadrans, wysyła pomiar i śpi” rodzina ESP32 ma dobrze udokumentowane tryby uśpienia z koprocesorem ULP, co jest jej mocną stroną.
Ekosystem i języki
Środowisko | ESP32 / S3 | Pico 2 W |
|---|---|---|
Oficjalne SDK | ESP‑IDF (Espressif) | Pico SDK (C/C++, także RISC‑V) |
Arduino | arduino‑esp32 (Espressif) | arduino‑pico (projekt społecznościowy, obsługuje Pico 2 W) |
MicroPython | oficjalne firmware ESP32_GENERIC i ESP32_GENERIC_S3 | oficjalne firmware RPI_PICO2_W |
Rust | esp‑hal (esp‑rs) | rp235x‑hal (rp‑rs) |
Obie platformy mają dojrzałe wsparcie w najpopularniejszych środowiskach. Różnica jest taka, że Arduino dla ESP32 rozwija sam producent, a dla RP2350 najpopularniejszy rdzeń to projekt społecznościowy. Na Pico firmware wgrywa się przez przeciągnięcie pliku UF2 na dysk USB.
Cena
Raspberry Pi ogłosiło Pico 2 W w listopadzie 2024 w cenie 7 USD (Pico 2 bez radia: od 5 USD). To cena startowa z oficjalnego ogłoszenia. Ceny w polskich sklepach, z VAT i wysyłką, będą inne. Dla ESP32 nie podaję cen, bo nie znalazłem oficjalnego cennika płytek, a rozrzut między producentami płytek jest ogromny.
Co wybrać? Rekomendacje według zastosowań
Pierwszy projekt, nauka MicroPythona, prosta strona WWW lub czujnik w domu: obie opcje są dobre. Pico 2 W wygrywa prostotą (jedna oficjalna płytka, jedna dokumentacja, UF2), ESP32 wyborem gotowych płytek.
Nietypowe protokoły, precyzyjne sterowanie czasowe, emulacja interfejsów: Pico 2 W, dzięki PIO.
Urządzenie na baterię, które głównie śpi: raczej ESP32/S3, z dobrze udokumentowanym deep‑sleep i koprocesorem ULP. Pamiętaj, żeby zmierzyć pobór całej płytki.
Kamera, wyświetlacz z buforem ramki, dużo danych w RAM: ESP32‑S3 z PSRAM (interfejs kamery i LCD, SIMD, więcej pamięci).
Bluetooth Classic: klasyczny ESP32 (dual‑mode w datasheecie) albo Pico 2 W, który według datasheetu też obsługuje Classic. Nie sprawdzałem, jak dojrzałe są biblioteki Classic na obu platformach w konkretnych zastosowaniach, więc zweryfikuj to dla swojego projektu. ESP32‑S3 odpada.
Pomiary analogowe przy włączonym Wi‑Fi: na ESP32 używaj ADC1. Pico 2 W ma tylko trzy wejścia ADC na złączu.
Wi‑Fi 6, Zigbee, Thread: żadna z porównywanych opcji. Wybierz ESP32‑C6.
Natywne USB (np. klawiatura HID): ESP32‑S3 albo Pico 2 W. Klasyczny ESP32 nie ma natywnego USB.
A jeśli nie wiesz, co wybrać, kup po jednej sztuce każdej. Obie są na tyle tanie, że najlepszym testem będzie własny projekt. Na Pico 2 W można zacząć od pierwszego projektu w MicroPythonie. Wnioski i pytania można wrzucać na forum wirelab, a jeśli potrzebujesz urządzenia na jednej z tych platform, zajrzyj na stronę elektronika.
Źródła
Raspberry Pi – datasheet Pico 2 W: https://datasheets.raspberrypi.com/picow/pico-2-w-datasheet.pdf
Raspberry Pi – datasheet RP2350: https://datasheets.raspberrypi.com/rp2350/rp2350-datasheet.pdf
Raspberry Pi – strona produktu Pico 2: https://www.raspberrypi.com/products/raspberry-pi-pico-2/
Raspberry Pi – „Raspberry Pi Pico 2 W on sale now at $7”: https://www.raspberrypi.com/news/raspberry-pi-pico-2-w-on-sale-now/
Espressif – datasheet ESP32: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
Espressif – datasheet ESP32‑S3: https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf
Espressif – datasheet ESP32‑C3: https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf
Espressif – datasheet ESP32‑C6: https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf
Espressif – ESP‑IDF, ADC oneshot (ADC2 i Wi‑Fi): https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/adc/adc_oneshot.html
Espressif – arduino‑esp32: https://github.com/espressif/arduino-esp32
arduino‑pico: https://github.com/earlephilhower/arduino-pico
Raspberry Pi – Pico SDK: https://github.com/raspberrypi/pico-sdk
MicroPython – ESP32_GENERIC: https://micropython.org/download/ESP32_GENERIC/
MicroPython – ESP32_GENERIC_S3: https://micropython.org/download/ESP32_GENERIC_S3/
MicroPython – RPI_PICO2_W: https://micropython.org/download/RPI_PICO2_W/
esp‑hal (Rust): https://github.com/esp-rs/esp-hal
rp‑hal (Rust, rp235x‑hal): https://github.com/rp-rs/rp-hal
