Arduino i Visual Studio Code: veći projekti s PlatformIO-om
Kako programirati Arduino u Visual Studio Codeu s PlatformIO-om: instalacija, projekt i platformio.ini, main.cpp, biblioteke i program u više datoteka.

Što su Visual Studio Code i PlatformIO?
Visual Studio Code, kraće VS Code, besplatan je uređivač programa tvrtke Microsoft. PlatformIO je dodatak (extension) za VS Code koji od njega napravi razvojno okruženje za mikrokontrolere: prevodi program, učitava ga na pločicu, ima serijski monitor i brine o pločicama i bibliotekama.
Ova stranica je za Arduino radionicu i nastavlja se na stranicu Arduino IDE, pa pretpostavlja da već znaš učitati program na pločicu i koristiti serijski monitor. VS Code s PlatformIO-om koristimo kad program naraste i na njemu radi više ljudi, kao na radionicama o fliperu.
Arduino IDE ili VS Code?
| Arduino IDE | VS Code s PlatformIO-om | |
|---|---|---|
| Za početak | najjednostavniji | treba više postavljanja |
| Program | jedna datoteka .ino, ostale kao kartice | mnogo datoteka .cpp i .h u mapama |
| Pomoć pri pisanju | osnovna | dovršava riječi, podcrta greške dok pišeš, skače na definiciju |
| Biblioteke | instalirane za cijelo računalo | zapisane u projektu, s verzijom, pa svi u timu imaju iste |
| Pločice | Arduino i mnoge druge | Arduino, ESP32 i stotine drugih |
| Serial Plotter | ima | nema ugrađen |
| Računalo | radi i na sporijima | traži više memorije i prostora |
Arduino IDE i VS Code nisu suparnici: za brzo isprobavanje i dalje je zgodniji Arduino IDE, a za veći projekt VS Code.
Instalacija
- Preuzmi VS Code sa službene stranice, code.visualstudio.com. Za Windows postoji i inačica koja ne treba administratorska prava (User Installer).
- U VS Codeu otvori Extensions (ikona s četiri kvadratića na traci lijevo, Ctrl+Shift+X), potraži PlatformIO IDE i klikni Install.
- Pričekaj: PlatformIO sam instalira svoju jezgru (PlatformIO Core). To traje nekoliko minuta i treba internet. Kad završi, zatraži da ponovno pokreneš VS Code.
- Kad prvi put prevodiš projekt za Uno, PlatformIO preuzme još prevoditelj i podršku za pločicu. I to traje nekoliko minuta.
Upravljački program za USB čip na pločici isti je kao za Arduino IDE, pa pogledaj Spajanje pločice ako se port ne pojavi.
Pazi na hrvatska slova u putanji. PlatformIO ne podržava putanje sa slovima kao što su č, ć, đ, š i ž. Projekte zato spremaj u mapu bez njih, na primjer C:\projekti\fliper, a ne u C:\Users\Ivančić\Documents.
Za voditelja: pripremi računala prije radionice
- Na svako računalo instaliraj VS Code i PlatformIO i jednom prevedi probni projekt za Uno, da se sve potrebno preuzme. Na školskoj mreži to može trajati dugo ili ne uspjeti.
- VS Code i PlatformIO šalju podatke o korištenju (telemetriju). U VS Codeu je isključiš u postavkama (Ctrl+,): potraži
telemetryi postavitelemetry.telemetryLevelnaoff. U PlatformIO-u u terminalu upišipio settings set enable_telemetry No. - VS Code nudi prijavu računom tvrtke Microsoft ili GitHub, na primjer za AI asistenta Copilot. Na računalima za radionicu ne prijavljuj se i ne traži od polaznika da se prijave.
- Napravi mapu za projekte bez hrvatskih slova u putanji.
Novi projekt
- Klikni ikonu PlatformIO na traci lijevo (glava s dvije antene), pa PIO Home → Open. Isto otvara i kućica na statusnoj traci dolje.Na početnoj stranici, pod Quick Access, su tipke za novi projekt, za uvoz programa iz Arduino IDE-a i za otvaranje projekta. Lijevo su Projects (tvoji projekti), Libraries (biblioteke), Boards (pločice) i Devices, popis spojenih pločica s njihovim portovima.

- Klikni New Project. Upiši ime, bez razmaka i hrvatskih slova, u polju Board potraži Arduino Uno, kao Framework ostavi Arduino, odaberi mapu i klikni Finish.
- PlatformIO napravi mapu projekta:

platformio.ini: postavke projekta, na primjer pločica, brzina serijskog monitora i biblioteke.src/main.cpp: program, s funkcijamasetup()iloop().include: datoteke.hkoje koristi više dijelova programa.lib: vlastite biblioteke projekta.test: za automatske testove. Na radionici ga ne koristimo..pio: ono što PlatformIO napravi pri prevođenju. Ne mijenjaj je i ne šalji je drugima. Ako je izbrišeš, PlatformIO je napravi ponovno.
Datoteka platformio.ini
Novi projekt za Uno ima ovakve postavke. Redak monitor_speed dodaj sam:
[env:uno]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 9600
[env:uno]je okruženje (environment) s imenomuno: skup postavki za jednu pločicu.platform = atmelavrje obitelj mikrokontrolera, AVR, kojoj pripada ATmega328P na Unu.board = unoje pločica.framework = arduinoznači da programiramo Arduino naredbama, kao u Arduino IDE-u.monitor_speed = 9600je brzina serijskog monitora. Mora biti ista kao uSerial.begin().
Kasnije ovdje dodajemo biblioteke (lib_deps) i port (upload_port). Redak koji počinje s ; je komentar.
main.cpp umjesto .ino
U PlatformIO-u program je obična datoteka C++. Arduino IDE datoteci .ino prije prevođenja sam doda dvije stvari, a ovdje ih pišemo sami:
#include <Arduino.h>na vrhu. Bez njega prevoditelj ne poznajepinMode(),digitalWrite()i ostale Arduino naredbe.- Deklaraciju funkcije koju koristiš prije nego što je napisana: prvi redak funkcije, sa
;na kraju.
#include <Arduino.h>
void trepni(unsigned int trajanje); // deklaracija: funkcija je napisana niže
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
trepni(500);
}
void trepni(unsigned int trajanje) {
digitalWrite(LED_BUILTIN, HIGH);
delay(trajanje);
digitalWrite(LED_BUILTIN, LOW);
delay(trajanje);
}
Bez deklaracije prevoditelj javi error: 'trepni' was not declared in this scope, jer funkciju vidi tek ispod loop(). Uz grešku predloži i suggested alternative: ‘strspn’, funkciju koja s našim programom nema veze: prijedlozi prevoditelja nisu uvijek točni. Umjesto deklaracije funkciju možeš i napisati iznad mjesta na kojem je koristiš.
Prevođenje, učitavanje i serijski monitor

- Explorer (Ctrl+Shift+E): mape i datoteke projekta.
- Extensions: dodaci za VS Code. Ovdje instaliraš PlatformIO.
- PlatformIO: PIO Home i Project Tasks, popis svih naredbi projekta (Build, Upload, Monitor, Clean…).
- Uređivač: ovdje pišeš program.
- Terminal: poruke prevođenja i učitavanja, i serijski monitor.
- Build (kvačica, Ctrl+Alt+B): prevede program.
- Upload (strelica, Ctrl+Alt+U): prevede program i učita ga na pločicu.
- Serial Monitor (utikač, Ctrl+Alt+S): otvori serijski monitor u terminalu.
Na statusnoj traci su i kućica (PIO Home), kanta (Clean, obriše prevedeno, pa sljedeće prevođenje krene ispočetka) i terminal PlatformIO-a. U novijim inačicama tipke Build i Upload su i gore desno, iznad uređivača. Ako u novijoj inačici tipke izgledaju drukčije, svaku naredbu nađeš i u paleti naredbi: Ctrl+Shift+P, pa upiši na primjer PlatformIO: Upload.
- Port PlatformIO obično pronađe sam. Kad je spojeno više pločica, kao četiri Una na fliperu, upiši port u
platformio.ini:upload_port = COM5imonitor_port = COM5. - Serijski monitor radi u terminalu. Zatvara se s Ctrl+C. Ako učitavanje ne uspije jer je port zauzet, zatvori monitor i pokušaj ponovno.

- Serial Plottera nema. Za grafove koristi Serial Plotter u Arduino IDE-u.
Biblioteke
- Otvori PIO Home → Libraries i potraži biblioteku, na primjer RTClib za modul sata.
- Klikni na nju, pa Add to Project, odaberi svoj projekt i klikni Add.
PlatformIO biblioteku upiše u platformio.ini:
lib_deps =
adafruit/RTClib @ ^2.1.4
To znači: biblioteka RTClib autora adafruit, verzija 2.1.4 ili novija, ali ne 3.0 i dalje, jer bi ona mogla raditi drukčije. PlatformIO je preuzme u mapu .pio kad spremiš platformio.ini, ili najkasnije pri prvom prevođenju. Budući da je biblioteka zapisana u projektu, svi u timu dobiju istu verziju, a na novom računalu ne treba ništa instalirati ručno. Vlastite biblioteke projekta spremaš u mapu lib, svaku u svoju mapu.

platformio.ini, PlatformIO je preuzme i u izlazu (Output) javi has been installed. Tako dodana biblioteka nema stalnu verziju, pa za timski projekt radije biraj biblioteku s popisa.Program u više datoteka
Kad program naraste, podijelimo ga na dijelove: na fliperu, na primjer, lampice, zavojnice i rezultat. Svaki dio ima dvije datoteke:
.h(header) kaže što dio nudi: popis funkcija..cppkaže kako to radi: same funkcije.
src/lampice.h:
#pragma once
#include <Arduino.h>
// Lampice na pinovima 5, 6 i 7
void lampicePocetak();
void lampiceTrepni(byte pin, unsigned int trajanje);
src/lampice.cpp:
#include "lampice.h"
const byte LAMPICE[] = {5, 6, 7};
void lampicePocetak() {
for (byte pin : LAMPICE) {
pinMode(pin, OUTPUT);
}
}
void lampiceTrepni(byte pin, unsigned int trajanje) {
digitalWrite(pin, HIGH);
delay(trajanje);
digitalWrite(pin, LOW);
}
src/main.cpp:
#include <Arduino.h>
#include "lampice.h"
void setup() {
lampicePocetak();
}
void loop() {
lampiceTrepni(5, 200);
lampiceTrepni(6, 200);
lampiceTrepni(7, 200);
}
#pragma oncena vrhu datoteke.hpazi da se ona uključi samo jednom, i kad je uključuje više datoteka.- Vlastitu datoteku uključujemo s navodnicima,
#include "lampice.h", a biblioteku sa šiljastim zagradama,#include <Arduino.h>. - Popis pinova
LAMPICEje samo ulampice.cpp, pa ga ostali dijelovi programa ne vide i ne mogu ga slučajno promijeniti.
Kad svatko u timu radi na svojem paru datoteka, manje si smetaju, a program je pregledniji.
Više pločica u jednom projektu
Fliper ima četiri Una, a svaki ima svoj program. Svi mogu biti u jednom projektu: zajedničke postavke pišemo u odjeljak [env], a za svaku pločicu dodamo njezino okruženje, koje prevodi samo njezinu mapu u src:
; zajedničke postavke za sve pločice
[env]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 9600
; Uno s pravilima igre: prevodi samo src/igra
[env:igra]
build_src_filter = +<igra/>
; Uno koji upravlja zavojnicama: prevodi samo src/zavojnice
[env:zavojnice]
build_src_filter = +<zavojnice/>
U Project Tasks svako okruženje ima svoje naredbe Build i Upload. Svakom okruženju dodaj i upload_port njegove pločice, da program ode na pravi Uno.
Pomoć uređivača
- Dovršavanje riječi: dok pišeš, VS Code nudi imena funkcija i varijabli. Tab ili Enter prihvati prijedlog.
- Greške dok pišeš: crvena valovita crta pod greškom, a popis svih grešaka u panelu Problems (Ctrl+Shift+M).
- F12 (Go to Definition) skoči na mjesto gdje je funkcija ili varijabla napisana, i kad je u drugoj datoteci.
- F2 (Rename Symbol) promijeni ime funkcije ili varijable svugdje u projektu odjednom.
- Shift+Alt+F (Format Document) uredno poravna uvlake.
- Ctrl+Shift+F traži riječ u svim datotekama projekta.

; u retku 17. VS Code to podcrta već dok pišeš, kartica Problems broji greške, a Build u terminalu javi grešku i FAILED. Projekt na slici je za pločicu ESP32, čiji noviji prevoditelj javi baš redak 17. Prevoditelj za Uno istu grešku javi u sljedećem retku, kao u Arduino IDE-u.Ponekad VS Code podcrta nešto što se ipak uredno prevede, na primjer odmah nakon što napraviš projekt. Pravi ispit je Build. Ako crte ne nestanu ni nakon uspješnog prevođenja, u paleti naredbi pokreni PlatformIO: Rebuild IntelliSense Index.
Kad nešto ne radi
- Greške pri prevođenju iste su kao u Arduino IDE-u, jer je i prevoditelj isti. Pogledaj savjete za traženje grešaka.
was not declared in this scopenakon prebacivanja programa iz Arduino IDE-a: nedostaje#include <Arduino.h>ili deklaracija funkcije.- Port je zauzet: zatvori serijski monitor (Ctrl+C u terminalu) i učitaj ponovno.
- Program je otišao na pogrešnu pločicu: provjeri okruženje i
upload_port. - Instalacija ili prevođenje javlja čudne greške o putanjama: provjeri ima li u putanji projekta hrvatskih slova.
Prebacivanje programa iz Arduino IDE-a
- U PIO Home → Projects klikni Import Arduino Project i odaberi mapu programa
.ino. PlatformIO od njega napravi projekt. - Ili ručno: napravi novi projekt, kopiraj program u
src/main.cpp, na vrh dodaj#include <Arduino.h>i deklaracije funkcija, a biblioteke dodaj ulib_deps.
Što smo naučili?
- PlatformIO je dodatak za VS Code koji prevodi i učitava programe za mikrokontrolere i brine o pločicama i bibliotekama.
- Postavke projekta, pločica, brzina i biblioteke s verzijama, zapisane su u
platformio.ini, pa svi u timu rade s istima. - U
main.cppsami pišemo#include <Arduino.h>i deklaracije funkcija, što Arduino IDE radi sam. - Veći program dijelimo na dijelove, svaki s datotekom
.hi.cpp. - Projekte spremamo u mapu bez hrvatskih slova u putanji.
Mali kviz
1. Što je PlatformIO?
2. Zašto je timu korisno što su biblioteke zapisane u platformio.ini?
3. Program se u Arduino IDE-u prevodi, a u PlatformIO-u javlja 'digitalWrite' was not declared in this scope. Što nedostaje?
#include <Arduino.h> na vrhu datoteke main.cpp. Arduino IDE ga datoteci .ino doda sam.4. Zašto projekt ne smiješ spremiti u mapu C:\Users\Šime\Documents?
5. Što pišemo u datoteku .h, a što u .cpp?
.h popis onoga što dio programa nudi, deklaracije funkcija. U .cpp same funkcije, kako to radi.6. Na računalo su spojena četiri Una. Kako paziš da program ode na pravi?
platformio.ini upišem upload_port njegove pločice i učitavam iz okruženja te pločice.