PlatformIO Infosammlung: Unterschied zwischen den Versionen
Tut (Diskussion | Beiträge) |
Tut (Diskussion | Beiträge) (→Credentials nutzen in der Datei platformio.ini) |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Private Credentials (z.B. Wifi-Passwort) ablegen == | == 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. | Im Home (Unix/Linux/MacOS) bzw. User (Windows) Verzeichnis gibt es einen versteckten '''.platformio''' Ordner. | ||
Zeile 6: | Zeile 10: | ||
Unter Mac/Linux/Unix ist der Pfad '''~/.platformio/'''. Beim Mac-Finder muss ggf. '''Command + Shift + .''' gedrückt werden, damit die versteckten Ordner sichtbar werden. | Unter Mac/Linux/Unix ist der Pfad '''~/.platformio/'''. Beim Mac-Finder muss ggf. '''Command + Shift + .''' gedrückt werden, damit die versteckten Ordner sichtbar werden. | ||
− | Unter diesem '.platformio' Ordner nun folgende Ordnerstruktur mit der MyCreds.h-Datei erstellen: | + | === Credentials in C Header Dateien === |
+ | Unter diesem '''.platformio''' Ordner nun folgende Ordnerstruktur mit der MyCreds.h-Datei erstellen: | ||
+ | <pre>.platformio/lib/MyCreds/MyCreds.h</pre> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <pre> | ||
+ | #ifndef WIFI_SSID | ||
+ | #define WIFI_SSID "MyWiFiSSID" | ||
+ | #define WIFI_PASSWORD "MyWiFiPassword" | ||
+ | #endif | ||
+ | </pre> | ||
+ | |||
+ | Im PlatformIO-Projekt kann man dann einfach auf diese Credentials zugreifen: | ||
+ | <pre> | ||
+ | #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()); | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | === 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: | ||
+ | <pre>.platformio/lib/MyCreds/MyCreds.ini</pre> | ||
+ | |||
+ | Hier kommt nun das Upload-Passwort hinein, in dem man einfach eine Variable im [common] Abschnitt definiert: | ||
+ | <pre> | ||
+ | [common] | ||
+ | private_upload_auth = "upload_password" | ||
+ | </pre> | ||
+ | |||
+ | 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: | ||
+ | <pre> | ||
+ | [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 | ||
+ | </pre> | ||
+ | |||
+ | Per Precompiler-Konstante wurde die Variable in DEF_UPLOAD_AUTH übergeben und kann nun genutzt werden: | ||
+ | <pre> | ||
+ | const char upload_auth[] = DEF_UPLOAD_AUTH; | ||
+ | |||
+ | // irgendwo in der Setup-Routine... | ||
+ | ArduinoOTA.setPassword(upload_auth); | ||
+ | </pre> | ||
+ | |||
+ | == 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: | ||
+ | <pre> | ||
+ | # put in Seafile library root folder, otherwise will not have effect | ||
+ | */.pio/ | ||
+ | */.git/ | ||
+ | </pre> | ||
+ | |||
+ | == GIT == | ||
+ | === .gitignore === | ||
+ | Die .gitignore Datei muss ins GIT-Projekt-Hauptverzeichnis. Ich nutze folgenden Inhalt: | ||
+ | <pre> | ||
+ | .pio | ||
+ | .vscode/.browse.c_cpp.db* | ||
+ | .vscode/c_cpp_properties.json | ||
+ | .vscode/launch.json | ||
+ | .vscode/ipch | ||
+ | </pre> | ||
+ | |||
+ | === 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. | ||
+ | |||
+ | [[Datei:PlatformioCloneGit.png|400px]] |
Aktuelle Version vom 8. Dezember 2024, 20:08 Uhr
Inhaltsverzeichnis
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.