Avtor: dr. Simon Vavpotič
e-mail: simon.vavpotic@gmail.com,
Zakaj se splača programirati Arduino projekte z Raspberry Pi 5? Kako namestimo zadnjo različico Arduina 2.3.3 in katera deluje v Raspberry Pi OS? Je programiranje z uporabo pogona SSD red hitrejše kot na klasičnem PC?
O tem, da je mogoče Arduino projekte programirati ne samo s PC, ampak tudi z Raspberry Pi 5 ste lahko prebrali že v februarski številki Sveta elektronike (SE326). A danes je že tako veliko novega, da preprosto moramo nadaljevati to zanimivo zgodbo.
V SE326 najdete natančen opis priključitve Arduino vezij neposredno na 40-polno razširitveno vtičnico, zato tokrat povejmo le, da imajo vsi Raspberry Piji vgrajene 3,3-voltne zaporedne vmesnike, zato ne potrebujemo USB vmesnikov; lahko pa jih vseeno uporabimo, če tako želimo, saj ima Raspberry Pi 5 kar 4 USB priključke.
Ta vsebina je samo za naročnike
Hitrejše prevajanje programske kode kot z marsikaterim klasičnim PC
Raspberry Pi 5 je prvi Raspberry Pi, ki ima na svoji tiskanini FFC konektor za priklop razširitvenih modulov (klobukov), predvsem tistih z M.2 konektorji, ki omogočajo priklop NVMe SSD pogonov. Med poletnimi počitnicami sem se tako lotil nadgradnje računalnika, ki večini uporabnikov ne vzame več kot nekaj minut, in dodal Fikwat SSD pogon.
Meritve pokažejo, da je pri branju podatkov okoli desetkrat hitrejši (985 MB/s pri branju in pisanju ob uporabi Gen 3 standarda) od najboljše SD kartice po standardu SDR104 (max. 100 MB pri branju in okoli 30 MB/s pri pisanju – oznaka V30), kar je obenem odločilno za hitro prevajanje programske kode z Arduino IDE. Počasnež se v hipu spremeni v dirkalnik!
Klasični PC, ki ima vgrajene še staromodne diske in SSD s SATA vodilom (s 3 Gb/s in 6 Gb/s), v praksi ne preseže hitrosti 200 MB/s pri branju ali pisanju podatkov z SSD. Ker Aduino IDE pri prevajanju programske malo kompleksnejša programske kode iz podatkovnega pogona prebere veliko programskih datotek in več 10 programskih knjižnic ter hkrati ustvari veliko vmesnih datotek, je seveda še kako pomembno, kako hiter je podatkovni pogon. V praksi je lahko pohitritev z SSD v primerjavi z najhitrejšimi SD karticami tudi desetkratna.
Pa bo kdo pripomnil, naj na PC ustvarim podatkovni RAM pogon, a to ni tako enostavno, saj Arduino IDE podporo za različne razvojne ploščice in arhitekture (npr. ESP32) namesti znotraj uporabniškega podimenika, pri čemer njihova skupna velikost lahko doseže tudi več kot 10 GB. Zato je vsekakor veliko enostavneje uporabiti sodoben SSD prek PCIe vodila.
Namestitev Arduino IDE 2.x v Raspberry Pi 5
Čeprav bi glede na instantno programsko podporo za Debian Linuix na spletu, s katero Arduino IDE 1.x preprosto namestimo iz ukazne konzole z ukazom sudo apt-get install arduino –y, pomislili da se je razvoj tega razvojnega okolja za računalnike z arhitekturo ARM64 z Linuxom ustavil pri različici 1.8.19, je namestitev veliko sodobnejše različice 2.2.0 za povprečnega uporabnika še vedno sorazmerno prosta, če ve kje v internetu najti namestitev.
Po drugi strani, večina uporabnikov Raspberry Pi 5 ve, da lahko nanj namesti tudi zadnjo različico Windows 11 24H2, ki je menjena računalnikom z arhitekturo ARM64. Namestitev Arduino IDE 2.x v slednjo je še preprostejša, saj namestitveni paket za Windows 11 univerzalen in deluje tako na arhitekturi x64, kot na ARM64, kar je naravnost fantastično!
Ko sem se lotil nameščanja, je bila zadnja različica Arduino IDE 2.3.3. V Windows 11 24H2 na Raspberry Pi 5 dobro deluje, a nujno potrebujmo SSD pogon, saj je sicer prevajanje programske kode neznansko počasno.
Po drugi strani, je različica 2.2.0 za 64-bitni Raspberry Pi OS Bookworm bolj praktična, saj ima UEFI BIOS 0.3 za Raspberry Pi 5, ki ga potrebujemo za namestitev Windows 11, še številne pomanjkljivosti in omejitve. Denimo, ne podpira v Raspberry Pi 5 vgrajenih Ethernetnega in Wi-Fi/Bluetooth vmesnika.
Čeprav uradne različice Arduino IDE 2.x na spletni strani Arduino.cc ne moremo najti, jo lahko prenesemo iz GitHuba: github.com\koendv\arduino-ide-raspberrypi, kjer jo je na osnovi vsakomur dostopne izvorne kode pripravil nadobudni razvijalec.
Naslednji korak je namestitev podpore za izbrano razvojno ploščo in prenos dodatnih programskih knjižnic, za kar mora biti Raspberry Pi 5 povezan v internet. Če programiramo module, ki niso originalno podprti v Arduino okolju (npr. ESP32), moramo v nastavitvah dodati pot (npr. https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json, https://github.com/chipKIT32/chipKIT-core/raw/master/package_chipkit_index.json za ESP32 module). S tem Arduino IDE 2.x povemo, naj v izbor Arduino razvojnih plošč doda še plošče drugih proizvajalcev.
In katere so prednosti Arduino IDE 2.x pred 1.x? Arduino IDE 2.x nima samo privlačnejšega in bolj intuitivnega grafičnega vmesnika, ampak omogoča namestitev podpore in programskih knjižnic za novejše razvojne ploščice, kot je ESP32S3 z ARM32 jedrom. Zato ga nujno potrebujemo!
Se Arduino moduli lahko napajajo iz Raspberry Pi 5?
Zanimivo vprašanje za tiste, ki bi se radi čimprej lotili domačih Arduino projektov, je kako napajati manjše projekte, ki nimajo lastnega napajalnika, a porabijo več kot zmore vtičnica USB. Tu je Raspberry Pi 5 spet v prednosti pred klasičnim PC, še posebej prenosnimi računalniki.
Arduino razvojna plošča se lahko napaja kar iz njegove 40-polne razširitvene vtičnice, a le pod pogojem, da s tem ne presežemo dopustne obremenitve njegovega napajalnika in DA9091 Power Manager čipa, ki napaja 3,3-voltni priključek. V praksi to pomeni okoli 0,66 A toka pri 5 V ali 1 A toka pri 3,3 V. Pri tem upoštevamo, da se Raspberry Pi 5 napaja iz originalnega 5-amperskega napajalnika, iz Raspberry Pi 5 pa se nato napajata USB tipkovnica in USB miška.
Prenos programske kode v Arduino razvojno vezje
Vsekakor potrebujemo ustrezen zaporedni vmesnik, pri čemer lahko v Raspberry Pi OS uporabimo v Raspberry Pi 5 vgrajen zaporedni vmesnik, ki je na voljo prek 40-polnega razširitvenega priključka (glej sliko). Če programiramo v Windows 11, tudi pri Raspberry Pi 5 zaenkrat nujno potrebujemo USB zaporedni vmesnik, saj UEFI BIOS v0.3 zaenkrat 40-polne razširitvenega priključka še ne podpira.
Projekt: Programiranje krmilnika za LED luči
Poglejmo kako z Raspberry Pi 5 sprogramiramo krmilnik za luči, o katerem ste lahko obširneje brali v SE333 in SE315, pri čemer sem pri SE315 namesto ESP32 modula uporabil Microchipov 8-bitni mikrokontroler, ki pa nima možnosti Wi-Fi/Bluetooth komunikacije. Podrobnejši opis vezja in njegove izgradnje najdete tudi na spletni strani: https://sites.google.com/site/pcusbprojects/5-custom-projects/ll-led-lighting-controller, na kateri je tudi povezava do celotne izvorne kode, ki jo lahko s spletnim brskalnikom (Chromium, FireFox, … ) prenesete v Adruino IDE 2.x razvojno okolje v Raspberry Pi 5.
Kako sprogramiramo vezje iz SE333 neposredno prek Raspberry Pi 5?
Vse je zelo podobno kot v Windows, kljub temu pa je v Raspberry Pi OS pomembna razlika. Linux ima drugačen način označevanja perifernih naprav. Tako so zaporedna vrata označena, ki dostopna prek 40-polnega razširitvenega priključka označena z /dev/ttyAMA0. Če imate na voljo ustrezne kabel (tisti za razhroščevanje), lahko uporabite tudi vrata /dev/ttyAMA10, ki so neposredno povezana s sistemom v enem čipu BCM2712.
Naslednji korak je izbira hitrosti prenosa podatkov, za katero želimo, da bi bila čim višja. V praksi lahko izberemo hitrost 921.600 baudov, kar je nekajkrat več do običajnih 115200, a kljub temu deluje neposredna povezava Raspberry Pi 5 z Arduino razvojno ploščo prek 40-polne razširitvene vtičnice povsem brezhibno. Enako hitro je tudi, če kot vmesnik uporabimo kar PIC32 mikrokontroler (načrt programatorja najdete na spletni strani https://pcusbprojects.com)…
Po pritisku na puščico naprej programiranje steče prav tako, kot bi na klasičnem PC! Predpogoj je le, da je Arduino razvojna plošča v načinu za programiranje, ali pa se preklop izvede samodejno…
Zakaj Arduino 2.x nima uradne podpore za Linux na ARM64?
Za Arduino IDE 1.x razvojno okolje je še danes na voljo podpora za Linux za arhitekturo ARM64, saj smo ga lahko, na primer v Debian Linux, namestil s preprostim že omenjenim ukazom iz ukaznega okna. Z dolgo pričakovanim Arduino IDE 2.x je žal ostala le še polna podpora za računalnike z arhitekturo x64 (Windows, Linux, Mac OS), medtem ko je podpora za računalnike z arhitekturo ARM64 omejena na Mac OS in Windows 10 in 11. Vse kaže, da so avtorji Arduino IDE prepričani, da bo Windows 11 prevladal tudi na Raspberry Pijih, v kar pa vsaj dokler ne dobimo Raspberry Pi 6, dvomim.
Zaenkrat različica Arduino IDE 2.2.0 na Raspberry Pi OS Bookworm dobro deluje in lahko naloži tudi podpro za novejše razvojne ploščice, kakor tudi dodatne programske knjižnice zanje. Zato ni tako pomembno, če zaenkrat še ne moremo naložiti zadnje verzije Arduino IDE 2.x. Slednjo lahko zelo enostavno namestimo le, če na Raspberry Pi 5 prej namestimo Windows 10 ali 11. Podrobnosti si lahko ogledate v videu na youtube kanalu: youtube.com/@pcusbprojects…
Za konec še to!
Če se boste odločili na Raspberry Pi 5 namestiti Windows 11 24H2, torej povsem zadnjo različico tega operacijskega sistema, toplo priporočam razširitveno kartico 52Pi U5000 (stane okoli 40 USD, kar je približno toliko kot 2 obeska iz USB3.0 na Ethernet, vendar s kartico U5000 dobimo še vtičnico M.2), s katero boste računalnik z lahkoto povezali v internet prek ožičenega Ethernetnega omrežja. Kartica ima tudi priključek PCIe M.2, ki omogoča vgradnjo NVMe SSD. Tako lahko na Raspberry Pi 5 poganjate Arduino IDE 2.3.3 v zadnji različici Windows 11 24H2 s polno hitrostjo!
Sicer pa omrežni del kartice (Realtekova krmilnika USB3.0-2,5 Gb/s Ethenet) neuradno deluje tudi na klasičnem PC in drugih Raspberry Pijih, če imamo naložene ustrezne gonilnike, oziroma dovolj novo različico operacijskega sistema Linux, Windows ali MacOS na arhitekturah x32, x64 ali ARM64. Le ustrezen kabel potrebujemo, kar sem tudi sam preizkusil. Ni pa nobenega jamstva, da se ne bi mogle pojaviti kakršnekoli težave, saj je proizvajalec zagotavlja pravilno delovanje kartice U5000 le z Raspberry Pi 5. Po drugi strani, lahko pogon NVMe SSD priklopimo le na Raspberry Pi 5, ki ima zaenkrat edini vgrajen konektor FFC…