Code einbinden Arduino / ESP8266

OP #6736933
Lesenswert?

Mit dem Vs2019 kann ich dateien einbinden und als variable im code 
benutzen.

Geht das für Arduino oder ESP8266 auch?

Ich habe nur das gefunden:
1
const char* s = R"EOL(...)EOL";

Wobei ich möchte, dass die ... durch eine externe Datei ersetzt werden 
die dann beim compilieren in diese variable eingebunden wird ohne das 
ich bei jeder änderung die "Datei" in Text umwandeln muss.

Ich benutze VS2019 mit VMicro (lizensiert).
Gast #6737057
Lesenswert?

Irgendwie konnte man das mit objcopy machen. Man wandelt die Datei ins 
*.o Format um und linkt sie dann zum Binary hinzu. Irgendwann in den 
90ern hatte ich das mal gemacht.

Eine einfachere Alternative ist, die Datei mittels
1
xxd -i Dateiname > dateiname.c
in ganz normalen C-Quelltext umzuwandeln. Das kann man prima ins 
Makefile einbinden. Nur nicht unter dem Spiele-Starter Windows, aber das 
ist ja auch für eine andere Zielgruppe vorgesehen. Siehe dazu 
https://www.cygwin.com/
OP #6737300
Lesenswert?

in C# kann ich die Dateien als Resource einbinden, im EXE kann ich diese 
dann verwenden aber nicht ändern. Ideal für ICONEN, Bilder oder Keys.

Leider sind in Arduino keine Ressource Library vorhanden.

Klar kann ich die mit xxd oder anders umwandeln und dann einbinden.
Das Problem ist aber man muss das jedesmal machen wenn die einzubindende 
Datei ändert. Mir wäre lieber ich könnte das ohne vorherige Umwandlung.

die Funktion mit R"EOL(...)EOL" funzt leider auch nicht.
Vermutlich nur mit anderen IDE's...

Ansonsten schreib ich halt schnell ein Programm welches die Dateien in 
ein Header umwandelt, dann kann ich die Includen... aber ist halt wieder 
mehr aufwand.
#6737369
Lesenswert?

A. D. schrieb:
> Ansonsten schreib ich halt schnell ein Programm welches die Dateien in
> ein Header umwandelt, dann kann ich die Includen... aber ist halt wieder
> mehr aufwand.

"Dateien" wie in "mehrere"?
Warum nimmst du nicht "FS.h", also SPIFFS oder LittleFS, und packst die 
Dateien as-is auf den ESP?
Grade für so Web-Server Anwendungen ist das oft viel praktischer.
Gast #6737399
Lesenswert?

A. D. schrieb:
> die Funktion mit R"EOL(...)EOL" funzt leider auch nicht.
> Vermutlich nur mit anderen IDE's...

Das tuts schon mit der Literal Form.
Aber es lassen sich kein unmodifizierten Textdateien einblenden.

Man kann sich behelfen.....
Die Textdatei endet bei mir auf *.h, damit sie mit der Arduino IDE 
erzeugt und bearbeitet werden kann

test.h
1
R"EOL(
2
Lorem ipsum dolor sit amet consectetuer et semper id augue a. 
3
Turpis Aenean dolor elit neque Sed Maecenas vel volutpat 
4
condimentum consequat. Egestas nisl malesuada Duis eu orci 
5
malesuada pulvinar justo pretium et. Tempus elit lacus 
6
interdum nec non tempus sit amet Fusce elit. Leo tellus 
7
eleifend tellus mauris laoreet tellus et cursus massa eget. 
8
Et mauris lacus nec mauris semper et vel.
9
)EOL"


irgendwas.ino
1
#include <Streaming.h> // die Lib findest du selber ;-)
2

3

4

5
using FlashStr = const __FlashStringHelper *;
6

7
const char teststring[] PROGMEM = 
8
#include "test.h" 
9
;
10

11
FlashStr lorem = reinterpret_cast<FlashStr>(teststring);
12

13

14
void setup() 
15
{
16
  Serial.begin(9600);
17

18
  Serial << FlashStr(teststring) << endl;
19
  
20
  Serial << lorem << endl;
21
}
22

23
void loop() 
24
{
25

26
}
OP #6737466
Lesenswert?

@Arduino Fanboy D. (ufuf)
Hi Danke für die schnelle Antwort.

"R"EOL..." funktioniert soweit mit direktem Text,
jedoch auf den Trick mit dem include wäre ich nicht gekommen
(ist aber ja logisch, hab wohl zu weit gesucht und war verblendet vom 
Resource C#).

Das ist für mich genau die richtige Lösung.
Danke, das spart mir eine menge Arbeit.

@Εrnst B. (ernst)
Danke, aber hab keine SDCARD und möchte lieber alles im Code.
Gast #6737631
Lesenswert?

A. D. schrieb:
> Das Problem ist aber man muss das jedesmal machen wenn die einzubindende
> Datei ändert.

Deswegen benutzt man Build Scripte die das automatisieren. Das gute alte 
Make würde die Umwandlung sogar nur dann ausführen, wenn notwendig, also 
wenn die Quelldatei geändert wurde.
#6737763
Lesenswert?

A. D. schrieb:
> Danke, aber hab keine SDCARD und möchte lieber alles im Code.

Beim ESP geht das im internen Flash, ganz ohne SD-Card.

https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html

d.H. du hast da sowieso 1-3 MB an Flash, die sonst ungenutzt bleiben 
würden. (ok, bei den ganz alten ESP-01 sind's nur 64k)

und dem Webserver erklärst du dann mit z.B.
1
  server.serveStatic("/", SPIFFS, "/htdocs/").setDefaultFile("index.html");
wo und wie er seine HTML/CSS/JS/Bild-Dateien findet.

Aber: ist nur ein Vorschlag, musst du natürlich nicht so machen.
OP #6737858
Lesenswert?

Εrnst B. schrieb:
> Beim ESP geht das im internen Flash, ganz ohne SD-Card.

Ja danke, mit dem ESP steh ich erst am Anfang, habe mal ein WiFiLogger 
geschrieben für dem MegaR3WiFi.

Dann kahm die Idee warum nicht gleich ein Web Server zu machen wo man 
das Ergebnis sofort ablesen kann ohne über ein Protokoll und Zusatz 
Programm zugehen.

Werde das sicher noch anschauen wäre ja vermutlich dann auch die 
richtigere Variante, Besten Dank.
OP #6739041
Lesenswert?

Εrnst B. schrieb:
>
1
>   server.serveStatic("/", SPIFFS, 
2
> "/htdocs/").setDefaultFile("index.html");
3
>

ist auch veraltet, serverStatic ist VOID und setDefaultFile ist im 
nirwana
genau wie SPIFFS

Leider veraltet und darduch unzählige Warnungen.
Stellt man auf LittleFS um funzt alles, jedoch können keine Daten 
hochgeladen werden weil das Tool einen Fehler in der IDE Anzeigt.
Zudem ist das Git Library unvollständig und enthält kein .jar das muss 
man sich nach stunden durchlesen selber noch besorgen...
Unfertig und unausgereift und fehlerhaft.

Etwas schwach und unausgereift das ganze...
(Meine Meinung, 1 Tag verloren)
#6739731
Lesenswert?

A. D. schrieb:
> serverStatic ist VOID

Nein, da kommt ein AsyncStaticWebHandler zurück.
1
AsyncStaticWebHandler& serveStatic(const char* uri, fs::FS& fs, const char* path, const char* cache_control = NULL);

und dieser bietet eine Methode
1
AsyncStaticWebHandler& setDefaultFile(const char* filename);


A. D. schrieb:
> genau wie SPIFFS

die serve-Static Methode nimmt ein fs::FS-Objekt. Davon sind sowohl 
SPIFFS als auch LittleFS abgeerbt, d.H. es geht beides.

A. D. schrieb:
> und enthält kein .jar

Häh? Was willst du mit einem JAR? Das ist C++, kein Java.



Du hast schon die richtige Bibliothek?
https://github.com/me-no-dev/ESPAsyncWebServer/

(platformio.ini:
1
[platformio]
2
data_dir = htdocs
3
[env]
4
platform = ...
5
board = ...
6
framework = arduino
7
board_build.filesystem = littlefs
8
lib_deps = ESP Async WebServer
)
#6739748
Lesenswert?

Arduino Fanboy D. schrieb:
> Denn die IDE ist sehr wohl ein Java
> Programm.

Ok, diese Krankheit benutz' ich nicht. Und der muss man ein JAR 
mitgeben, damit sie das Dateisystem erzeugen kann? Das ist dann 
tatsächlich unpraktisch.

Damit stellt sich dann eine neue Frage: wieso kommt der TE auf die Idee, 
dass eine Webserver-Bibliothek ein Tool zum Dateisystem-Erstellen 
mitliefern sollte? Das wär dann doch deutlich out-of-scope.
Gast #6739763
Lesenswert?

Εrnst B. schrieb:
> Und der muss man ein JAR
> mitgeben, damit sie das Dateisystem erzeugen kann?

Das ist eine Folge dessen, dass die ESP Boards Fremdboards sind. Da muss 
halt der Ersteller der Boarddefinition alle notwendigen Tools 
mitliefern.


Εrnst B. schrieb:
> Das ist dann
> tatsächlich unpraktisch.
Mag sein...
Es ist dennoch keine Schwäche der IDE, eher eine der Boarddefinition.
#6739768
Lesenswert?

Arduino Fanboy D. schrieb:
> Da muss
> halt der Ersteller der Boarddefinition alle notwendigen Tools
> mitliefern.

Ok, d.H. es ist kein Problem der Webserver-Bibliothek, sondern ein 
Problem des ESP32-Arudino-IDE-Plugins.


Nachdem der TE scheinbar ein VisualStudio-User (wohl VS2019, nicht 
VScode) ist: Vielleicht sollte er bei dieser IDE bleiben. Da kriegt er 
platformio eingebunden, und das regelt die ganzen Tool- und 
Bibliotheksabhängigkeiten, wie auch das Dateisystem-Erstellen und 
Dateisystem-Upload...

https://docs.platformio.org/en/latest/integration/ide/visualstudio.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren