Prečo tento článok vznikol?
Každý, kto (bežne) začína s Arduinom, začína ho programovať napríklad pomocou základného nástroja k nemu
- Arduino
IDE. (Alebo možno graficky, pomocou blokov, ale mne ide o klasické programovanie pomocou
písania kódu.)
A je
to tak
v pohode, veď Arduino IDE má jednu mega výhodu - jednoduchosť - nie je tam veľa čo nastavovať aby to
hneď fungovalo...
Základné
programy na zoznámenie sa s Arduinom sa v tom písať dajú, aj knižnice sa tam spravujú vcelku
zrozumiteľne. A je skvelá
podpora na fórach ak dačo nefunguje... Množstvo projektov je k dispozícii práve v tom .ino súbore s
ktorým pracuje Arduino IDE.
Aj ja osobne som s ním vydržal dlho, stihol som si pomocou neho poodlaďovať základné veci ako práca s
tlačidlami,
displaymi (všetky možné), ba aj GSM modul a v podstate všetky bežne používané periférie (meteo
senzory, atď).
Ono, v
začiatkoch človek aj tak
rýchlo a veľa neprogramuje, ani dajako zložité veci. Ba ani celkovo veľa neprogramuje, skôr len kopíruje
hotové
bloky,
upravuje trochu kód... Takže celkový "výkon"
Arduino IDE mu stačí na to občasné prepísanie dačoho v kóde. Lenže, ako sa programátor postupne zlepšuje
a začne hlavne tvoriť aj vlastné programy (od nuly), tak zistí že na
zrýchlenie /
zefektívnenie písania toho kódu by sa hodili dajaké pokročilé funkcie...
VS Code + PlatformIO - výkonnejší nástroj...
Jedna z najčastejších možností "kam sa posunúť" je VS Code s rozšírením PlatformIO. Mám to potvrdené aj od profi programátorov že je to skvelo použiteľný nástroj.
Tu v tomto krátkom prehľade opíšem aspoň zopár vecí ktoré stoja zato a pomôžu aj začiatočníkom. Dačo je vec samotného VS Code, dačo má na starosti PlatformIO. Nebudú tu všetky "fičúry", samotné VS Code ich má strašne veľa. Profíci určite využívajú aj veci ktoré ja ani nepoznám ešte... Lenže už tieto, tu spomenuté, stoja za zváženie. Mnohé sú aj také že si ich človek ani neuvedomí už a len ich využíva.
Prečo prejsť na PlatformIO, čo (mi) to prináša:
- podpora dosiek je v pohode - odkaz. Zvláda to všetky bežné Arduino moduly, ESP 8266, ESP 32, ba aj Digispark ATtiny 85 čo mám doma (potrebuje doinštalovať ovládače!)... A napríklad pre ESP-01 alebo ESP-01S komunikácia a hlavne nahrávanie kódu prebieha lepšie ako pomocou Arduino IDE. Pre začiatočníka je tá podpora určite dostatočná.
- podpora knižníc a práca s nimi je v pohode, ale môže sa výnimočne stať aj to, že to bude
musieť byť iná ako tá čo bola pre
daný projekt
použitá v Arduino IDE... Trochu zmätok pre amatéra začiatočníka. Ale Google pomôže... Tu je jedna
výhoda - ak je
aktualizácia knižnice a nepracuje správne s dajakou konkrétnou perifériou, tak tu každý projekt môže
mať svoju
verziu knižnice! Tak sa to bežne robí. Ale ak to dakomu vyhovuje, tak aj PlatformIO podporuje
centrálne inštalovanie knižníc (ja som to ešte ani neskúšal).
Jeden príklad z mojej praxe kedy je doslova nutná individuálna knižnica pre daný projekt - TFT LCD displaye s SPI rozhraním. Mám odskúšané všetky možné, od 128x160px (ST7735), po 320x480px!(ILI9488) a samozrejme klasika s ILI9341. Na všetky teraz používam (pre ESP moduly) knižnicu https://github.com/Bodmer/TFT_eSPI - výborne funkčná, rýchla, viaceré druhy písma. A čo sa týka príkazov funguje cca ako originál od Adafruit (na ktorú som naučený). Ale knižnica musí byť individuálne nastavená na konkrétny display pri použití, robí sa to v súbore "User_Setup.h", lebo inak je tam nastavený display s ILI9341... Takže tu sa tá individualita naozaj hodí. - nápoveda - písať kód "ručne ", bez poriadnej nápovedy, to je makačka ak sa na dačom seriózne
pracuje... A
hlavne - zdroj chýb! Tu máte
výbornú nápovedu
príkazov (nie iba základných, ale aj tých k danej knižnice s ktorou v projekte pracujete,
prípadne to napíše celý systém príkazu - aj s parametrami a zátvorkami),
použitých
premenných, ba aj funkcií či podprogramov. Aj zátvorky a
úvodzovky sú automaticky hneď aj zatvorené, a stačí teda písať len vnútorný obsah. (len
nechápem
prečo
to automaticky
nepíše ";" na konci riadku... 🙂)
Tu POZOR na jednu vec - možno na niektoré tu spomenuté veci (uzatváranie zátvoriek?) bude treba doinštalovať dajaké rozšírenie! Ale všetko sa dá nájsť na nete ako si zvýšiť komfort práce s VS Code. Konkrétne tie zátvorky má na starosti auto-close-tag. - prehľad obsahu / blokov v zátvorkách - vymoženosť VS Code - rovnako farebne označené páry
zátvoriek, vidíte tak aký obsah patrí do ktorého
bloku zátvoriek, ktorou zátvorkou konkrétna oblasť začína a ktorou končí (dakedy to bol doplnok,
dnes je to možné nastaviť ako vlastnosť VS Code):
Ba dokonca aj sa označí oblasť ktorá zodpovedá daným dvom zátvorkám (fialová zvislá čiara na obrázku) ak sa klikne na na danú zátvorku. Neskutočná pomôcka pre začiatočníkov ktorí sa často v zátvorkách stratia... A hneď ako dajaká nemá pár, alebo je navyše, tak je na červeno. To sa tu pravda ale tak ľahko nestane (automaticky sa píšu v páre ako som spomenul), jedine že si ju omylom dakto zmaže.
- farebné odlíšenia obsahu, údajov - celkovo to tu farebne "žije" - textové reťazce, príkazy,
premenné majú svoju charakteristickú farbu
(ako vidno už na predchádzajúcom obrázku).
A aby to bolo dokonalé - aj komentáre môžu byť farebne doladené -
vďaka
doplnku "Better Comments"
, veľmi
prehľadné to je... A aj dobrá pomôcka pre komentovanie stavu kódu. Hlavne tá "TODO" voľba je fajn,
aspoň vidno čo treba kde doladiť. Môžete si nakódovať aj vlastné farebné štandardy pre toto.
Možno sa to zdá až príliš "omaľovávankové" už, ale myslím že tie farby sú vhodne zladené a naozaj to pomáha v prehľadnosti kódu... Možno to pre dakoho konkrétneho nevyzneje najkrajšie tak ako je to tu na obrázkoch, ale to ide nastaviť, VS Code má množstvo farebných tém či schém (niektoré nastavenia idú stiahnuť / okopírovať ako kus kódu a ľahko importovať či dopísať do potrebného zväčša .json súboru)...
- formátovanie kódu / zalamovanie textu - aj tieto veci sú tu vyriešené k plnej spokojnosti - niektoré formátovania sú už v základe, ale idú dajaké aj doinštalovať pre konkrétne jazyky. Kód je tak výborne prehľadný a uhladený. Zalamovanie textu je fajn keď je otvorených viac projektov a majú teda menšiu šírku na monitore. Nevytvára sa posuvník ale všetok text je zúžený a stále celý zobrazený. Pri písaní kódu pre mikrokontroléry je tento dokonca už automaticky formátovaný...
- kontrola základnej syntaxe kódu už počas písania - instantná a kvalitná... Už len že
nenapíšete stredník na koniec
riadku tak tam pri tom
riadku svieti "kontrolka" a hneď v spodnej stavovej časti programu je oznam... Ani kompilácia
netreba aby som zistil túto častú a
primitívnu chybu.
(akurát to označí
chybu o riadok nižšie... tak ako aj Arduino IDE až po kompilácii🙂) V podstate to ani
nedovoľuje napísať (použiť) premennú ktorá nebola
definovaná. Zasa aj bez
kompilácie vidím že som sa tu dakde pomýlil, je to okamžite označené. Podobne sa okamžite objaví
upozornenie že je volaná funkcia ktorá nie je (ešte) definovaná. Tu trochu pozor na to kde sa
funkcie
(podprogramy) daefinujú, lebo v Arduino IDE to mohlo byť aj na konci, za hlavným loop(), ale tu sa
musia definovať na začiatku kódu, ešte predtým ako sú volané! Asi kľudne aj pred setup(). Ale zasa
pozor na premenné tam použité - tie musia byť definované tiež pred tým. Takže ideálna postupnosť v
kóde - definície knižníc, premenných, potom volané funkcie / podprogramy, potom setup a potom loop.
A takto je to ideálne...:
A toto pravda funguje parádne aj pri práci s knižnicami na projekte, takže sa nepomýlim v zápise príkazov, naozaj to brutálne šetrí čas, lebo to ihneď môžem riešiť a nečakať až kým mi po kompilácii IDE oznámi kopu chýb...
- kontrola kódu pri (po) kompilácii - toto má samozrejme aj Arduino IDE, ale tu je to ešte o
level
inde.
Príklad -
napísal som kód, nechal pokusne skompilovať, no a tam vyskočilo upozornenie že tak ako som to
napísal je
to nefunkčné.
Dal som podmienku if (a=b) a bol som upozornený že je to priradenie, nie kontrola...
(správne
je if (a==b)).
Áno, aj takéto veci odkontroluje PlatformIO a ušetrí tak kopu starostí s tým "prečo program nefunguje"... - hromadné zmeny v kóde ľahko a rýchlo - je treba zmeniť / premenovať dajakú viac krát použitú premennú (alebo text, reťazec, pole, názov funkcie) v kóde? Žiadny problém vo VS Code - označiť na jednom mieste, ono sa to vysvieti na všetkých výskytoch automaticky a stačí použiť funkciu ktorá ten obsah zmení všade naraz... Pravé tlačidlo myši, "Change All Occourrences" a napíšeme nový obsah. Super na radikálnejšiu úpravu kódu...
- verziovanie projektu
- toto na začiatkoch asi netreba, ale neskôr sa to hodí... Git pracuje vo VS Code parádne. A ak chcete projekt jednoducho zdielať tak aj GitHub ide výborne. Len to treba všetko nainštalovať a nastaviť... (odkazy ako na to sú ďalej spomenuté!) Potom to funguje aj bez hlbšej znalosti príkazov, len pomocou klikania na potrebné funkcie v menu.
- práca s HTML, CSS a JavaScript-om - ak sa človek dostane ďalej a zaujíma sa aj o ESP moduly,
tak
skôr
či neskôr sa
dostane do sféry mini web serverov a podobne a bude používať aj dajaký JavaScript + na zobrazenie
obsahu
HTML a CSS. A s
tým sa vo VS Code robí parádne - je v podstate na toto ideálny nástroj (adekvátne doplnky sa hodia
doinštalovať...). Celý ten kód web
servera si z projektu
nakopírujem do nového súboru, v novom okne a pomocou "Live Server" rovno vidím čo dostanem potom na
monitore, či na
display-i (web stránku). To by som teda v Arduino IDE absolútne nezvládal... A pekne si môžem
doladiť základný
dizajn a podobne.
Samozrejme aj tu funguje skvelo nápoveda pri písaní kódu a kopu veci to predpíše automaticky (for slučky, funkcie). Napíšem jedno slovo a vyskočia k tomu potrebné parametre a hlavne zátvorky, aby sa v nich človek nestratil...
Čo konkrétne mám na mysli vidíte napríklad na tomto odkaze: https://randomnerdtutorials.com/ - plno malých projektov s ESP ako (web) serverom a podobne. Konkrétny príklad na "Mini server s DHT senzorom" a jeho HTML kód vytiahnutý a už upravený pre moje potreby: ESP-01+DHT. S tým sa pracuje jednoducho a komfortne... Aj Developer Tools prehliadača máme k dispozícii. Samozrejme sa takto fajn odladí aj JavaScript, ktorý pri niekorých projektoch môže byť už slušný "kus kódu" a chyba sa ľahko stane. Takže skontrolujeme pomocou konzoly a console.log(); čo sa kedy deje. Hlavne aj hneď vidíme či nemáme hlášku o dajakej hrubej chybe v kóde (vidno v podstate hneď po spustení Developer Tools prehliadača). - doplnky a rozšírenia
- VS Code podporuje aj takéto vymoženosti, no a práve tie robia celkový výkon a komfort pri práci... Nájdete ich na Marketplace pre Visual Studio, ale oni sa dajú vyhľadávať a inštalovať (a aj celkovo spravovať) aj priamo vo VS Code. Ako ich čo najvhodnejšie využiť je na samostatný článok, toľko toho je. Ono aj PlatformIO je vlastne rozšírenie vo VS Code, akurát je tam tak hlbšie integrované. Nie iba dajaká funkcia, ale skôr ako väčší doplnok - má aj svoju ikonu v hlavnom menu.
- formát projektov - Arduino IDE má (pri bežnom používaní začiatočníkmi) v adresári projektu iba jeden súbor s koncovkou .ino. Súbory v PlatformIO sú ukladané úplne inak... Hlavný súbor s kódom je tiež v podstate jeden súbor, s koncovkou .cpp (v adresári "src"), ale on je v celom balíku pre daný projekt - a presne takto sú k dispozícii väčšinou všetky "profi" projekty ktoré nájdeme na GitHub-e - celý balík aj s knižnicami... Má to výhody - celý ten projekt sa dá stiahnuť (z GitHub-u) pomocou jedného odkazu do svojho VS Code a ďalej s ním pracovať (aj s tými knižnicami a ich verziami s ktorými zaručene funguje - môžu byť kľudne aj individuálne upravené pre daný projekt!). Vo videách ďalej je to ukázané. Takže oplatí sa poznať tento formát projektov a vedieť s ním pracovať...
Ako na to, ako to celé nainštalovať a nastaviť?
Tu sa prejaví trochu to, že keď chcem kvalitu a funkcie, tak to už nebude jednoduché ako Arduino IDE...
Treba nainštalovať, ponastavovať a zoznámiť sa s VS Code (a vhodnými doplnkami), a potom aj s tým samotným rozšírením PlatformIO. Pre úplného amatéra / začiatočníka je to dosť práce... Ja osobne som mal výhodu že VS Code som už mal naladené, pracoval som s ním už dlhšiu dobu pri tvorbe webového obsahu (aj tento článok v ňom vznikol). Takže som len spojazdnil ono rozšírenie a razom som si užíval ten výkon. Samozrejme nejaký deň som pri tom trávil aby som to naladil, pozisťoval ako po novom pracovať s knižnicami (a s ktorými). Ale mal som k tomu skvelé návody, o tie sa tu podelím tiež...
- Video kde je zobrazené a vysvetlené (v krátkosti) asi všetko podstatné ako vlastne začať pracovať s PlatformIO... Arduino / VS Code - FabLabUnivesity. Keď to bude málo, tak treba ešte popozerať internet pre konkrétny problém, prípadne sa poradiť s niekým či v dajakej skupine. Ale podľa mňa je to skvelý návod. Sú tam spomenuté aj možné chybové hlášky, nastavenie seriál monitoru, import projektu z Arduino IDE, či vytvorenie komplet nového projektu, aj knižnice a práca s nimi. Čo tam chýba je viac informácií o samotnom nastavení VS Code - ale na to sú návody nižšie.
- Ako vlastne rozbehať samotné VS Code, tak na to je napríklad návod (celý malý seriál) od David Šetek, vysvetlené naozaj pre laikov: VS Code - David Šetek, alebo necháme YouTube dajaké návody vyhľadať...
- Ako pracovať s Git a GitHub, tak na to sú návody napríklad od
- David Šetek - obsiahly a vhodný aj pre začiatočníkov, alebo
- Michal Hucko - tiež väčší seriál - vysvetlené aj na vyššej úrovni, alebo
- Yablko - všetko v jednom, dlhšom videu...
Dačo na záver
Zdá sa to vcelku zložitá vec? Aj trochu je, ale ten výkon potom... Ja sám som dlhšie otáľaľ, aby som na
to
prešiel. Potom som sa asi deň len zoznamoval s PlatformIO a odlišnosťami hlavne pri práci s projektami
(ako bolo už spomenuté - kód je uložený v zložke projektu s názvom "src"), ale aj s prácou s
knižnicami.
Aj dosky (Arduino, ESP)
treba správne vedieť identifikovať a vybrať pre daný projekt. No ale po týždni hrania sa som si
jednoznačne povedal onú známu vetu
- "Čo som to neurobil už dávnejšie...". Ako si človek zvykne na to a naučí sa s tým robiť, tak sú
tam už len samé pozitíva. Smelo do toho...
(Na druhej strane do nedoporučujem na úplné začiatky, ak ani s jedným programom nie sú dajaké skúsenosti. Na to "hranie" v začiatkoch Arduino IDE stačí.)
A ako to vyzerá potom v praxi - na obrazovke, s (dobre) nastaveným VS Code, vidno na poslednom obrázku. Otvorených je viac projektov (aj pre ESP, aj dajaké html - vrátane tohoto článku), a medzi nimi sa ľahko prepína. Zobrazujú sa dva momentálne, ale ide to nastaviť aj na viac. To by som ale potreboval dajaký 4k monitor... (teraz je iba full HD). Samozrejme je možné otvoriť si VS Code aj viacnásobne, a teda aj na viacerých monitoroch, len potom pozor aké adresáre kde budú nastavené!!! (osobne som to nepoužil ešte) Vľavo je k dispozícii adresár s projektami, vľavo hore "rýchle ikony" pre prácu s adresárom, Git-om, doplnkami a PlatformIO. Nižšie je stavová oblasť kde je teraz prázdno (tak to má byť... žiadne problémy...), ale inak sú tam aj výstupy o kompilácii, serial monitor, hlášky o chybách v kóde a tak. Úplne dolu je ešte lišta kde je tiež množstvo informácií, ale hlavne - aj "ovládacie" tlačidlá, na upload či kompiláciu kódu, seriál monitor... Ale to postupne objaví každý. (je tam vidno napríklad aj ktorý projekt PlatformIO má aktuálny - pracovalo s ním a kompilovalo ho - dôležitá vec ak sa pracuje s viacerými naraz... treba si ich prepínať!)
