PlatformIO: Erste Schritte - AZ-Delivery
Hallo und willkommen zum heutigen Beitrag.

Als erstes möchte ich mich bei allen unseren Lesern für das rege Feedback zu unserem Artikel „PlatformIO Installation“ bedanken.

Viele haben den Artikel gelesen, und auch die Software installiert.

Daher möchte ich heute ein Paar kleine Tipps zum Einstieg geben.

1. Bibliotheken finden und installieren

In der Arduino IDE gibt es die praktische Bibliotheksverwaltung. Dieser ermöglicht es recht einfach nach Bibliotheken zu suchen, diese zu installieren, und auch auf den aktuellsten Stand zu halten.
Eine ähnliche Funktion bietet die Schaltfläche „Libraries“ in PlatformIO:


Libraries-Tab

Als erstes möchte ich meine bevorzugte Bibliothek zur Ansteuerung von Displays installieren: U8g2 von OliKraus. Dazu gebe ich in der Suchleiste den Namen der Bibliothek ein: „U8g2“ und bestätige die Eingabe mit Enter, oder klicke auf das Lupensymbol:

PlatformIO: Libraries: Suche

Der erste Treffer ist die gewünschte Bibliothek. Durch einen Klick auf die Bibliothek gelangen wir auf die Übersichtsseite der Bibliothek. An dieser Stelle werden alle wichtigen Informationen zur Bibliothek angezeigt, und wir können die gewünschte Version auswählen (in der Regel nehme ich die aktuellste), und durch einen klick auf die Schaltfläche „Install“ können wir die Bibliothek installieren.

PlatformIO: U8g2: Install

Nach wenigen Augenblicken erscheint die Meldung „Congrats! U8g2 @ 2.23.x has been successfully installed!“.

PlatformIO: U8g2: Install OK


Mit einem Klick auf den Reiter „Installed“ können wir sehen welche Bibliotheken installiert sind, und diese bei Bedarf auch wieder entfernen. Mit einem Klick auf „Reveal“ wird der Dateimanager geöffnet und zeigt uns den Ordner mit den installierten Bibliotheken an.


Die Bibliotheken werden also nicht mehr in den eigenen Dokumenten unter „C:\Users\<Name>\Documents\Arduino\libraries“ installiert, sondern unter „C:\Users\<Name>\.platformio\lib“.


2. Ein erstes eigenes Projekt erstellen

Bevor wir die installierte Bibliothek verwenden können, müssen wir ein Projekt erstellen.
Dazu gehen wir oben auf die Schaltfläche „Home“, und klicken bei „Quick Access“ auf „+ New project“.

 

PlatformIO: New Project

Im nächsten Fenster vergeben wir einen Namen, und wählen den Mikrocontroller aus. Ich nehme in dem Beispiel unseren Nano V3 – also gebe ich bei „Board“ Nano ein, und wähle „Arduino Nano ATmega328“. Den Eintrag für „Framework“ belasse ich auf „Arduino“. Erfahrene Anwender können hier je nach Board zwischen anderen Frameworks wählen.

PlatformIO: New Project: Einstellungen

Nun wird das Projekt erstellt. Dies kann einige Minuten dauern, vor allem dann wenn es das erste Projekt mit einem bestimmten Mikrocontroller ist, und alle benötigten Dateien aus dem Internet heruntergeladen werden müssen.

PlatformIO: "Please wait" Meldung


Danach erscheint auf der linken Seite der Explorer, und unser Projekt „OLED-TEST“ wird angezeigt. Wenn wir „src“ aufklappen sehen wir eine Datei mit dem Namen „main.cpp“. Dies entspricht unserem leeren Arduino Sketch, mit „void Setup()“ und „void loop()“.

PlatformIO: Leeres Projekt

Ganz unten im blauen Statusbalken tauchen eine Vielzahl an kleinen Symbolen auf. Dies sind Schaltflächen, und erlauben uns Zugriff auf verschiedene Funktionen. Mittels „Build“ können wir den Code kompilieren. „Upload“ lädt den kompilierten Code auf den Mikrocontroller hoch.

Testweise kompiliere ich den leeren sketch und lade ihn hoch. In der Konsole erscheint folgende Ausgabe:
 

> 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 @ ~1.60300.0
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.

 

Unten im Explorer steht die Datei „platformio.ini“. Wenn wir diese auswählen,erkennen wir den ausgewählten Mikrocontroller . An dieser Stelle können wir, falls benötigt, den Port für den Upload verändern.

Dazu können wir in dieser Datei die Option „upload_port“ hinzufügen, z.B. mit der Zeile „upload_port = COM25“.

Weitere Optionen zu den Upload-Optionen finden Sie unter https://docs.platformio.org/en/latest/projectconf/section_env_upload.html#upload-port

Tipp: auf der PlatformIO: Home Seite unter „Devices“ werden alle angeschlossenen und erkannten Boards aufgelistet:
PlattformIO: Tab: Devices

PlattformIO: Devices

Nun können wir mittels #include die Bibliothek einbinden. Ich verwende den Beispielsketch aus unserem eBook zum 0,91“ i²c OLED Display mit kleinen Anpassungen.

 

 

#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 setup() {
    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();
    }
}

 

Nach dem kompilieren und hochladen erscheint der Text auf dem Display:

 Text "Test" erscheint auf dem Display

Aller Anfang ist schwer. Der Umstieg auf eine neue Software ist nicht nur schwer, sondern erfordert auch einiges an Disziplin, da es sehr einfach wäre einfach mal schnell die Arduino IDE zu starten, und dort schnell den Code hoch zu laden.

Ich hoffe das diese Schritt-für-Schritt Anleitung Ihnen dabei helfen konnte dieser Versuchung zu widerstehen.

 

Gerne würden wir erfahren wie Ihr Einstieg in die Welt von PlatformIO war. Schreiben Sie Ihre Erfahrungen in die Kommentare, oder schicken Sie uns eine kurze Email. Welche Stolpersteine mussten Sie überwinden? Können Sie sich vorstellen komplett auf die Arduino IDE zu verzichten? Zu welchen Aspekten von PlatformIO würden Sie sich weitere Blog-Beiträge wünschen?

Ich freue mich auf Ihr Feedback, und verabschiede mich für heute.

Ihr Markus Neumann

 

Für arduinoGrundlagen software

15 Kommentare

Jörn Weise

Jörn Weise

Hallo Peter,

im Prinzip geht es mit dem einbinden von externen Bibliotheken, siehe dazu https://docs.platformio.org/en/latest/projectconf/sections/env/options/library/lib_extra_dirs.html
Jedoch würde ich das nicht empfehlen, wenn nicht die Libraries sehr speziell sind. Das Prinzip hinter PlatformIO ist, dass jedes OS die Libs runterladen kann und dort abspeichert, wo es passt. Wenn nun Extra-Libs angenommen werden, so kann es nachher zum Fehler kommen.

Gruß

Jörn

Peter

Peter

Vielen Dank für den tollen Artikel.
Wie ist es möglich, lokal gespeicherte Libraries (Arduino-IDE) in Platformio zu integrieren,, bzw. über die Suchfunktion entsprechenden Libraries zu filtern.
Beispiel: Bei der Suche nach einer Library mit dem Namen “Wire” werden mehr als 600 Treffer angezeigt. Auch solche in denen der Name “Wire” im Namen nicht enthalten ist.

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!

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery