Zuletzt geändert am 8. Dezember 2024 um 20:08

PlatformIO Infosammlung

Version vom 8. Dezember 2024, 20:08 Uhr von Tut (Diskussion | Beiträge) (Credentials nutzen in der Datei platformio.ini)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Private Credentials (z.B. Wifi-Passwort) ablegen

.platformio Verzeichnis

Damit private Credentials wie Passwörter oder API-KEYs nicht versehentlich mit einem Projekt mitveröffentlicht werden, bietet es sich an, diese in einer speziellen Stelle im Home/User-Verzeichnis abzulegen und nur per Include ins Projekt zu holen.


Im Home (Unix/Linux/MacOS) bzw. User (Windows) Verzeichnis gibt es einen versteckten .platformio Ordner.

Der Pfad unter Windows ist: C:\Users\<USERNAME>\.platformio.

Unter Mac/Linux/Unix ist der Pfad ~/.platformio/. Beim Mac-Finder muss ggf. Command + Shift + . gedrückt werden, damit die versteckten Ordner sichtbar werden.

Credentials in C Header Dateien

Unter diesem .platformio Ordner nun folgende Ordnerstruktur mit der MyCreds.h-Datei erstellen:

.platformio/lib/MyCreds/MyCreds.h

Es können auch mehrere Dateien mit anderen Namen im MyCreds-Ordner liegen, z.B. eine MyCredsHackffm.h.

Diese Datei bekommt dann z.B. folgenden Inhalt:

#ifndef WIFI_SSID
#define WIFI_SSID "MyWiFiSSID"
#define WIFI_PASSWORD "MyWiFiPassword"
#endif

Im PlatformIO-Projekt kann man dann einfach auf diese Credentials zugreifen:

#include <WiFi.h>
#include <MyCreds.h>

...

void setup() {
  ...
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  ...
}

Credentials nutzen in der Datei platformio.ini

Es lassen sich Credentials auch in die platformio.ini includieren und nutzen. Das ist z.B. hilfreich um ein Upload-Passwort für ArduinoOTA anzugeben und für den Upload zu nutzen. Dazu im privaten .platformio Ordner nun folgende Ordnerstruktur mit der MyCreds.ini-Datei erstellen:

.platformio/lib/MyCreds/MyCreds.ini

Hier kommt nun das Upload-Passwort hinein, in dem man einfach eine Variable im [common] Abschnitt definiert:

[common]
private_upload_auth = "upload_password"

Im öffentlichen Projekt kann man nun diese Datei includieren und so die Variable nutzen, ohne das der Inhalt später z.B. im öffentlichen GIT landet. Auf den User-Ordner greift man über ${platformio.core_dir} zu. In der platformio.ini könnte dazu folgendes stehen wenn das Passwort für den OTA-Upload genutzt werden soll:

[platformio]
; include private credentials
extra_configs = ${platformio.core_dir}/lib/MyCreds/MyCreds.ini

[env]
framework = arduino
platform = espressif32@6.8.1
;this is to add the upload authentification password stored in the extra_config file
upload_flags = --auth=${common.private_upload_auth}
build_flags = -D DEF_UPLOAD_AUTH='${common.private_upload_auth}'
upload_protocol = espota
upload_port = 10.0.0.100

Per Precompiler-Konstante wurde die Variable in DEF_UPLOAD_AUTH übergeben und kann nun genutzt werden:

const char upload_auth[] = DEF_UPLOAD_AUTH;

  // irgendwo in der Setup-Routine...
  ArduinoOTA.setPassword(upload_auth);

Temporäre Dateien nicht archivieren (.gitignore / seafile-ignore.txt)

Bei jedem Kompilieren werden viele temporäre Dateien erzeugt, insbesondere werden die Bibliotheken komplett geladen. Das macht sich nicht gut, wenn man seine Projekte in GIT oder auch Cloudspeichern ablegen will - gerne kommen Cloudspeicher da durcheinander, wenn sehr viele Dateien beim Build-Prozess umgebaut werden. Das kann man mit entsprechenden Ingore-Dateien verhindern:

Seafile

Die seafile-ignore.txt Datei muss ins Hauptverzeichnis der Seafile-Bibliothek, wo irgendwo das PlatformIO-Projekt liegt. Der Inhalt bei mir:

# put in Seafile library root folder, otherwise will not have effect
*/.pio/
*/.git/

GIT

.gitignore

Die .gitignore Datei muss ins GIT-Projekt-Hauptverzeichnis. Ich nutze folgenden Inhalt:

.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

Github nutzen

Leider kenne ich keine gute Möglichkeit ein bestehendes Platform.io Projekt direkt nach Github zu bringen. Der folgende Weg funktioniert aber:

  • Neues nahezu leeres Projekt in Github anlegen, dabei werden nur die Dateien LICENSE und README.md erzeugt
  • Von diesem Projekt den HTTPS Link kopieren
  • Unter Platformio - Quick Access - Miscellaneous - Clone Git Project wählen, dann den Link oben einfügen.
  • Als Speicherort reicht ein Ordner wie HackffmGIT, denn darin wird automatisch ein Unterordner mit dem Gitnamen erstellt.
  • Anschliessend kann man in dieses Projekt die ganzen Projekt-Dateien per Drag'n'Drop direkt in VSCode hinzufügen. Beim Anlegen und Speichern der platformio.ini wird daraus dann auch das Platformio-Projekt und die Build-Ziele erscheinen.
  • Unter dem Source Control Symbol ganz links können nun GIT-Operationen durchgeführt werden. Hier erscheinen geänderte bzw. hinzugefügte Dateien. Man kann diese Adden oder einfach Commit drücken und die Frage entsprechend beantworten, so dass alles dem Repo hinzugefügt wird. Ein weiterer Klick Synct das lokale GIT-Repo mit dem Entfernten.

PlatformioCloneGit.png