Pfadangabe im Sketch zum aktuellen TFT_eSPI-Treiber (Konfigurationsdatei)

Hallo,
gibt es die Möglichkeit den verwendeten Treiber auch im Sketch anzugeben ?
Ich verwende div. unterschiedliche TFT sowie Controller und möchte den richtigen Treiber im Sketch angeben bzw. includieren.
Bisher ist mir das noch nicht gelungen.

In der Library nutze ich beispielsweise folgende Anweisung:
#include <User_Setups/Setup46a_GC9A01_ESP8266.h>
oder:
//#include <User_Setups/Setup70c_ESP32_C3_ILI9341.h>

Diese stehen hier:
D:\Arduino\Projekte\Programme\libraries\TFT_eSPI\User_Setup_Select.h
und werden jeweils bei Bedarf aktiviert.

Meine Frage, wie muss ich einen Pfad im Sketch zusammenstellen, damit es auch im Sketch ohne zusätzliche Angabe in der Library funktioniert ?

Versuche ähnlich diesem:
#include <D:/Arduino/Projekte/Programme/libraries/TFT_eSPI/User_Setups/Setup46a_GC9A01_ESP8266.h>
oder
#include "D:/Arduino/Projekte/Programme/libraries/TFT_eSPI/User_Setups/Setup46a_GC9A01_ESP8266.h"

funktionieren nicht.

Gruß Dieter

Bei Windows besteht der Pfad aus \ und da in Literalen \ ein escape-Zeichen ist, brauchst du zwei davon.

#include "D:\\Arduino\\Projekte\\Programme\\libraries\\TFT_eSPI\\User_Setups\\Setup46a_GC9A01_ESP8266.h"

Aber:
Wenn du mehrere Versionen hast und eine ganz spezielle verwenden willst, leg sie doch in den Sketch-Ordner und verwende die "" Schreibweise

#include "Setup46a_GC9A01_ESP8266.h" // sucht zuerst im Sketch - Ordner

Ok, danke dir.
Das mit den 2 \ hatte ich tatsächlich übersehen.
Grad getestet, da kommen mehrere Fehlermeldungen, die ich jetzt mal untersuchen muss.
Werde auch testen, ob das einsetzen im Sketchordner für mich praktikabel ist.
Danke erstmal.
Gruß Dieter

Nachtrag:
Ist wohl doch nicht so trivial.
Habe jetzt bedingt durch die Fehlersuche dies hier gefunden und werde mich damit mal auseinandersetzen.

Das sind tröstende Worte für mich, da ich an diesem Ansinnen schonmal grandios gescheitert bin.

Solltest Du Erfolg haben, wäre ich an der Lösung interessiert :slightly_smiling_face:

Ich werde versuchen, mich da durchzubeißen und dich danach informieren.
Ich hoffe, dass ich es schaffe,(ohne Zahnarztbesuch) :wink:

Hallo,

ich habe das ausprobiert. Eine eigene Lib aus dem Standardpfad auf irgendein Laufwerk verschoben und mit Pfad im Sketch inkludiert.

#include "C:\Users\xyz\Documents\AVRxDB_Pin\src\AVRxDB_Pin.h"

Der Sketch kompliert nach include Änderung mit Pfad unter Windows 11.

Normalerweise liegt diese Lib wie alle anderen auch im Standardpfad
... \arduino-1.8.19\portable\sketchbook\libraries\

Könnte allerdings scheitern wenn eine Lib weitere Libs verwendet die im Standardpfad der IDE liegen. Ich inkludiere allerdings assert.h in meiner Lib was keine Problem macht.

Das Sicherste ist allerdings wenn alle Libs im Sketchordner (sketchbook\libraries) liegen. Dann werden sie von der IDE auf jeden Fall gefunden.

Gedanke.
Es müsste noch eine Möglichkeit geben der IDE einen weiteren Suchpfad mitzugeben. Sodass man den ersten Teil des Pfades im include weglassen kann. Im Microchip-Studio kann man Suchpfade im Projekt anlegen. Das muss die IDE ja auch irgendwie machen. Der Sketchordner wird ja auch angegeben und darin Standardmäßig mittels < > statt " " gesucht. Man müsste sich dafür sicherlich die platform.txt anschauen.

Ich meine, wenn ich weiter darüber nachdenke, sollte das mit der Option funktionieren wie auch die avrLibStdCpp zur Verfügung gestellt wird.

-isystem "C:\avrToolchain\avrLibStdCpp_230924\include"

Also in der platform.local.txt bspw.

compiler.cpp.flags= -c -g -Os ... weitere Optionen ... -isystem "C:\avrToolchain\avrLibStdCpp_230924\include"

Damit steht der Pfad zur Verfügung. Im Sketch dann wieder das gewohnte kurze include <.h>.
Sollte funktionieren.

Danke für deine Ausführungen.
Das "Problem" was ich sehe, ist die Verquickung der eigendlichen Library, die im Libraryordner steht und der eigentlichen Konfigurationsdatei, die je nach Hardware differiert.
Nur diese Konfigurationsdatei soll aus der IDE zugewiesen werden.
Und das klappt mit den bisher getesteten und auch vorgeschlagenen Beispielen bisher nicht.
Auch der Vorschlag im obigen Link macht lt. Autor Probleme und wird daher von mir nicht weiter verfolgt.
Also werde ich wohl weiter suchen und probieren.

Hallo,

Theorie praktisch ausprobiert. Man kann mehrere Pfade angeben.

compiler.cpp.flags= -c -g -Os ... weitere Optionen ... -isystem "C:\avrToolchain\avrLibStdCpp_230924\include" -isystem "C:\Users\xyz\Documents\AVRxDB_Pin\src"

In src liegt dann die AVRxDB_Pin.h die im Sketch normal in Kurzform inkludiert wird.

Hallo,

kannst du nochmal anderes beschreiben was du wie machen möchtest?
Mittels der Option -isystem wird laut meines Wissens der IDE nur ein Suchpfad mitgeteilt. Das könntest du in allen platform.local.txt angeben. Was inkludiert wird entscheidet sich was im Sketch wirklich inkludiert wird.

Ok, ja meine Erklärung war sicher nicht zielführend.
Die Library "TFT_eSPI" liegt fest im Libraryordner.

Die Konfig-Datei liegt in einem Unterordner der Library:
#include <User_Setups/Setup46a_GC9A01_ESP8266.h>
und muß dort includiert werden.
Nicht wie ich geschrieben habe, in der IDE. Das war blödsinn.
Da macht das ja keinen Sinn.

Hallo,

dann sollte es ausreichend sein wenn der Pfad zum User_Setups Ordner mittels -isystem Option angegeben wird. Danach eine Konfig-Lib der Wahl inkludieren.
#include <Setup46a_GC9A01_ESP8266.h>

Ok, danke.
Ich werde es später testen und eine Rückmeldung geben.

Ich habe das mal getestet. Leider ohne Erfolg.
Folgende Eingaben stehen in der platform.local.txt:
compiler.cpp.flags= -c -g -Os -isystem "D:\Arduino\Projekte\Programme\libraries\TFT_eSPI\User_Setups"
und im Sketch steht:
#include <Setup46a_GC9A01_ESP8266.h>
Es funktioniert so nicht. Ist die platform.local.txt so ok ?

Ich tippe aber eher auf einen "Gedankenfehler". Das "#include" steht ja normalerweise in einem Teil der Library und kann doch so nicht als Aufruf im Sketch erfolgen ?
Oder sehe ich das falsch ?

Hast du eine Doku zu obiger Anweisung in der platform.local.txt ?

Hallo,

wird die Lib nicht gefunden?

Eine Doku gibt's zur platform.txt. platform-specification

Alles was in der platform.local.txt steht "überschreibt" das Original an Defines. Deswegen müssen die Zeilen komplett sein. Damit man nicht in der originalen platform.txt rumschreiben muss. Außer man legt sich Backups an. Die "local" kannste dir als individuelle Kopie vorstellen und diese Einträge/Zeilen werden verwendet. Alle Zeilen die nicht in der "local" stehen werden aus der "non local" verwendet.

Ich hatte das gestern ausprobiert, ich kann Libs inkludieren die im Pfad stehen.
Schau dir einmal die Zeile mit
compiler.cpp.flags=
in deiner originalen platform.txt an,
die nimmste rüber in die platform.local.txt und hängst das mit -isystem hinten ran.

OK, danke...ich werde es testen.

Ich würde mal in den Compiler-Flags direkt die übliche Include-Pfad-Syntax ausprobieren (großes I und Forward-Slashes):

-ID:/Arduino/Projekte/Programme/libraries/TFT_eSPI/User_Setups/

Ob das wegen des anderen Laufwerks so geht... wird man sehen.

Hallo,

paar Anmerkungen.
Erstmal sollte die Zeile bei ihm komplett sein, dann kann man andere Optionen probieren.
Ich bevorzuge systematische Fehlersuche. :wink:
Ob Backward oder Forward Slash ist unter Windows egal, kann beides, üblich ist unter Windows Backward Slash. Linux will nur Forward Slash.
Laufwerke sind egal, solange ein Buchstabe vergeben wurde, gilt auch für Netzlaufwerke.

Ich habe mich einen gewissen Teil des Abends mit dem Problem beschäftigt.
Du siehst das m.E. richtig.
Der Include des spezifischen Treibers steht in User_Setup_Select.h. Meine Versuche mit vorher geladenem User Setup à la ESP-IDF sind gescheitert.

Zusätzliche Pfade konnte ich nur in der platform.txt unterbringen (local hat bei mir zumindest beim ESP32 keine Wirkung):

##compiler.cpp.extra_flags=
compiler.cpp.extra_flags="-IC:\\Users\\wno\\Downloads\\Testdir"

Insofern kann ich mich hier anschließen:

Gute Nacht!

Ok, so war es auch bei meinen gesamten Versuchen.
Eine Fehlermeldung deutet eindeutig darauf, dass er die Hardware-Einstellungen nicht findet. Diese stehen in der im Sketch includierten Datei und diese findet er nicht.

Aktuell werde ich nicht daran weiter machen. Da fehlt mir dann doch die Zeit. :wink:

Danke für eure Hilfestellungen.

90% ja, 10% nein.
Mit dem Zusatzpfad in platform.txt wird das gefunden - aber es ist halt nur Pest statt Cholera, weil man immer noch ändern muss und es nicht im Sketch bestimmen kann.

Generisch in User_Setup_Select.h (alle anderen auskommentiert):

#include <myDriverOutside.h>
#include myDriverOutside

myDriverOutside.h:

#define myDriverOutside "Setup20_ILI9488.h" 
                      // ^^^  Dieser Header steht dann auch 'outside'

Dann kann die Library unverändert bleiben und nur am Ort "outside" muss die Definition für den zu verwendenden Treiber und das Setup je nach Hardware geändert werden.

1 Like