Raspberry Pi Pico - a legkisebb családtag

Egy héttel ezelőtt megjelent a Raspberry legújabb lapkája: a Pi Pico névre keresztelt egyed. 4 dolláros mikrovezérlőként reklámozzák és valóban: szállítással együtt 11 dollárért sikerült is szert tennem egy példányra Angliából, a Pimoroni-tól.
Mert talán azt mondanom se kell, hogy amint megláttam, az vágott belém: nekem miért nincs még ilyenem? :)

pipico1.jpg

A fórumokon megjelenő kérdések alapján néhányan máris félreértések áldozatául estek ennek kapcsán, a mikrovezérlő ugyanis nem mikroszámítógép, ezért nincs rajta hagyományos értelemben vett operációs rendszer, szóval nem, nem fut rajta semmilyen Linux. Nem köthető rá monitor, billentyű, egér.. legalábbis nem úgy. :)
Ez egy programozható vezérlő. Pont. (Lásd ESP8266 vagy ESP32 mikrovezérlő) Linuxos RPI-ből a legkisebb továbbra is a Raspberry PI Zero. Ráadásul, amit sokan helyesen észrevételezték: nincs benne integrált WiFi vezérlő, így a külvilággal valamely más módon tud csak kommunikálni, mondjuk a rá integrált 2x UART, 2x SPI, 2x I2C vagy USB1.1 vezérlő valamelyikén. (ezek közül némelyik egyidejű használata kizárja egymást, mivel egy lábnak több funkciója is lehet, választanunk kell ez esetben)

Következő félreértés, hogy kisebb, mint a sokak által favorizált ESP32. Nos, annyira nem.

img_20210129_184856.jpg

3 grammos súlyával és 51.3mm x 21mm x 3.9mm méretével nem különösebben nagy, de azért nincs benne akkora hasraesés-faktor. (a Pimoroni még ki nem adott Tiny 2040 változata, no az már kicsi lesz!)

A vezérlője egy RP2040-es, amiből az utolsó három szám a paramétereire utal, magára a vezérlőre általánosan az RP2 néven utalnak. (nem RPI2, hanem RP2)

Főbb paraméterei:

  • kétmagos Cortex M0+ mag 133Mhz
  • 264 kB memória
  • 2MB QSPI flash tárhely
  • 25 GPIO (szigorúan 3.3V-os minden láb!)
  • 3 ADC csatorna (12 bites)
  • 16 PWM csatorna
  • USB 1.1 Host/Device
  • DMA vezérlő
  • 8 programozható IO (PIO)
  • 1.8-5.5V tápellátásról képes működni (Pin 39)

A PIO az, ami egyedivé teszi a lapkát, melynek segítségével a központi vezérlő kihagyásával taníthatóak fel az egyes lábak, hogy adott feltételek között milyen állapotot vegyenek fel, ezzel a vezérlő terhelése nélkül használhatóak egyedi kommunikációs formák létrehozására, példaként erre a NeoPixel címezhető LED-ek vezérlését hozzák fel. (ami természetesen más chipeken is megoldható, de az a mutatvány egyszerűbb vezérlőkön a teljesítmény nagy részét meg is eheti)

A rá integrált 2MB tárhely akár soknak is tűnhetne a belépő szintű STM32 lapkák 128-256KB flash méretéhez képest, és a középkategóriás STM32-k is inkább csak 1MB-osak. Ellenben a népszerű ESP32 chipek 4MB tárhelye, valamint hasonló, 4 dollár körüli ára, az ESP-k integrált wifije miatt egyelőre nem hinném, hogy a DIY IoT használók tömegesen fognak áttérni az RPI Picora a közeljövőben. Jó hír, hogy a további tervezett RP2 variánsok adatlapjain már 8MB flash tárhelyet látni (és 16MB-ig kezeli max), viszont a WiFi az nagyon fájó hiány lesz.. remélem, hogy valamilyen vezetékes Ethernet megoldás elérhetővé válik, például az SPI csatlakozású W5500 használatához szükséges libeket integrálják rá hamarosan, ez jótékony hatással lenne a felhasználási lehetőségeire.

A kütyü programozható C és MicroPython nyelven, engem ebből ez utóbbi érdekel különösen. Mindenki abban reménykedik, hogy a Raspberry-k legendásan jó szoftveres támogatottsága erre az új versenyzőre is igaz lesz majd, én is azt hittem.. Ugyanakkor némi aggodalomra adhat okot az - ne legyen igazam - amit két napja láttam a raspberry github oldalán.
Ahogy a dolgok állnak: az RP2 micropython integrációja még nem került be teljesen a micropython főágba, gyakorlatilag nem tölthető le hivatalos micropython kiadás, ami ismerné az RP2-t, hanem a raspberry saját oldaláról lehet azt beszerezni. Cirka fél nappal ezelőtt a micropython forráskód ugyan már átkerült, de a bináris még mindig csak a raspberrypi.org -ról szerezhető be.

Ez persze még mindig nem akkora probléma, csak idő kérdése, hogy megtörténjen. Az aggasztó inkább az, ahogyan a raspberry github-ról kipaterolták az elmúlt egy hét alatt a felhasználók által felvitt összes problémát, egy mozdulattal áttolták a micropython fejlesztőinek és közölték, hogy onnantól a főágba irkáljanak a userek.
Még ez sem jelenti azt, hogy a micropython közösség ne foglalkozna a jövőben rendszeresen az RP2 micropython kiadással, ám a főágban sorban álló több mint 800 benyújtott és várakozó issue alapján én azt mondanám, ha nem lesz valós gyártói támogatás mögötte, a fejlesztés sem halad majd rohamléptekben. No mindegy, ne legyek ennyire pesszimista, nézzük hogyan lehet használni a kütyüt.

Amennyiben a BOOTSEL gombját nyomva tartva (nincs is több gomb rajta), a rá integrált mikroUSB csatlakozó segítségével a számítógépünk USB csatlakozására kötjük, egy hordozható adattárolóként fog megjelenni. Érdekes módon 128MB-osnak állítja magát, de természetesen csak akkora fájlt másolhatunk rá, amekkora flash tárhely van valójában az eszközön. Ezen a virtuális fájlrendszeren keresztül lehet a firmware-t rátölteni.

pipico_storage.jpg

Először letöltjük a raspberry-féle micropython firmware-t innen, a "Download UF2" gombra kattintva:

https://www.raspberrypi.org/documentation/pico/getting-started/#getting-started-with-micropython

A letöltött .uf2 kiterjesztésű fájlt rámásoljuk a megjelent RPI-RP2 meghajtóra. A művelet végeztével a meghajtó eltűnik. Amennyiben még nem rendelkezünk a már ESP32-es cikkeimben említett Thonny IDE-vel, töltsük le azt, majd indítsuk el.
Aki hozzám hasonlóan egy régi verziót használ, a Run->Select interpreter alatt "MicroPython (generic)" és /dev/ttyACM0 portra (windows alatt a következő szabad soros COM port lesz) állítva kapcsolódhat a Picohoz.

pico_thonny.jpg

Aki 3.3.3 vagy újabb Thonny verziót használ, már látni fogja a "MicroPython (Raspberry Pi Pico)" opciót is, nyilván érdemesebb ezt használni.

Izgalmas lehetőség lenne az USB host emuláció, aminek segítségével pl billentyűzetnek vagy egérnek adhatná ki magát a kütyü egy PC irányába, amit sok jelenlegi - sokkal egyszerűbb - vezérlő is tud. Ám a micropython integráció kísérleti stádiumú, alig lehet tudni valamit az egyedi funkciók használatáról.

A 2MB méretű flashből alapértelmezetten 400K-t foglal a firmware maga, a maradék 1600K a felhasználó szkriptjei számára van fenntartva.

Az alap parancsok:

>>> import machine
>>> machine.freq()
125000000

Vagyis a max 133MHz-ből most éppen 125Mhz-en ketyeg az órajel, állítani nem igazán sikerült, valószínűleg automatikusan állítja. (?)

>>> import gc
>>> gc.collect()
>>> gc.mem_free()
186464

Vagyis a 264kb memóriájából 186kb áll rendelkezésre a felhasználó programja számára. Emlékeztetőül: a papíron több memóriával bíró ESP32-WROOM lapkán ez az érték kevesebb, nagyjából 108kbájt volt, ez jó pont az RP2-nek.

Van egy zöld színű LED rajta, amit a bootloadere láthatólag nem használ, a GP25 lábon keresztül lehet vezérelni. Bekapcsoláshoz 1-re kell állítani a kimenetet, kikapcsoláshoz 0-ra: (induláskor 0 az állapota)

from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)

Lábkiosztás: pico_pinout.jpg

 

A ötödik ("4-es számú") ADC csatorna a beépített hőmérőjére van kötve, így tudjuk lekérdezni:

import machine
sensor_temp=machine.ADC(4)
conversion_factor=3.3/(65535)
reading=sensor_temp.read_u16()*conversion_factor
temperature=27-(reading-0.706)/0.00172111
print(temperature)

No azért nem mondanám túl pontosnak, több mint egy fok eltérést látok egy másik hőmérőhöz és néha önmagához képest is. Automatizmust azért ne tervezzünk vele, a képlet elég érdekes, elképzelhető, hogy sosem fog 27 fok fölé menni, a Raspberry fórumon vesézgetik már egy ideje.

Benchmark

Elültették a bogarat a fülemben, hogy az M0+ 133MHz-es mag gyorsabb lesz, mint az ESP32-be integrált Tensilica chip 240MHz-es magja. Kicsit kételkedve fogadtam a dolgot, de azért kerestem egy benchmark alkalmazást és kipróbáltam. A tesztet mikrovezérlőkre találták ki, nem igazán ad arányosítható értékeket normál PC-kre, de azért poénból a gépemen és egy Zero-n is megfuttattam.

Érdeklődők kedvéért innen tölthető le a benchmark program, illetve látható itt is pár referencia-eredmény különböző mikrovezérlőkről:

https://github.com/shaoziyang/micropython_benchmarks/tree/master/1.9.4-479

MCU Freq Int Add Float Add Int Mul Float Mul Int div Float Div Pi:1000 Pi:5000
x86 PC Celeron G530 2400M 0,07 0,06 0,07 0,06 0,06 0,06 0,003 0,06
PI Zero SBC ARM1176 1000M 1,49 0,92 1,82 0,91 1,63 1,02 0,06 1,32
ESP32-WROOM LX6 240M 3,24 5,03 3,43 5,03 3,63 5,81 0,63 10,23
Pi Pico RP2040 125M 7,15 12,72 7,55 12,84 7,5 13,32 1,12 25,66

 

Nos lehet, hogy van amiben gyorsabb az M0, de a matematikai műveletekben biztos nem. (a fenti táblában a kisebb érték jobb) Az is igaz persze, hogy aki egy egyszerű relét szeretne vezérelni, nem feltétlenül egy erőgépre van szüksége, minden feladatra a megfelelő eszközt kell választani. A fogyasztása ellenben 5V 0.013A, ami teljesen korrekt. Persze egy jó STM32 fogyasztása is hasonló, ha pedig a WiFi-t lekapcsoljuk az ESP32-n, az sem fogyaszt eget rengetően többet ennél.

Ítélet?

Szép, szép.. de a kevesebb néha egyszerűen csak kevesebb. WiFi híján, szegényes dokumentációk alapján várhatóan nem fog nagy tömegeket megmozgatni. A MicroPython API is gyerekcipőben jár, így egyelőre inkább csak kísérletező kedvűeknek ajánlanám - vagy azoknak, akik szeretnének hozzájárulni a közösségi fejlesztéshez időt és energiát nem kímélve. Vannak ígéretes értékei az ESP32-höz képest, mint például a PIO és az USB host támogatás, de szinte minden más szempontból az ESP32 jobban megéri. Látok lehetőségeket a Pico-ban, de még egy pöttyet hardverileg, és nagyon sokat szoftverben kell fejlődnie.

 

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr6216408596

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

cog3981 2021.02.01. 14:53:02

Ami erdekes lehet az a dual core tamogatas micropython alatt :) Lam lam, megis csak meg lehet csinalni.

datasheets.raspberrypi.org/pico/raspberry-pi-pico-python-sdk.pdf

3.5. Multicore Support
import time, _thread, machine

def task(n, delay):
led = machine.Pin(25, machine.Pin.OUT)

for i in range(n):
led.high()
time.sleep(delay)
led.low()
time.sleep(delay)
print('done')
_thread.start_new_thread(task, (10, 0.5))

eNeS 2021.02.01. 18:14:19

Hm, bár azt írják multicore, de a többszálas futtatás nem feltétlenül különböző magokon történő futást jelent. Threading lib ESP32-n is megy. Persze az nem kizárt hogy a Pico-SDK intézi alsóbb szinten a megfelelő ütemezését a szálaknak különböző magokra, de erről nem láttam semmilyen leírást.

GyMasa 2021.02.01. 22:54:40

Jó kis cikk...
Nekem is itt hever az asztalon 3 db.

steery 2021.02.02. 00:22:15

Remek ez a cikk, csak egy apró gond van vele: hiányzik belőle a lényeg. Hogy mire használható ez a mütyürke?

eNeS 2021.02.02. 07:25:13

@steery: Ez a mindenkit érdeklőd kérdés. :) Ha meglesz a W5500 támogatás, olyasmikre is használható lesz, amire például egy ESP32.

eNeS 2021.02.02. 07:47:32

@matyas.kiraly: amint említettem, amint meglesz a W5500 integrációja sok mindenre alkalmas lesz. Például LAN-ról vezérelhető vele címezhető LED-sor, relé. Készíthető vele LAN-os hőmérő, fényérzékelő, mozgásérzékelő. De akár bögremelegítő is...

vampywiz17 2021.02.02. 09:54:05

Meg mindig Inkabb ESP...(8266 vagy 32) Hardverben (szamomra) semmi elonye, csak hatranya (wifi). Szoftverben pedig az ESP-k merfoldekkel elotte jarnak... Nem mondom, hogy nem fog ez a resz fejlodni, csak ha nem ad semmi ertelmes pluszt a tobbsegnek, nem fog vele senki foglalkozni.

GyMasa 2021.02.02. 18:05:28

@eNeS:
Matyas kiraly baratunk Brendel Matyika, a kötözködő művész. A legjobb stratégia ellene, hogy minden egyes új "új nevét" minél előbb kitiltod és törlöd a kommentjeit. Akkor egy idő után megunja, és elhúz innen.
Az előzetes moderáció nem jó megoldás, mert akadályozza a normális párbeszédet is.

cog3981 2021.02.02. 18:05:38

@matyas.kiraly:
"Tudok pythonban és C-ben programozni, de nem szoktam azért programozni, hogy programozzak, azt a munkahelyemen megtehetem jó pénzért."

A melohelyeden mindig olyan teruleten dolgozol ami teged erdekel 100%-ban?
En pl ugy valtottam mindig melohelyet, hogy ha erdekelt egy uj tema, otthon megtanultam, majd a kov munkahelyemen azt mondtam, hogy van benne tapasztalatom. Ami igaz is volt.
Az RPi-ket elsosorban tanulasra hasznaljak, masodsorban az iparban :) tesztelesre, vezerlesre, mert olcso es jo support van hozza.

Egyeb frusztralt kerdesed van? (Kell egy par generacio, amig ez a frusztracio eltunik. Bar mas hogy is lehet. En pl amiota kulfoldon elek, nem ismerem a frusztraciot :D)

@eNeS:
"Hm, bár azt írják multicore, de a többszálas futtatás nem feltétlenül különböző magokon történő futást jelent. Threading lib ESP32-n is megy. Persze az nem kizárt hogy a Pico-SDK intézi alsóbb szinten a megfelelő ütemezését a szálaknak különböző magokra, de erről nem láttam semmilyen leírást."

Hat ja, azt felteteleztem hogy aki irta a hivatalos doksit, az ert hozza. Lehet hogy tevedtem ;)

cog3981 2021.02.02. 18:05:52

Valoban, az ESP mar igen kiforrott, a WiFi nekem is hianyzik. Ha ezen javitanak, akkor viszont a konstans minoseg miatt jo alternativa lehet. Nemelyik ESP gyarto alacsony minoseget csinal es csak a kinlodas megy hogy felmenjen a firmware.

@eNeS:
"Hm, bár azt írják multicore, de a többszálas futtatás nem feltétlenül különböző magokon történő futást jelent. Threading lib ESP32-n is megy. Persze az nem kizárt hogy a Pico-SDK intézi alsóbb szinten a megfelelő ütemezését a szálaknak különböző magokra, de erről nem láttam semmilyen leírást. "

A multi.core tamogatas igen jo ficsor lenne, kerdes hogy a doksi szerzoje tisztaban volt-e azzal amit ir :)

@matyas.kiraly:
"A kérdés, hogy mi a faszomnak kellene normális embernek, vagy akár normális programozónak ilyen? "
RPi elsosorban oktatasi platform, arra kivalo. Tovabba az eladasok - kb a 40 millio eladott peldanynak - felet az iparban hasznaljak, mert a konkurenciahoz kepes olcso es jo tamogatasa van.
Van meg tovabbi frusztraciot sugallo kerdesed?

RHalacska 2021.02.02. 18:06:07

Használok Arduinot, de számomra nem derült ki, hogy ez az eszköz mire jó. Mi az olyan benne, ami nincs a többiben, és érdemes lenne ezzel foglalkozni.

GyMasa 2021.02.02. 18:06:08

@matyas.kiraly:
"@GyMasa: mivel uborka-szeletelésre és bögretartónak nem jó, mi a faszomnak jevernek az asztalodon?! "
Mi az a jeverés?

eNeS 2021.02.02. 18:12:43

@GyMasa: Sajnos igen, az előzetes moderáció megakasztja kicsit a folyamot, de bár a hozzászólások elsősorban a hozzászólót jellemzik, az anonim minősíthetetlen beszólások jelenléte a blogot is. Átállhatunk facebookos hozzászólásra is, ha az jobb. :)

eNeS 2021.02.02. 18:19:26

@vampywiz17:
Valóban nincs különösebb előnye az ESP-vel szemben, de tudnak ezek a Raspberrys srácok jobbat is szerintem.

@cog3981:
Számomra is aggasztó picit az a bizonyos hivatalos "SDK" leírás. Valószínűleg lesz pár revíziója.

@RHalacska:
Ha lehetne a sarki fűszeresnél kapni, a 4 dolláros ára tűrhető lenne egy LAN modullal megdobva is.
A Pi Pico inkább STM32 kategória, Arduinonál gyorsabb feldolgozási sebességgel, példának okáért a hőkamerás projekthez is elég az erőforrása, amit ESP-vel oldottam meg, bár ahhoz pont nem kellett wifi csak 72Mhz minimum.

GyMasa 2021.02.02. 19:57:09

@eNeS:
Nekem a 16 PWM csatorna most igencsak jól jön...
Építek egy custom PC-t Pentium 3 alapon és abba akarok RGB-t tenni :-)
Az Arduinoval az a baj, hogy bár a számítási teljesítménye elég lenne, de a nano-nak csak azt hiszem, 2 PWM kimenete van. SW-ből meg nem akarok bohóckodni.
Amelyiken meg olyan mikrovezérlő van, az nagyon drága...

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása