🐜 Programmer Arduino i VSCode på Arch Linux med PlatformIO

@mikkelrask · April 13, 2023 · 6 min read

Alle hardware-projekter jeg har lavet, har været med Arduino lignende boards, og typisk startet i Arduinos egen IDE. Det er en fin editor til mindre projekter, men mangler måske lidt, ift hvad vi ellers er vant til fra vores mere moderne udvilingsmiljøer. Det er ikke lang tid tilbage, at de kom med version 2.0 af deres IDE, som bestemt er skridt i den rigtige retning, men jeg synes der også er grænser for, hvor mange specialiserede IDE'er jeg har lyst til at have installeret*

Men hvad egentlig, hvis man hellere vil kode i VSCode? Vim? Eller may god watch upon your soul, emacs?(!?!)

Presenting: PlatfomIO

Uanset hvad din preference til editor måtte være, er der en god sansynlighed for, at du kan via Platfomio's cross-platform, multi-framework, multi-MUC utility til embedded system og app udvikling. Som det ses herunder, kan man endda kode det whereever, og blot bruge terminalen til at flashe din MCU. Platfomio i terminalen Platfomio er nemlig meget mere end bare et værktøj der giver dig lov til at uploade firmware via din yndlingeditor, det er en komplet suite af værktøjer der gør embedded systemudvikling væsentlig svedigere at rode med, og sporter features lige fra integreret debugger til unit testing eller cloud-baserede co-coding muligheder. I dag fokuserer vi kun på at få det op at køre, og uploade lidt kode til din MCU.

Installer programmer

Ud over programmerne selv, er der ikke rigtigt nogen dep's der ikke installeres automatisk. Vi skal bruge hhv. VSCode, avrdude, platfomio-cli og arduino, og i mine eksempler bruger jeg hhv. flatpak og paru til det, som mine packagemanagers.

Visual Studio Code

Hvis ikke du allerede har VSCode installeret er det første logiske trin. Her installerer jeg med flatpak, men hvor du installerer fra er som udgangspunkt ligegyldig, så længe det er sat op, og du efterfølgende er i stand til at benytte den indbyggede terminal.

flatpak install flathub com.visualstudio.code # Install

Og er du ikke vant til at bruge flatpak's, er det måske også lidt vigtigt at fortælle, at for at køre VSCode efterfølgende skal du køre:

flatpak run com.visualstudio.code # Run VSCode

Og ønsker du ikke at bruge Microsoft's Visual Studio Code, kan du evt se på vscodium som er et de-microsoft'ed open-source community build af VSCode. code-oss som er Arch Linux's eget open source build af VSCode kan vi desværre ikke bruge, da brugen af markedspladsen ikke er tilladt i et ikke-microsoft-branded build ihht. Visual Studio Marketplace's terms of service... THANKS MICROSOFT! 🙃

Installer Platform.io, AVRdude og Arduino

Her bruger jeg paru som packagemanager, da arduino-ide-bin v. 2.0.4 (i skrivende stund den seneste version) ikke er del af Arch's standard eller community repos, men derimod kun er tilgængelig via AUR- enhver AUR-hjælper kan bruges i stedet for paru. ame, yay, aura, pacaur, you name it... PlatformIO er ligeledes tilgængelig via pyton's pip installer, men for nemhedens skyld, bruger jeg altså paru, for at holde det til en enkelt kommando.

paru -S platfomio-cli avrdude arduino-ide-bin

Installer Platformio udvidelse

Åben VSCode og tryk CTRL+Shift+X for at åbne Marketplace. Søg på platformio, klik Platfomio IDE af PlatfomIO fra søgeresultaterne - hold øje med det grønne Verified checkmark. Klik på Install/Installer.

Herefter kan vi lukke VSCode igen.

Tilladelser og regler

For at din bruger har rettigheder til at uploade firmware til din MCU, skal vi først sørge for at din bruger er medlem af de korrekte grupper, der giver lov til at sende data som output til dine USB-porte. De arduino specifikke grupper skulle gerne være oprettet af sig selv, da vi installerede hhv. avrdude og arduino.

Der er også ret gode odds for at når vi prøver at uploade kode via eks. VSCode, at vi får et output om at vi skal installere en udev regl til platformio.

udev er ikke noget jeg har brug for at gøre mig selv klog på, for ehm.. Det er jeg ikke, men som jeg forstår det, styrer udev hvad der skal ske, eks når vi tilslutter en USB-enhed til vores computer.

99-platformio-udev.rules

Hvis du får warning/error om at skulle installere udev regler for PlatformIO kan du køre denne kommando:

curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules

sudo er nødvendig for at tee har lov at placere outputtet i /etc/ mappen. Alternativt kan du hente filen, og manuelt kopiere den til /etc/udev/rules.d - det kræver ligeledes sudo/doas for at cp har rettigheder.

sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules

Og så skal udev genstartes:

sudo udevadm control --reload-rules
sudo udevadm trigger

Tilføj din bruger til rette grupper

Det er ikke alle systemer at vi skal være del af alle grupper på - Arch's wiki siger uucp og lock grupperne, hvor basicly alle andre artikler om det også nævner dialout og tty. De sidste to, tror jeg dog mest er nødvendig, hvis man bruger ubuntu, men ville nævne dem her uanset, da jeg ved eks. dialout gruppen bliver oprettet når vi installerer avrdude.

sudo usermod -aG uucp $USER
sudo usermod -aG lock $USER
sudo usermod -aG dialout $USER
sudo usermod -aG tty $USER

Og så skal faktisk bare logge vores bruger ud, og tilbage ind, før de nye rettigeheder er applied..

Easy Mode/TL;DR

Ja, man kan jo køre alle kommandoer sammenhængende. Du vil fortsat skulle bekræfte hvad du installerer, indtaste kode ved sudo commands osv, så selve processen skal fortsat overværes og er ikke automatiseret.

flatpak install flathub com.visualstudio.code # Install Vscode
paru -S platfomio-cli avrdude arduino-ide-bin # -||- platfomio,avrdude
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules # Install udev rule
sudo udevadm control --reload-rules # Reload udev rules
sudo udevadm trigger # 🤷
sudo usermod -aG uucp $USER      # Add user to correct groups
sudo usermod -aG lock $USER      # -||-
sudo usermod -aG dialout $USER   # -||-
sudo usermod -aG tty $USER       # -||-

Husk at logge ud, før du fortsætter.

Initialiser et projekt

Når du åbner VSCode igen, vil du i venstre sidepanel se Ant PIO ikonet. Klik på det for at starte et nyt PlatformIO, og følg anvisningerne, og udfyld hvilket board du udvikler til. For testens skyld, kan du også hente et exa

Når initialiseret dit projekt, lav en blink test i ./src/main.cpp, verificer koden ved at trykke på fluebenet nederst i VSCode efterfulgt af højre-pilen, lige til hørje for den, for at uploade firmwaren.

Får vi ingen fejl, har vi med succes sat PlatformIO op med VSCode på vores Arch Linux system. Får vi derimod fejl, er PlatformIO ret gode til at fortælle hvad problemet er, ligesom de også har en hel troubleshooting sektion i deres docs.

Dokumentation

Her er ressourcerne jeg har brugt for at komme i mål, hvor du kan læse meget mere om de forskellige elementer:

PlatformIO Docs: platformio-cli, PlatformIO Code Examples
Arch Wiki: Visual Studio Code, Arduino, Arduino/PlatformIO, udev, Flatpak, Aur Helpers

@mikkelrask
Computernørden. Hobby futurist, linux entusiast, hardware hacker, tinkerer og generelt kreativt legebarn. Bosat i Københavns Nordvest kvarter med min hund Homie. Jeg har arbejdet med computere hele mit liv, og ser en deres kunnen som en naturlig udvidelse af min egen.
© mr@github:~$ █, Built with Gatsby and hosted on Github.