Kodėl šis klausimas vis dar aktualus?
Jei bent kartą esi bandęs susigaudyti hobių elektronikos pasaulyje, tikriausiai žinai tą jausmą – sėdi prieš kompiuterį, turi projektą galvoje, o parduotuvės krepšelyje jau laukia keliolika komponentų. Ir tada sustoji. ESP32 ar Raspberry Pi Pico? Abu atrodo panašiai, abu kainuoja panašiai, abu gali valdyti LED juostą ar temperatūros sensorių. Bet skirtumas tarp jų yra daug gilesnis nei atrodo iš pirmo žvilgsnio.
Šis klausimas nėra naujas – abu įrenginiai rinkoje jau kurį laiką, tačiau jis išlieka aktualus, nes nuolat atsiranda naujų žmonių, pradedančių kelionę į mikrovaldiklių pasaulį. Be to, abu produktai nuolat tobulėja: ESP32 šeima išaugo iki keliolikos variantų (ESP32-S2, S3, C3, H2…), o Raspberry Pi Pico sulaukė Pico W ir Pico 2 versijų su RP2350 procesoriumi. Taigi net patyrę kūrėjai kartais turi iš naujo įvertinti, kurį pasirinkti konkrečiam projektui.
Šiame straipsnyje nesistengiu parodyti, kuris geresnis absoliučia prasme – tokio atsakymo tiesiog nėra. Vietoj to pabandysiu padėti suprasti, kuris tinka tau ir tavo projektui.
Techninės specifikacijos: kas po dangčiu?
Pradėkime nuo sausų faktų, nes be jų tolimesnis pokalbis neturi prasmės. Bet žadu – nepaversiu šito lentelių kapinėmis.
ESP32 (kalbame apie klasikinį ESP32, ne naujuosius variantus) remiasi Espressif Systems sukurtu dviejų branduolių Xtensa LX6 procesoriumi, veikiančiu iki 240 MHz. Turi 520 KB SRAM, o Flash atmintis paprastai būna 4 MB (kartais 8 ar 16 MB, priklausomai nuo modulio). Svarbiausia – jame integruoti Wi-Fi (802.11 b/g/n) ir Bluetooth 4.2 (bei BLE) moduliai. Tai ne papildomi komponentai – tai dalis paties lusto.
Raspberry Pi Pico naudoja RP2040 – pirmąjį Raspberry Pi Foundation sukurtą procesorių. Du ARM Cortex-M0+ branduoliai, veikiantys iki 133 MHz, 264 KB SRAM ir 2 MB Flash (standartiniame Pico). Pico W versija prideda Wi-Fi ir Bluetooth per Infineon CYW43439 lustą. Pico 2 su RP2350 jau siūlo Cortex-M33 branduolius ir gerokai daugiau galimybių.
Vienas dalykas, kurį verta paminėti ir kuris dažnai ignoruojamas – RP2040 turi unikalią funkciją pavadinimu PIO (Programmable I/O). Tai aštuoni nepriklausomi mažieji procesoriai, galintys valdyti I/O operacijas tiksliai ir greitai, neapkraunant pagrindinių branduolių. Tai leidžia implementuoti tokius protokolus kaip WS2812 LED valdymas, I2S audio ar net VGA signalą – programiškai, be specialios aparatinės įrangos. ESP32 analogiško mechanizmo neturi, nors turi savo RMT (Remote Control) periferiją, kuri iš dalies atlieka panašias funkcijas.
GPIO kištukai: ESP32 turi apie 34 GPIO (priklausomai nuo varianto), Pico – 26. Abiejuose yra ADC, PWM, I2C, SPI, UART. ESP32 papildomai turi kapacityvinio lietimo sensorius ir Hall efekto sensorių.
Programavimo aplinka: kur prasideda tikras skirtumas
Specifikacijos – tik pusė istorijos. Kita pusė – kaip su tuo dirbsi kasdien.
ESP32 tradiciškai programuojamas naudojant ESP-IDF (Espressif IoT Development Framework) – tai C/C++ pagrindu veikianti aplinka, labai galinga, bet ir gana sudėtinga pradedantiesiems. Laimei, Arduino IDE palaikymas yra puikus – galima rašyti kodą taip pat, kaip rašytum tradiciniam Arduino, ir viskas veikia. Be to, ESP32 puikiai palaiko MicroPython ir CircuitPython.
Raspberry Pi Pico oficialiai palaikomas per MicroPython ir C/C++ SDK. MicroPython palaikymas čia yra tiesiog puikus – Raspberry Pi Foundation investavo daug pastangų į dokumentaciją ir pavyzdžius. CircuitPython taip pat veikia. Arduino IDE palaikymas atsirado vėliau ir yra mažiau brandus nei ESP32 atveju, nors jau gana stabilus.
Praktiškai kalbant: jei esi Python žmogus ir nori greitai pradėti, abu veiks gerai. Jei mėgsti Arduino ekosistemą ir jau turi daug bibliotekų bei patirties su ja – ESP32 bus natūralesnis pasirinkimas. Jei nori mokytis C/C++ ir nori geros dokumentacijos – Pico SDK yra vienas geriausių savo klasėje.
Vienas praktinis patarimas: jei naudoji VS Code (o turėtum), abu turi gerą palaikymą. ESP32 – per PlatformIO arba oficialį Espressif plėtinį. Pico – per oficialų Raspberry Pi plėtinį arba tą patį PlatformIO. Asmeniškai rekomenduočiau bent kartą išbandyti PlatformIO – tai keičia požiūrį į mikrovaldiklių programavimą.
Belaidis ryšys: čia ESP32 laimi be kovos
Jei tavo projektas reikalauja interneto ryšio, duomenų siuntimo į serverį, MQTT protokolo, HTTP užklausų ar bet ko, kas susiję su tinklu – ESP32 yra akivaizdus pasirinkimas. Wi-Fi ir Bluetooth yra integruoti į patį lustą, jie veikia iš karto, bibliotekų yra daugybė, bendruomenė milžiniška.
Su ESP32 galite per kelias eilutes kodo:
- Prisijungti prie Wi-Fi tinklo
- Siųsti duomenis į MQTT brokerį (pvz., Mosquitto ar HiveMQ)
- Sukurti paprastą web serverį tiesiai ant mikrovaldiklio
- Naudoti ESP-NOW protokolą tiesioginiam ryšiui tarp ESP32 įrenginių be maršrutizatoriaus
- Valdyti įrenginį per Bluetooth iš telefono
Raspberry Pi Pico W taip pat turi Wi-Fi ir Bluetooth, ir tai veikia neblogai. Tačiau reikia sąžiningai pasakyti – ESP32 ekosistema šioje srityje yra brandesnė. Daugiau bibliotekų, daugiau pavyzdžių, daugiau Stack Overflow atsakymų. Kai kažkas neveikia su ESP32, tikimybė rasti sprendimą internete yra labai didelė. Su Pico W – šiek tiek mažesnė, nors situacija gerėja.
Originalus Pico be W – visai be belaidžio ryšio. Tai nėra trūkumas, jei projektas jo nereikalauja, bet jei reikia – reikia pirkti atskirą modulį arba rinktis Pico W.
Vienas įdomus ESP32 privalumas – ESP-NOW protokolas. Tai Espressif sukurtas protokolas, leidžiantis ESP32 įrenginiams komunikuoti tiesiai tarpusavyje, be Wi-Fi tinklo, su labai mažu delsimu ir energijos suvartojimu. Puikiai tinka jutiklių tinklams, nuotolinio valdymo sistemoms ir panašiems projektams.
Energijos suvartojimas ir baterijų projektai
Čia situacija įdomesnė, nei daugelis tikisi.
ESP32 turi labai gerą gilaus miego (deep sleep) režimą – gali nusileisti iki maždaug 10 µA suvartojimo. Tai leidžia kurti baterijomis maitinamuosius jutiklius, kurie veikia mėnesius ar net metus. Tačiau kai Wi-Fi aktyvus – suvartojimas šoka iki 80-240 mA. Tai reikšmingas skirtumas.
Raspberry Pi Pico su RP2040 miego režimuose gali pasiekti apie 1.3 mA (dormant režimas), o su papildomomis optimizacijomis – dar mažiau. Pico W miego režimai yra sudėtingesni dėl Wi-Fi lusto, bet vis tiek valdomi.
Praktinis patarimas: jei kuriate baterijomis maitinamą jutiklį, kuris retai siunčia duomenis (pvz., kas 15 minučių), ESP32 deep sleep + Wi-Fi derinys veikia puikiai. Jei reikia nuolatinio, žemo suvartojimo veikimo be Wi-Fi – Pico gali turėti pranašumą dėl paprastesnio energijos valdymo.
Naujas RP2350 (Pico 2) čia atveria naujų galimybių – jis turi geresnį energijos valdymą ir papildomus miego režimus. Tai dar vienas argumentas rinktis naujesnę versiją, jei baterijos svarbu.
Kaina ir prieinamumas: abu laimi
Kalbant apie kainą – abu yra fenomenaliai pigūs, ir tai yra faktas, kurį sunku ignoruoti.
Raspberry Pi Pico kainuoja apie 4 USD, Pico W – apie 6 USD. ESP32 moduliai (pvz., populiarus ESP32-WROOM-32) ant plokštės (kaip ESP32 DevKit) kainuoja nuo 3 iki 8 USD, priklausomai nuo tiekėjo ir varianto. Kinijos tiekėjai (AliExpress) siūlo dar pigiau, bet kokybė gali svyruoti.
Svarbu suprasti, kad ESP32 yra modulis arba lustas, o Raspberry Pi Pico yra plokštė. Tai reiškia, kad ESP32 ekosistemoje yra daugiau variantų – galite pirkti tik lustą ir integruoti į savo PCB, arba pirkti gatavą kūrimo plokštę. Pico visada ateina kaip gatava plokštė.
Prieinamumo požiūriu abu yra gerai – juos galima rasti Mouser, Digikey, Amazon, AliExpress, o Lietuvoje – Elfa Distrelec, Robotikos.lt ir panašiose parduotuvėse. Raspberry Pi Pico kartais buvo sunkiau gauti dėl bendros Raspberry Pi produktų trūkumo problemos, bet situacija normalizavosi.
Vienas dalykas, kurį verta žinoti: ESP32 šeima yra labai plati. Yra ESP32-S3 su USB OTG ir AI pagreičio instrukcijomis, ESP32-C3 su RISC-V branduoliu ir mažesniu energijos suvartojimu, ESP32-H2 su Zigbee/Thread palaikymu. Tai reiškia, kad galite rinktis tinkamą variantą konkrečiam projektui, bet tai taip pat gali sukelti pasirinkimo paralyžių pradedantiesiems.
Bendruomenė, dokumentacija ir mokymosi kreivė
Technikos specifikacijos – tai vienas dalykas. Bet kai 11 vakaro tavo projektas neveikia ir tu desperatiškai ieškai atsakymo – tada supranti, kaip svarbi yra bendruomenė.
ESP32 turi milžinišką bendruomenę. Espressif forumas, Reddit (r/esp32), GitHub, YouTube – visur rasite daugybę resursų. Tai logiška, nes ESP32 rinkoje ilgiau ir naudojamas masiškai IoT produktuose visame pasaulyje. Oficiali Espressif dokumentacija yra gera, nors kartais gali atrodyti sudėtinga.
Raspberry Pi Pico bendruomenė yra mažesnė, bet labai kokybiška. Raspberry Pi Foundation yra žinoma dėl puikios dokumentacijos ir edukacinių resursų – jų oficialūs vadovai ir knygos (daugelis nemokamos PDF formatu) yra tiesiog puikūs. Jei esi pradedantysis, Pico dokumentacija gali būti draugiškesnė.
MicroPython bendruomenė yra bendra abiem įrenginiams, ir tai yra didelis pliusas – mokydamasis viename, įgyji žinių, perkeliamų į kitą.
Mokymosi kreivė: abu yra prieinami pradedantiesiems, bet skirtingais keliais. Pico su MicroPython ir Thonny IDE yra galbūt paprasčiausias įėjimo taškas į mikrovaldiklių pasaulį apskritai. ESP32 su Arduino IDE yra geresnis, jei jau turi Arduino patirties.
Kada rinktis ką: konkrečios situacijos
Gerai, pakalbėkime konkrečiai. Štai keletas scenarijų ir mano rekomendacijos:
Namų automatizacija su Home Assistant / MQTT: ESP32. Be diskusijų. ESPHome integracija su Home Assistant yra tiesiog magija – konfigūruoji YAML faile, ir viskas veikia. Pico čia galima, bet reikia daugiau darbo.
Robotika ir motorų valdymas: Pico (RP2040). PIO funkcija leidžia tiksliai valdyti PWM signalus ir enkoderius be pagrindinių branduolių apkrovos. Tai reikšmingas privalumas robotikoje.
Garso projektai (I2S, audio procesorius): Pico su PIO arba ESP32-S3 (kuris turi geresnį I2S palaikymą). Klasikinis ESP32 čia veikia, bet su apribojimais.
Baterijomis maitinamas IoT jutiklis: ESP32 (su deep sleep) arba ESP32-C3/S2 (mažesnis energijos suvartojimas). Jei nereikia Wi-Fi – Pico.
Mokymasis programuoti / pirmasis projektas: Pico su MicroPython ir Thonny. Paprasčiausias startas.
Bluetooth BLE projektas (pvz., ryšys su telefonu): ESP32. BLE palaikymas ir bibliotekos yra brandesnės.
USB HID įrenginys (klaviatūra, pelė, gamepad): Pico. RP2040 turi natyvų USB palaikymą, ir TinyUSB biblioteka veikia puikiai. ESP32 USB palaikymas yra tik naujesnėse versijose (S2, S3).
Didelio masto gamyba / komercinis produktas: ESP32 moduliai yra labiau paplitę komercinėje gamyboje, turi FCC/CE sertifikatus (priklausomai nuo modulio), ir Espressif siūlo geresnę komercinę paramą.
Taigi, kurį į krepšelį?
Jei tikėjaisi, kad šio straipsnio pabaigoje pasakysiu „pirkite X ir negalvokit” – atsiprašau, bet taip nebus. Ne todėl, kad bijau apsispręsti, o todėl, kad toks atsakymas būtų nesąžiningas.
Realybė tokia: abu yra puikūs mikrovaldikliai, ir jei nusipirksite abu (o jie kainuoja mažiau nei pietūs kavinėje), tikrai apgailestauti neteks. Bet jei reikia rinktis vieną – čia mano nuoširdus patarimas.
Jei tavo projektas turi bet ką bendro su internetu, belaidžiu ryšiu, namų automatizacija ar IoT – imk ESP32. Ekosistema, bibliotekos, bendruomenė ir integruotas Wi-Fi/BT daro jį nekonkuruojamu šioje srityje. Ypač jei naudosi ESPHome ar Arduino IDE – startas bus greitas ir malonus.
Jei tavo projektas yra labiau apie tikslų aparatinės įrangos valdymą, robotika, USB įrenginius, garso apdorojimą ar tiesiog nori mokytis su puikia dokumentacija ir švariu Python kodu – imk Pico. PIO yra tikrai unikali funkcija, kurios kitur nerasi tokioje kainoje, o Raspberry Pi Foundation dokumentacija yra viena geriausių hobių elektronikos pasaulyje.
Ir dar vienas dalykas, kurį noriu pasakyti: nesustok ties vienu. Patyrę kūrėjai naudoja abu – ir tai nėra neapsisprendimas. Tai supratimas, kad skirtingi įrankiai skirti skirtingiems darbams. Lygiai kaip nesinaudoji plaktuku ten, kur reikia atsuktuvo. Tik šiuo atveju abu įrankiai kainuoja po kelis eurus, tad nėra jokios priežasties apsiriboti vienu.
Pradėk. Sukurk kažką. Sulaužyk. Pataisyk. Ir tada suprasite, kuris tau labiau tinka – ne iš straipsnių, o iš patirties.
