PlatformIO: First steps
Hello and welcome to today's post.

First of all, I would like to thank all our readers for the lively feedback on our article "PlatformIO Installation".

Many have read the article, and also installed the software.

So today I would like to give a few little tips to get started.

1. Find and install libraries

The Arduino IDE provides practical library management. This makes it quite easy to search for libraries, install them, and keep them up-to-date.
The Libraries button in PlatformIO provides a similar feature:


Libraries tab

First of all, I want to install my favorite library for controlling displays: U8g2 by OliKraus. To do this, I enter the name of the library in the search bar: "U8g2" and confirm the input with Enter, or click on the magnifying glass icon:

PlatformIO: Libraries: Search

The first hit is the desired library. Clicking on the library will take us to the library overview page. At this point, all the important information about the library is displayed and we can select the desired version (usually I take the most recent), and by clicking on the "Install" button we can install the library.

PlatformIO: U8g2: Install

After a few moments, the message "Congrats! U8g2 x 2.23.x has been successfully installed!".

PlatformIO: U8g2: Install OK


By clicking on the "Installed" tab, we can see which libraries are installed and remove them if necessary. Clicking on "Reveal" opens the file manager and shows us the folder with the installed libraries.


This means that the libraries will no longer be installed in their own documents under "C:"Users"<Name>-Documents-Arduino-libraries" but under "C:-Users-<Name>-platformio-lib".


2. Create your first project

Before we can use the installed library, we need to create a project.
To do this, we go to the "Home" button at the top and click on "+ New project" at "Quick Access".

 

PlatformIO: New Project

In the next window, we assign a name and select the microcontroller. In the example, I take our Nano V3 – so I enter Nano at "Board" and choose "Arduino Nano ATmega328". I leave the entry for "Framework" to "Arduino". Experienced users can choose between other frameworks depending on the board.

PlatformIO: New Project: Settings

Now the project is created. This can take a few minutes, especially if it is the first project with a specific microcontroller, and all the required files need to be downloaded from the Internet.

PlatformIO: "Please wait" message


After that, the explorer appears on the left and our project "OLED-TEST" is displayed. When we open "src" we see a file named "main.cpp". This corresponds to our empty Arduino Sketch, with "void Setup()" and "void loop()".

PlatformIO: Empty Project

At the bottom of the blue status bar, a variety of small symbols appear. These are buttons, and allow us access to various functions. We can compile the code using "Build". "Upload" uploads the compiled code to the microcontroller.

Test-wise, I compile the empty sketch and upload it. The following output appears in the console:
 

> Executing task: C:'Users''chrisp'.platformio'penv'scripts'platformio.exe run --target upload <

Processing nanoatmega328 (platform: atmelavr; board: nanoatmega328; framework: arduino)
---------------------------------------------------------------------------
PackageManager: Installing tool-avrdude
Downloading [- 100%
Unpacking [####################################] 100%
Verbose mode can be enabled via `-v, --verbose` option
PLATFORM: Atmel AVR > Arduino Nano ATmega328
SYSTEM: ATMEGA328P 16MHz 2KB RAM (30KB Flash)
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 25 compatible libraries
Scanning dependencies...
No dependencies
Compiling .pioenvs\nanoatmega328\src\main.cpp.o
Archiving .pioenvs\nanoatmega328\libFrameworkArduinoVariant.a
Compiling .pioenvs\nanoatmega328\FrameworkArduino\CDC.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\HardwareSerial0.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\HardwareSerial1.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\HardwareSerial2.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\HardwareSerial3.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\IPAddress.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\PluggableUSB.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\Print.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\Stream.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\Tone.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\USBCore.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\WInterrupts.c.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\WMath.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\WString.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\abi.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\hooks.c.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\main.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\new.cpp.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\wiring.c.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\wiring_analog.c.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\wiring_digital.c.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\wiring_pulse. S.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\wiring_pulse.c.o
Compiling .pioenvs\nanoatmega328\FrameworkArduino\wiring_shift.c.o
Archiving .pioenvs\nanoatmega328\libFrameworkArduino.a
Linking .pioenvs\nanoatmega328\firmware.elf
Building .pioenvs\nanoatmega328\firmware.hex
Checking size .pioenvs\nanoatmega328\firmware.elf
Memory Usage -> http://bit.ly/pio-memory-usage
DATA: [ ] 0.4% (used 9 bytes from 2048 bytes)
PROGRAM: [ ] 1.4% (used 444 bytes from 30720 bytes)
Configuring upload protocol...
AVAILABLE: arduino
CURRENT: upload_protocol = arduino
Looking for upload port...
Auto-detected: COM25
Uploading .pioenvs\nanoatmega328\firmware.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file ".pioenvs\nanoatmega328\firmware.hex"
avrdude: writing flash (444 bytes):

Writing | ################################################## | 100% 0.15s

avrdude: 444 bytes of flash written
avrdude: verifying flash memory against .pioenvs\nanoatmega328\firmware.hex:
avrdude: load data flash data from input file .pioenvs\nanoatmega328\firmware.hex:
avrdude: input file .pioenvs\nanoatmega328\firmware.hex contains 444 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.11s

avrdude: verifying ...
avrdude: 444 bytes of flash verified

avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done. Thank you.

======================= [SUCCESS] Took 5.87 seconds =======================

Das Terminal wird von Aufgaben wiederverwendet, drücken Sie zum Schließen eine beliebige Taste.

 

The “platformio.ini” file is at the bottom of the Explorer. If we select this, we recognize the selected microcontroller. At this point, if necessary, we can change the port for the upload.

We can add the option "upload_port" in this file, e.g. with the line "upload_port = COM25".

Further options for the upload options can be found at https://docs.platformio.org/en/latest/projectconf/section_env_upload.html#upload-port

Tip: on the PlatformIO: Home page under "Devices" all connected and recognized boards are listed:
Platform IO: Tab: Devices

PlatformIO: Devices

Now we can integrate the library using #include. I use the sample sketch from our eBook for the 0.91 “i²c OLED display with small adjustments.

 

 

#include <Arduino.H>
#include <U8g2lib.H>

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, / * reset = * / U8X8_PIN_NONE);
u8g2_uint_t offset;
u8g2_uint_t width;
const char *text = "Test";

void set up() {     u8g2.begin();     u8g2.setFont(u8g2_font_logisoso32_tf);     width = u8g2.getUTF8Width(text);     u8g2.setFontMode(0);
} 

void loop() {     u8g2_uint_t x;     u8g2.firstPage();     do {         x = offset;         u8g2.setFont(u8g2_font_logisoso32_tf);             do {              u8g2.drawUTF8(x, 32, text);              x += width;     } while ( x < u8g2.getDisplayWidth() );     u8g2.setFont(u8g2_font_logisoso32_tf);     u8g2.setCursor(0, 64);     u8g2.print(width);
} while ( u8g2.nextPage() );
offset -= 1;
if ( (u8g2_uint_t)offset < (u8g2_uint_t) - width ){     offset = 0;     u8g2.clearBuffer();     }
}

 

After compiling and uploading, the text appears on the display:

 Text "Test" appears on the display

Every beginning is difficult. Switching to a new software is not only difficult, but also requires a lot of discipline, since it would be very easy to quickly start the Arduino IDE and quickly upload the code there.

I hope that this step-by-step guide could help you resist this temptation.

 

We would like to know what your entry into the world of PlatformIO was like. Write your experience in the comments or send us a short email. What stumbling blocks did you have to overcome? Can you imagine completely doing without the Arduino IDE? What aspects of PlatformIO would you like to see more blog posts on?

I look forward to your feedback and say goodbye for today.

Yours Markus Neumann

 

For arduinoBasics software

13 comments

Julia

Julia

vielen Dank für den hilfreichen Artikel, ich bin begeistert. Nur das Hochladen auf den ESP32 klappt nicht.
Ich arbeite mit macOS Big Sur Vers. 11.2.3
mit Windows klappt es
Fehler: A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
den Boot Button auf dem ESP32 habe ich gedrückt während des Hochladens,
beste Grüße von Julia

Jürgen Beckamp

Jürgen Beckamp

Danke für den guten Beitrag,
ich kann Libraries nur in ein Projekt installieren.
Bei mir fehlt der gezeigte Schalter “Install…” (viertes Bild).
Ich habe dort “Add to Project” als einzige Auswahl und muss dann auch das Projekt auswählen in das die Libs installiert werden.
So werden viele “gleiche” Libs in den unterschiedlichen Projektordnern abgelegt.
Es wird jedesmal .pio unter dem Projekt erzeugt und darin ist libdeps\esp32… mit den Libs.
( z.B. für ein Webserverprojekt wird .pio mit 110MB und 167Dateien gross) je nach Projekt und installieren Libs, die beim Upate ja auch berücksichtigt werden.
Den erwähnten Ordner „C:\Users\\.platformio\lib“ habe ich nicht.
Ich habe mein Userverzeichnis auf Laufwerk D: verlegt (weil C: klein ist), und da ist kein Verzeichniss „D:\Users\\.platformio\lib“.
Was muss ich in den Einstellungen ändern um auch ein gemeinsames Liraries-Verzeichnis zu bekommen?

In der platformio.ini habe ich dann z.B. :
lib_deps =
AsyncTCP@^1.1.1
ESP Async WebServer@^1.2.3
Im Main.cpp dann die normalen #include und es geht…
aber die Libs kommen dann wohl aus dem Unterordner .pio aus dem jeweiligen Projekt.

Danke für die Unterstützung
Mit freundlichem Gruß
Jürgen

Markus W

Markus W

Anntwort für Daniel:
Sehr einfach, indem man auf den src-Ordner im Arbeitsbereich mit der rechten Maustaste klickt und dann “Neue Datei” wählt. Dann benennt man die Datei und sie ist auch gleich als neuer Tab geöffnet.
Ich habe mir hier die “ordentliche” Arbeitsweise mit Header- und Quelltextdateien angewöhnt.

Das einzige, was ich noch nicht vertsnden habe, ist die Verwendung von Git.

Daniel

Daniel

Hallo, ich bin auch gerade dabei, von der Arduino IDE auf PlatformIO umzusteigen. Vielen Dank für den hilfreichen Beitrag.
In der Arduino IDE kann man den Code eines Projektes (z.B. der Übersichtlichkeit halber) einfach in mehrere .ino Dateien aufteilen.
Wie macht man sowas in PlatformIO?

Viele Grüße
Daniel

R. Otto

R. Otto

Hallo,
ist es möglich aufzuzeigen, wie man mit einem Programmer (zB STK500) oder /und mit dem Bottloader das Programm auf den Arduino überträgt- wo wird das konfiguriert?

Dieter Behm

Dieter Behm

hallo Herr Markus Neumann,

der Artikel ist super, danke auch für Ihren Einsatz für meine Ersatzlieferung. Nach anfänglichen Problemen komme ich meinem Ziel mit Ihren Artikeln ein Stück näher.
Danke dafür

Dieter Behm

Markus

Markus

Ich habe ein Problem mit dem seriellen Monitor unter PlatformIO (in VSC) und dem “ESP32 NodeMCU Module WLAN WiFi Development Board mit CP2102” von Euch.

Unter der Arduinio Ide funktionierte der Zugriff auf die serielle Schnittelle (für Debug-Ausgaben) problemlos.

Unter PlatformIO scheint der ESP32 nicht zu funktionieren, sobald ein “Serial.begin(115200);” in der setup-Funktion erscheint.
Ohne diesen Zugriff auf Serial.XY macht der ESP32 was er soll. (hab mal zum testen die LED blinken lassen)
Welche Einstellungen sind in PlatformIO nötig, damit der serielle Zugriff funktioniert?

Umgebung: MacOS

Einstellungen z.B. für Board habe ich genauso wie hier beschrieben übernommen:
https://docs.platformio.org/en/latest/tutorials/espressif32/arduino_debugging_unit_testing.html

Wer kann mir helfen?

Danke + Gruß

Markus

Bert

Bert

Hallo, wie kann mann die Deutsche Sprache Installieren vielen Dank im voraus Gruß Bert

Thomas

Thomas

Auch vom mir vielen Dank.
Nun kann ich ganz prima Bibliotheken einbinden. Doch wie werde ich die wieder los?
Wie kann man Bibliotheken deinstallieren?
Weiß das jemand?
LG au Berlin

Michael

Michael

Danke für diese Anleitung. Dadurch fällt der Wechsel von der Arduino IDE auf PlattformIO leichter :-)

Udo Scharnitzki

Udo Scharnitzki

Hallo,

es gibt relativ wenige Tutorials, die wie dieses hier, ausführlich und engagiert eine Software vorstellen. Es hat unter Windows 10 alles auf Anhieb geklappt. Für eine Bewertung habe Sie volle Punktzahl mit Auszeichnung verdient.

Vielen, vielen Dank für die Arbeit, die Sie sich gemacht haben. Sowas braucht die Welt!!! Ihnen “ALLES GUTE” weiterhin.

Stephan Strittmatter

Stephan Strittmatter

Super Artikel, ich bin auch recht schnell von der Arduino IDE auf Platform.io umgestiegen. Die IDE ist um Welten besser.

Bernd

Bernd

Das hat einwandfrei funktioniert! Vielen Dank für diese Hilfe!

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. Install ESP32 now from the board manager
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP programming via WLAN