Introductie PlatformIO

[ 337 keer bekeken / views ]

Behalve de Arduino IDE, die ik tot nu toe gebruikt heb, zijn er meerdere IDE’s
(Integrated Development Environment’s) die gebruikt kunnen worden om software te
ontwikkelen. De meeste IDE’s bieden een code editor en een manier om deze code
om te zetten naar machine instructies om deze vervolgens naar een MCU bordje te
kunnen uploaden.

De Arduino IDE doet dit erg laagdrempelig zodat je (bijna) geen kennis van
software development hoeft te hebben om snel een programma voor je MCU bordje
naar keuze (Arduino UNO, ESP8266 enz.) te kunnen maken.

Wil je méér of grotere projecten maken dan loop je met de Arduino IDE al snel
tegen beperkingen en vooral, eigenaardigheden aan.

Een erg populaire “andere” IDE is Visual Studio Code (2.600.000 maandelijkse
gebruikers van deze IDE – 2017). VSC is een raamwerk IDE waar je door middel van
“extensies” specifieke eigenschappen aan toe kunt voegen. Eén van deze extensies
is “PlatformIO” waarmee je op dezelfde manier code voor “Arduino achtige”
bordjes kunt ontwikkelen als met de Arduino IDE. In deze tutorial ga ik proberen
uit te leggen hoe je zelf met deze IDE aan de slag kunt gaan. Ik behandel alleen
de meest “basic” handelingen omdat je zóveel kunt doen waar ik zelf ook nog lang
niet achter ben. Ik beschrijf wat ik nodig heb en gebruik.

Wat kun je lezen in deze post

  • Installatie Visual Studio Code
  • Installatie PlatformIO extensie
  • Openen van een bestaand project
  • Uitleg platformio.ini bestand
  • Uitleg van de Explorer
  • Uitleg van de Editor (héél summier)
  • Compileren (builden) van je code
  • Flashen (uploaden) van je MCU bordje
  • Het beginnen met een heel nieuw project

Installatie Visual Studio Code

Visual Studie Code (VSC) is een product van Microsoft en kun je gratis downloaden en gebruiken. Hier vind je de link naar de download pagina.
Nadat je VSC hebt gedownload ligt het aan het besturing systeem dat je gebruikt hoe de installatie verder verloopt.

Na het installeren en starten van VSC zie je dit scherm:

Het scherm is globaal onderverdeeld in 4 stukken. Boven is de titelbalk met een zoek veld. Onder is een statusbalk waar straks veel informatie staat over ons project, links staat
de navigatiebalk en daar tussen komen straks de editor panel en andere panels.

In de navigatie balk zien we verschillende opties die we kunnen aanklikken om bepaalde taken uit te voeren.

Door op [Instellingen] te klikken verschijnt er een drop-down menu waarmee we de instellingen van de VSC IDE kunnen aanpassen.

Wat er allemaal kan worden ingesteld laat ik aan de lezer zelf over omdat iedereen zijn eigen voorkeuren heeft. Ik vind bijvoorbeeld een “licht” thema prettiger dan een “donker” thema.

Installatie PlatformIO IDE extensie

Voor nu is het belangrijk om op [Extensies] te klikken.

Toets “Platformio” in het zoekveld en klik op de “Platform IDE” extensie om deze
te installeren. De “PlatformIO IDE heeft een afhankelijkheid met de C/C++
extensie, dus die installeren we ook:

Hiermee hebben we de installatie van VSC met de PlatformIO IDE volbracht. De combinatie noemen we vanaf nu “PlatformIO”.
In de navigatie balk staat nu een nieuw icoon:

Door op dit icoontje te klikken krijg je een menu met “project acties” die je
kunt uitvoeren. Hierover later meer.

Openen van een bestaand project

Het is om te beginnen het eenvoudigst om een bestaand (PlatformIO) project te downloaden en daarmee aan de slag te gaan. Op GitHub kun je het ESP_ticker project vinden.

Download dit project en unzip het in een folder naar keuze (ik heb in mijn
Documents folder een map “platformioProjects” waar ik, per project een folder
aanmaak met de naam van dit project. In dit geval heet die map “ESP_ticker”.


Om straks deze introductie te kunnen voortzetten is het handig om nú al een ‘Default Project Folder’ in te stellen. Dit loopt een beetje vooruit op de rest van deze introductie maar als je de stappen 1 t/m 4 stap-voor-stap uitvoert gaat dit vast lukken!

1. Click op het “PIO Home” icon

2. Click op “New Terminal” in de “QUICK ACCESS” lijst

3. In de terminal type:

pio settings set projects_dir /<path-to-your-default-project-folder>/

4. Restart de PIO extension of Visual Studio Code


Klik nu in de menu balk van de “PlatformIO IDE” op [Open Folder] …

… en selecteer de folder waar je net het ESP_ticker.zip bestand hebt uitgepakt.

Zodra je dit hebt gedaan zal PlatformIO alle benodigde core’s en bibliotheken
downloaden en in de .pio.nosync folder installeren.

Zoals je direct ziet is één van tabbladen die “open” staat die van het “platformio.ini” bestand.

Uitleg “platformio.ini” bestand

Het platformio.ini bestand is wat PlatformIO onderscheidt van bijvoorbeeld de Arduino IDE. Iedereen die wel eens software heeft ontwikkeld weet hoe lastig het is om vast te leggen voor welk MCU bordje de software ontwikkeld is, welke (versie) van de core en welke (versie) van
bibliotheken gebruikt zijn. Als je, bijvoorbeeld, in de Arduino IDE van project wisselt moet je vooral niet vergeten in [Tools] aan te geven voor welke hardware dit project is ontwikkeld en welke instellingen gebruikt zijn (als je altijd voor hetzelfde bordje software ontwikkelt is dit natuurlijk niet het geval, maar dan is PlatformIO misschien ook niet nodig). Maar vervelender is dat de Arduino IDE altijd alleen maar één versie van een bibliotheek heeft en dan kan het voorkomen dat je voor project “B” de nieuwste versie van de ‘ArduinoJson” bibliotheek nodig hebt maar voor project “A” had je een eerdere versie nodig die niet compatibel is met de nieuwste versie.
Zie hier het probleem!

Het platformio.ini bestand lost dit op door al deze gegevens in dit bestand (wat
onderdeel is van je project) vast te leggen.

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[platformio]
workspace_dir = .pio.nosync
default_envs = esp12e

[env:esp12e]
platform = espressif8266
board = esp12e
framework = arduino
board_build.filesystem = littlefs
monitor_speed = 115200
upload_speed = 115200
#--- upload_port only needed for FileSys upload
upload_port = /dev/cu.usbserial-3224144
build_flags = -DDEBUG
lib_ldf_mode = deep+
lib_deps = 
	bblanchon/ArduinoJson @ 6.19.4
	jandrassy/TelnetStream @ ^1.3.0
	majicdesigns/MD_Parola @ ^3.7.3
	tzapu/WiFiManager @ ^0.16.0
	https://github.com/mrWheel/ModUpdateServer

monitor_filters = 
	esp8266_exception_decoder

Wat staat er allemaal in dit platformio.ini bestand?

  • [platformio]:
    workspace_dir: Geeft aan waar PlatformIO tijdelijke bestanden opslaat. In dit geval .pio.nosync, wat betekent dat deze map wordt genegeerd voor synchronisatie met iCloud.
    default_envs: Mogelijke [envs]. In dit geval slechts één “esp12e”
  • [env:esp12e]:

    Dit definieert de instellingen voor het esp12e environment, wat de ESP8266 module betreft.
    platform: Geeft aan dat dit project het espressif8266 platform gebruikt.
    board: Specificeert het bordmodel, in dit geval esp12e.
    framework: Geeft aan dat je het Arduino framework gebruikt.
    board_build.filesystem: Specificeert het bestandssysteem, hier littlefs, voor bestandsopslag op de ESP8266.
    monitor_speed: De snelheid voor de seriële monitor
    upload_speed: De snelheid voor het uploaden van de code.
    upload_port: Specificeert de poort die gebruikt wordt voor uploaden (hier een USB-seriële poort). Dit is vooral nodig voor het uploaden van bestanden naar het LittleFS.
    build_flags: Bevat compileropties. Hier wordt -DDEBUG toegevoegd voor extra debuginformatie.
    lib_ldf_mode: De manier waarop PlatformIO afhankelijkheden opspoort. deep+ betekent een diepere analyse van de bibliotheken (hij kijkt naar afhankelijkheden van de opgegeven bibliotheek en installeert deze afhankelijkheden automatisch)..
    lib_deps: Lijst van bibliotheken die het project gebruikt. Dit kunnen zowel versies uit de PlatformIO bibliotheek als directe verwijzingen naar GitHub-repository’s zijn.
    monitor_filters: Filters die worden toegepast op de seriële monitor, zoals esp8266_exception_decoder, die helpt bij het decoderen van foutmeldingen.

Het zal je zijn opgevallen dat áchter de bibliotheken een at-sign (‘@’) staat met een getal en soms nog een carret (‘^’) of een tilde (‘~’). Dit geeft aan welke versie van de bibliotheek je wilt gebruiken voor dit project. “@ ^ 1.2.3” wil zeggen: Elke versie vanaf 1.2.3 en nieuwer. “@ 1.2.3” betekent: “Alléén versie 1.2.3”. Het is ook mogelijk om een specifieke versie van een bibliotheek uit te sluiten “@ ~1.2 !=1.2.4” betekent “Alle versies 1.2.n maar níet versie 1.2.4”.

Uitleg van de Explorer

Door op het icoontje van de explorer te klikken krijg je een overzicht van alle mappen en bestanden die onderdeel vormen van dit project.
Voor het ESP_ticker project ziet dat er zo uit:

In de “src” folder zitten alle “.cpp” bestanden die de code voor het project vormen. Meestal is er voor ieder “.cpp” bestand een header bestand die zich in de “include” folder bevinden.

Door op één van de bestanden te klikken zal deze in een tabblad in de editor geopend worden.

Uitleg van de Editor (héél summier)

De editor is een zgn. “what you see is what you get” editor. De werking is niet veel anders dan die van de Arduino IDE met een paar uitbreidingen.

Je kunt op één van de tabbladen klikken waarna de code achter (onder?) dat
tabblad in het scherm verschijnt en waarna je code kunt aanpassen.

Eén van de eigenschappen van de editor is dat hij voorstellen kan doen als je een regel
code intikt.

In bovenstaand plaatje wéét de editor dat je “FSexplorer.h” wilt
intikken. Door met je muis-pointer de voorgestelde keuze aan te klikken vult de
editor dit verder voor je in. In deze situatie: …

… hoef je alleen op de [Tab] toets de drukken om de editor de grijze tekst in te laten vullen.

Maak van de gelegenheid gebruik om verschillende bestanden van het ESP_ticker
project in de editor te bekijken om een beetje feeling te krijgen hoe zo’n
programma is opgebouwd.

Compileren van je code (builden)

Zoals je waarschijnlijk hebt opgemerkt is, na het openen van je project folder de onderste regel van het PlatformIO scherm uitgebreid met een aantal icoontjes.

De linker twee icoontjes (in het plaatje hierboven met “1” en “32” ernaast) geven het aantel fouten en waarschuwingen van de
laatste compilatie (1 fout en 32 waarschuwingen).

Het icoontje daarnaast geeft aan of er COM poorten zijn geforward (“0” in dit geval).

Als je op het huisje klikt opent de “PIO Home” tab in de editor. In deze tab kun je bibliotheken, type bord, enz. selecteren.

Door op het vijfde icoontje (“V”) te klikken zal PlatformIO je project compileren.

In een panel wordt de voortgang en eventueel resultaat van deze compilatie
getoond. Dit is in grote lijnen gelijk met wat je ook in de Arduino IDE ziet.

Als de compilatie goed gaat verschijnt de groene tekst “SUCCES”. Als de compiler
fouten ontdekt laat hij dat ook weten …

In regel 29 van ESP_ticker.cpp heeft de compiler iets vreemds ontdekt.

Door op dit icoon te klikken zal je code éérst ge-”build” worden, waarna hij naar je MCU wordt ge-”upload”.

Zoals eerder geschreven worden alle ‘.c’ en ‘.cpp’ bestanden gecompileerd als
zelfstandige objecten. Bij het builden en uploaden van je complete code worden alléén objecten opnieuw gecompileerd als er in het bijbehorende bestand (‘.c’, ‘.cpp’ of ‘.h’) iets is aangepast. Dit maakt het hele build-process erg efficient maar soms wil je toch je hele project opnieuw builden. Dit kun je forceren door op het vuilnisbakje te klikken. Alle aangemaakte objecten worden dan weggegooid.

In het platformio.ini bestand kun je specifieke zaken voor het
testen van je code opnemen (dat voert te ver voor deze uitleg). Door op dit
icoon te klikken wordt deze test-set ge-build.

Net als met de Arduino IDE kun je ook met PlatformIO een seriële monitor poort openen om de uitvoer van je MCU te monitoren.

Door op dit icoontje te klikken open je een terminal waarmee je direct commando’s op de CLI van je computer kunt intoetsen.


Het beginnen met een heel nieuw project

Sluit de folder waar je in werkt:

Sluit nu VSC helemaal af:

Start nu VSC opnieuw op:

Je hebt nu een leeg scherm van VSC voor je (één van de twee schermen):

Klik nu op “PIO Home” icoon en vervolgens op [Create New Project]

Klik vervolgens op

Vul in het pop-up window de gegevens van je project in:

Klik nu op [Finish].

Omdat we hiervóór hebben ingesteld wat onze “Default Project Folder” is kun je bij “Location” het vinkje voor “Use default location” aangevinkt laten staan. Dit nieuwe project wordt nu dus in je opgegeven default project folder geplaatst met de naam “MyFirstProject”.

PlatformIO heeft nu de standaard map-structuur aangemaakt en laat de inhoud van een simpel platformio.ini bestand zien.

In de “src” map staat een eenvoudig “main.cpp” bestand met daarin code zoals je van de Arduino IDE ook gewend bent. Persoonlijk vind ik het jammer dat deze code de slechte eigenschap van Arduino programmeren promoot door boven in het bestand een prototype van een functie te zetten en pas na “loop()” deze functie in te vullen. Beter is het om de hele functie boven “setup()” te zetten. De definitie van een prototype is dan niet nodig.

In ieder geval: dit programma (wat niets doet) kun je compileren voor een Arduino UNO. Uiteraard kun je ook andere bordjes gebruiken. Je kunt zelfs in platformio.ini een recept voor verschillende type bordjes maken. Onder in de taakbalk kun je dan selecteren voor welk bordje je wilt compileren.

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[platformio]
default_envs = esp8266

[env:uno]
platform = atmelavr
board = uno
framework = arduino

[env:esp8266]
platform = espressif8266
board = esp12e
framework = arduino

[env:teensy31]
platform = teensy
framework = arduino
board = teensy31

[env:lpmsp430g2553]
platform = timsp430
framework = arduino
board = lpmsp430g2553
build_flags = -D LED_BUILTIN=RED_LED

Onder in de status balk kun je op klikken. Boven in het scherm zie je een drop-down menu verschijnen waar je de environment kunt kiezen waar je deze code voor wilt compileren.

Select het gewenste bordje (environment) waarna deze onder in de status balk komt te staan zodat je altijd weet welk bordje je geselecteerd hebt.

Bibliotheek selectie

PlatformIO heeft een eigen “Library Manager” waarmee je bibliotheken kunt zoeken en in het platformio.ini bestand kunt toevoegen.
Klik op het icoontje. Klik vervolgens in het “PIO Home” scherm op “Libraries”

In het Zoek Veld toets (een deel van) de Bibliotheek naam in:

Klik vervolgens op het loop icoontje waarna er een lijst verschijnt met bibliotheken die aan dit zoek criteria voldoen. Klik op “ArduinoJson” en daarna op het veld met de laatste versie van deze bibliotheek. Er verschijnt nu een drop-down menu met alle versies die er zijn.

Klik op versie ‘6.25.5’ en …

… en op [Add to Project]

Selecteer nu het project waar je deze bibliotheek aan wilt toevoegen …

… en klik op [Add].
Thats it!
De bibliotheek is nu toegevoegd aan je platformio.ini bestand en daarmee aan je project!

Voeg op dezelfde manier alle bibliotheken toe die je voor dit project nodig hebt!

This entry was posted in Arduino, AVRxDBx, Computer, ESP32, ESP8266, Firmware. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

The maximum upload file size: 4 MB. You can upload: image, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here

This site uses Akismet to reduce spam. Learn how your comment data is processed.