und falle gleich mal mit der Tür ins Haus.
Die Lage:
Ich bin ein Anfänger.
Aber wie bei anderen Fremdsprachen ähnlich, verstehe ich den Code zu großen Teilen, wenn ich ihn sehe. Wenn ich ihn dann anpassen möchte, gibt es immer wieder die kleinen Haken die mir nicht auffallen und nichts funktioniert. Daher erspare ich euch den Code den ich bisher zusammengeknotet habe.
Das Problem ist, dass mit die Zeit für mein Projekt davon läuft.
Ich würde mich sehr freuen, wenn mir jemand nach 3 vergeblichen Monaten bei der Lösung helfen könnte.
Und ja, mir ist klar, dass ein Forum grundsätzlich nur Hilfe zur Selbsthilfe gibt und ich den Großteil selbst machen soll. Nur ist der Grad der Verzweiflung bereits so hoch, dass ich hoffe für das aktuelle Problem einen Helfer zu finden, der sich bereit erklärt das Ganze einmal lauffähig zu programmieren.
Ich denke/hoffe, dass die Lösung auch für nen erfahrenen Einsteiger schon machbar ist.
Hier nur mal grob ein Paar Eckpunke, welche das Projekt umfassen.
Ich muss einen weissen LED-Streifen über nen Verstärker ansteuern.
Dabei soll der ESP32 als Accesspoint eine Weboberfläche bereitstellen, welche die aktuelle LED-Frequenz und das aktuelle Tastverhältnis (PWM) anzeigt.
Daneben sollen jeweils ein Eingabefeld bereitstehen, in welchem ich beide Werte eingeben und ändern kann.
Die Frequenz soll von 0Hz bis ca. 5000Hz und das Tastverhältnis von 0-100% einstellbar sein.
Als Option wäre die Ausgabe einer unkomplizierten Umrechnung der Frequenz in eine andere Größe schön.
Ich hoffe, dass ich hiermit keinem auf den Schlips trete und jemanden finde, der mir helfen würde.
Vorschlag gehe das Projekt in Teilaufgaben an.
Erst mal nur die Sache mit den Led´s Dazu kannst Du ja erst mal beide Parameter ( Frequenz und PWM Wert im code vorgeben. Das scheint mit erst mal einfacher und Du kannst noch ein bisschen üben.
Dann packst Du das Thema mit dem Webserver an. Anzeige von den Werten , Versenden der eingegebene Werte ( Form - sende Buton ). Java-Script und fetch geht auch , ist aber für zwei Variable etwas übertrieben.
Ich sehe es wie der Rentner.
Mach dir einen Plan und gehe Schrittweise vor.
Was mir so adhoc einfällt brauchst du 5 Sachen:
Webserver
HTML Eingabeformular für deine zwei Werte
webresource am Server, die die Daten vom Eingabeformulare entgegeneben kann (also im Prinzip auch nur eine "Seite" die eben auch die zwei Parameter auslesen kann
die Konfiguration als AP (sind dam schluss nur ein paar Zeilen, kannst als letztes machen)
Hardwareansteuerung
im einfachsten Fall eine Funktion, der du "Hz" und "Tastverhältnis" übergibst, und dann mit dem LED Streifen macht was es soll
womit du anfängst ist eigentlich egal, ich würde wahrscheinlich mit dem HTML Formular mit dem Webserver Beispiel anfangen und mal das Formular herrichten.
Dann die Übernahme der Werte
Dann die HW ansteuern
und am Schluss eben den AP aktivieren.
Mach dir also Gedanken über deinen Plan, schreib auf was du machen willst und stell dann eine erste konkrete Frage. womit wir dir Helfen sollen.
Wenn ich das richtig verstanden habe, müsste ich nun die Werte aus den html-Eingabefeldern abfragen und dann bei einer Änderung in die betreffende Variable übertragen.
Aber dabei hatte ich die größten Verständnisprobleme.
Hallo,
wenn Du die Berechnung der Geschwindigkeiten in den [] Klammern mit einem Java Skript auf der HTML Seite machen willst , dann kannst Du auch überlegen die Daten mit Fetch zu holen und zu senden. Dann kann die HTML Seite statisch sein und dann bietet sich das Filesystem des ESP32 an. Aber es ist wie immer es gibt viele Wege nach Rom.
So, den gestrigen Abend habe ich mich mal mit Fips sehr aufschlussreichen Seite beschäftigt. Vielen Dank für den Hinweis.
Und @agmue : heute sehe ich das mit SPIFFS etwas anders und denke, dass es doch sinnvoller wäre es zu nutzen.
Ich habe die Tabs, welche ich für mein Projekt als nützlich herausgefiltert habe mal zusammengeschoben. Im Prinzip sind das erstmal 1:1 die Tabs von Fips. Ich habe lediglich die benutzten Tabs einkommentiert.
Hier nun die freundliche Fehlermeldung:
C:\...\Webserver\Webserver.ino: In function 'void setup()':
Webserver:53:10: error: 'Spiffs' was not declared in this scope
Spiffs();
^
Webserver:55:9: error: 'Input' was not declared in this scope
Input();
^
Webserver:56:14: error: 'OnBoardLed' was not declared in this scope
OnBoardLed();
^
----------------------------------------------------------------------------------
C:\...\Webserver\Webserver.ino: In function 'void loop()':
Webserver:80:10: error: 'Spiffs' was not declared in this scope
Spiffs();
^
Webserver:82:9: error: 'Input' was not declared in this scope
Input();
^
Webserver:83:14: error: 'OnBoardLed' was not declared in this scope
OnBoardLed();
^
----------------------------------------------------------------------------------
C:\...\Webserver\OnBoardLed.ino: In function 'void onboardLed()':
OnBoardLed:29:11: error: 'LED_BUILTIN' was not declared in this scope
pinMode(LED_BUILTIN, OUTPUT); // OnBoardLed Esp32
^
C:\...\Webserver\OnBoardLed.ino: In lambda function:
OnBoardLed:32:20: error: 'LED_BUILTIN' is not captured
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // LED umschalten
^
C:\...\Webserver\OnBoardLed.ino:30:23: note: the lambda has no capture-default
server.on("/bled", []() {
^
C:\...\Webserver\OnBoardLed.ino:29:11: note: '<typeprefixerror>LED_BUILTIN' declared here
pinMode(LED_BUILTIN, OUTPUT); // OnBoardLed Esp32
^
----------------------------------------------------------------------------------
OnBoardLed:32:46: error: 'LED_BUILTIN' is not captured
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // LED umschalten
^
C:\...\Webserver\OnBoardLed.ino:30:23: note: the lambda has no capture-default
server.on("/bled", []() {
^
C:\...\Webserver\OnBoardLed.ino:29:11: note: '<typeprefixerror>LED_BUILTIN' declared here
pinMode(LED_BUILTIN, OUTPUT); // OnBoardLed Esp32
^
OnBoardLed:35:48: error: 'LED_BUILTIN' is not captured
server.send(200, "text/plain", digitalRead(LED_BUILTIN) ? "Aus" : "Ein");
^
C:\...\Webserver\OnBoardLed.ino:30:23: note: the lambda has no capture-default
server.on("/bled", []() {
^
C:\...\Webserver\OnBoardLed.ino:29:11: note: '<typeprefixerror>LED_BUILTIN' declared here
pinMode(LED_BUILTIN, OUTPUT); // OnBoardLed Esp32
^
----------------------------------------------------------------------------------
Mehrere Bibliotheken wurden für "WebServer.h" gefunden
Benutzt: C:\Users\...\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WebServer
Nicht benutzt: C:\Users\...\Documents\Arduino\libraries\WebServer-esp32-master
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
Benutzt: C:\Users\...\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi
Mehrere Bibliotheken wurden für "ArduinoOTA.h" gefunden
Benutzt: C:\Users\...\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\ArduinoOTA
Nicht benutzt: C:\Users\...\Documents\Arduino\libraries\ArduinoOTA-master
exit status 1
----------------------------------------------------------------------------------
'Spiffs' was not declared in this scope
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
// Anmerkungen von mir:
- habe diese Bordverwalter-URL eingesetzt: https://dl.espressif.com/dl/package_esp32_index.json
- Im Bordverwalter das hier installiert: esp32 by Espressif Systems Version 1.0.6
- Dieses Board ausgewählt: "ESP32 Dev Module"
- Und diese Tabs von Fips eingefügt und lediglioch die benutzten Tabs Enkommentiert:
- Webserver
- Connect
- Input
- OnBoardLed
- Spiffs
- Wenn ich "Spiffs" auskommentiere wird der nächste Tab - glaube "Input" war das - als "was not declared in this scope" ausgewiesen
Hier noch ein Screenshot von Arduino 1.8.15, welcher den Webserver-Code und die eingefügten Tabs zeigt:
ESP_onfocus.ino ist mein Name, da Webserver.ino schon anderweitig verwendet.
Anpassungen in ESP_onfocus.ino (bei Dir Webserver.ino):
void setup() {
DEBUG_B(115200);
DEBUG_F("\nSketchname: %s\nBuild: %s\t\tIDE: %d.%d.%d\n\n", __FILE__, __TIMESTAMP__, ARDUINO / 10000, ARDUINO % 10000 / 100, ARDUINO % 100 / 10 ? ARDUINO % 100 : ARDUINO % 10);
spiffs();
admin();
Connect();
// setupTime();
// espboardLed();
onboardLed();
// bme280();
// dht22(); // Die Tabs die du nutzen möchtest, musst du Einkommentieren
// bh1750();
// setupSchaltUhr();
setupModify();
ArduinoOTA.onStart([]() {
//save(); //Einkommentieren wenn Werte vor dem Update gesichert werden sollen
});
ArduinoOTA.begin();
server.begin();
DEBUG_P("HTTP Server gestartet\n\n");
}
In OnBoardLed.ino habe ich noch #define LED_BUILTIN 13 ergänzt, dann bekomme ich diese Ausgabe:
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-spi.c: In function 'spiTransferBytesNL':
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-spi.c:922:39: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
uint8_t * last_out8 = &result[c_longs-1];
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-spi.c:923:40: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
uint8_t * last_data8 = &last_data;
^
Der Sketch verwendet 826958 Bytes (63%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 42896 Bytes (13%) des dynamischen Speichers, 284784 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.
Diese Dateien im Dateisystem:
Wenn ich input.html aufrufe, kann ich die Werte ändern:
Ich kann jetzt auch fehlerfrei kompilieren, aber nur wenn ich "input();" auskommentiere.
Ist es einkommentiert, erhalte ich den Fehler: 'input' was not declared in this scope
Die Dateien für ins Dateisystem kann ich ja erst auf den ESP laden, wenn dieser läuft, richtig?
Oder sollten die Dateien vorher schon in dem Projektordner z.B. in einem speziellen Unterordner auf dem PC abgelegt werden?
"input" war mein Fehler. Hab nicht verstanden, dass setupModify das übernimmt. Daher hatte ich getreu des Kommentars "// Die Tabs die du nutzen möchtest, musst du Einkommentieren" den "input" nochmal eingefügt.
Jetzt hab ich den Sketch erfolgreich auf einen ESP32 (Wroom) hochgeladen. Außer nem minütlichen Reebot und einigen für mich unverständlichen Zeilen passiert da im Monitor leider nichts. Ich kann kein Accesspoint namens "ESP32AP" im Wifi finden.
Was mach ich denn nun schon wieder falsch?!
Hier der Monitor-Output:
Rebooting...
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
abort() was called at PC 0x401513f3 on core 1
ELF file SHA256: 0000000000000000
Backtrace: 0x40088644:0x3ffb1e40 0x400888c1:0x3ffb1e60 0x401513f3:0x3ffb1e80 0x4015143a:0x3ffb1ea0 0x40150b13:0x3ffb1ec0 0x40150e4a:0x3ffb1ee0 0x40150bb1:0x3ffb1f00 0x400d8467:0x3ffb1f20 0x400d92f2:0x3ffb1f60 0x400d324f:0x3ffb1f80 0x400dc289:0x3ffb1fb0 0x400898d2:0x3ffb1fd0
Rebooting...
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4