Forum: Mikrocontroller und Digitale Elektronik Es erscheint nichts auf dem Seriellen Monitor?


von Testing T. (testing19)


Lesenswert?

Ich versuche herauszufinden, ob ich mit dem angegebenen Serial Monitor 
der Arduino IDE Variablen setzen kann

Ich habe diesen Code:
1
#include <Preferences.h>
2
Preferences preferences;
3
4
const char* roomname_long = "Roomname Long";
5
const char* roomname_short = "RL";
6
const char* roomname_long_test = "test";
7
String roomname;
8
void setup() {
9
  Serial.begin(115200);
10
  preferences.begin("licence",false);
11
  preferences.begin("credentials", false);
12
  preferences.putString("roomname_long", roomname_long);
13
  preferences.putString("roomname_short", roomname_short);
14
  if (!preferences.isKey("roomname_long")) {
15
    preferences.putString("roomname_long", roomname_long_test);
16
  }
17
  Serial.println(roomname_long);
18
  Serial.println(roomname_short);
19
  preferences.end();
20
}

Also setze ich jetzt Variablen mit String drin. Aber gibt es eine 
Möglichkeit, die Variablen zum Beispiel mit dem seriellen Monitor zu 
setzen.

Ich möchte einen neuen Raumnamen_lang setzen, also schreibe ich in den 
Monitor so etwas wie:
1
#roomname_long Lange testen
Und die Antwort wäre:
1
~@roomname_long Lange testen
Und wenn ich die Lesetaste auf meinem Esp32 drücke, sollte es mir den 
neuen Namen für roomname_long geben

ist das möglich?

von quotendepp (Gast)


Lesenswert?

1
/opt/arduino-1.8.19/arduino-builder -dump-prefs -logger=machine -hardware /opt/arduino-1.8.19/hardware -tools /opt/arduino-1.8.19/tools-builder -tools /opt/arduino-1.8.19/hardware/tools/avr -built-in-libraries /opt/arduino-1.8.19/libraries -libraries /home/daniel/Arduino/libraries -fqbn=arduino:avr:mega:cpu=atmega2560 -ide-version=10819 -build-path /tmp/arduino_build_142490 -warnings=default -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.arduinoOTA.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.avrdude.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/opt/arduino-1.8.19/hardware/tools/avr -verbose /tmp/foo/foo.ino
2
/opt/arduino-1.8.19/arduino-builder -compile -logger=machine -hardware /opt/arduino-1.8.19/hardware -tools /opt/arduino-1.8.19/tools-builder -tools /opt/arduino-1.8.19/hardware/tools/avr -built-in-libraries /opt/arduino-1.8.19/libraries -libraries /home/daniel/Arduino/libraries -fqbn=arduino:avr:mega:cpu=atmega2560 -ide-version=10819 -build-path /tmp/arduino_build_142490 -warnings=default -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.arduinoOTA.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.avrdude.path=/opt/arduino-1.8.19/hardware/tools/avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/opt/arduino-1.8.19/hardware/tools/avr -verbose /tmp/foo/foo.ino
3
Using board 'mega' from platform in folder: /opt/arduino-1.8.19/hardware/arduino/avr
4
Using core 'arduino' from platform in folder: /opt/arduino-1.8.19/hardware/arduino/avr
5
Detecting libraries used...
6
/opt/arduino-1.8.19/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR -I/opt/arduino-1.8.19/hardware/arduino/avr/cores/arduino -I/opt/arduino-1.8.19/hardware/arduino/avr/variants/mega /tmp/arduino_build_142490/sketch/foo.ino.cpp -o /dev/null
7
Alternatives for Preferences.h: []
8
ResolveLibrary(Preferences.h)
9
foo:1:10: fatal error: Preferences.h: No such file or directory  -> candidates: []
10
11
 #include <Preferences.h>
12
          ^~~~~~~~~~~~~~~
13
compilation terminated.
14
exit status 1
15
Preferences.h: No such file or directory

von Sebastian R. (sebastian_r569)


Lesenswert?

Testing T. schrieb:
> ist das möglich?

Jap. Das ist möglich.

von Stefan F. (Gast)


Lesenswert?

Sicher geht das. Du musst dir ein Befehlsformat ausdenken und ein 
Programm schreiben das darauf reagiert. Denkbar wäre zum Beispiel:

set roomname_long=Schlafzimmer
set roomname_short=SZ

In deiner Hauptschleife empfängst du zeilenweise vom Seriellen port. 
Wenn die Zeile mit "set " beginnt, dann splittest du den Rest am "=" 
Zeichen und speicherst es in preferences ab.

Die Klassen Serial und String haben alles, was du dafür brauchst.

von Testing T. (testing19)


Lesenswert?

What do you tried ?

von quotendepp (Gast)


Lesenswert?

der langen Rede kurzer (Un)Sinn:
* was sind diese Preferences?
* was willst du überhaupt (genau) machen?
* warum verwendest du nicht Serial.read()?

von Andreas (Gast)


Lesenswert?


von Testing T. (testing19)


Lesenswert?

.. Könntest du mir bitte dabei helfen. Ich bin etwas überfordert. Es 
klingt nämlich nicht so schwer, doch eine Hilfe würde gut tun, wenn es 
natürlich möglich ist.

von Andreas (Gast)


Lesenswert?

quotendepp schrieb:
> der langen Rede kurzer (Un)Sinn:
> * was sind diese Preferences?

https://unsinnsbasis.de/esp32-preferences/

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Sicher geht das. Du musst dir ein Befehlsformat ausdenken und ein
> Programm schreiben das darauf reagiert. Denkbar wäre zum Beispiel:
>
> set roomname_long=Schlafzimmer
> set roomname_short=SZ
>
> In deiner Hauptschleife empfängst du zeilenweise vom Seriellen port.
> Wenn die Zeile mit "set " beginnt, dann splittest du den Rest am "="
> Zeichen und speicherst es in preferences ab.
>
> Die Klassen Serial und String haben alles, was du dafür brauchst.

.. Könntest du mir bitte dabei helfen. Ich bin etwas überfordert. Es
klingt nämlich nicht so schwer, doch eine Hilfe würde gut tun, wenn es
natürlich möglich ist.

von Testing T. (testing19)


Lesenswert?

quotendepp schrieb:
> der langen Rede kurzer (Un)Sinn:
> * was sind diese Preferences?
> * was willst du überhaupt (genau) machen?
> * warum verwendest du nicht Serial.read()?

Das habe ich ja beschrieben, ich möchte keine vorgefertigten Variablen 
haben. Ich möchte die Variablen mittels Serieller Schnittstelle 
eingeben.

von Stefan F. (Gast)


Lesenswert?

Da es um einen ESP geht willst du wahrscheinlich nicht während der 
Eingabe blockieren, bis der User die Enter Taste gedrückt hat.

Stattdessen sammelst du die Eingabe Zeichenweise in einen Puffer ein. 
Und wenn dann irgendwann das Zeilenende '\n' kommt, dann wertest du die 
bis dahin empfangene Zeile aus.

Eventuell magst du von 
http://stefanfrings.de/esp8266/index.html#tcpsketch abgucken. Da 
empfange ich Kommandos per Netzwerk, aber das Prinzip bleibt gleich. 
Schau dir an, wie ich in loop() immer wieder process_incoming_tcp() 
aufrufe, und wie dort append_until() benutzt wird, um die einzelnen 
Textfragmente einzusammeln bis die Zeile abgeschlossen wurde.

Das gleiche Prinzip geht auch seriell, denn auch die Serial Klasse ist 
ein Stream.

von Sebastian R. (sebastian_r569)


Lesenswert?

Testing T. schrieb:
> Könntest du mir bitte dabei helfen. Ich bin etwas überfordert. Es
> klingt nämlich nicht so schwer, doch eine Hilfe würde gut tun, wenn es
> natürlich möglich ist.

1. Verstehen, was Serial.read() ist und was es tut
2. Einzelne Zeichen empfangen und je nach Zeichen etwas tun (LED 
an/aus,...)
3. Strings empfangen und je nach String etwas tun (LED a/aus)
4. Strings in Befehle und Werte zerlegen ("LED1 an", "LED1 aus") und 
entsprechend auswerten
5. Strings empfangen, in Befehle und Werte anhand eines eigenen 
Protokolls zerlegen und die empfangenen Daten/Werte entsprechend in die 
dazugehörigen Variablen räumen

von Testing T. (testing19)


Lesenswert?

> 1. Verstehen, was Serial.read() ist und was es tut
> 2. Einzelne Zeichen empfangen und je nach Zeichen etwas tun (LED
> an/aus,...)
> 3. Strings empfangen und je nach String etwas tun (LED a/aus)
> 4. Strings in Befehle und Werte zerlegen ("LED1 an", "LED1 aus") und
> entsprechend auswerten
> 5. Strings empfangen, in Befehle und Werte anhand eines eigenen
> Protokolls zerlegen und die empfangenen Daten/Werte entsprechend in die
> dazugehörigen Variablen räumen

Ich verstehe Serial.read()..
Ich habe aber nichts mit LED´s zutun es geht rein um das Prinzip wie ich 
ein Platzhalter für eine Variable schaffe und diese dann benenne oder 
ähnlich.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:

> http://stefanfrings.de/esp8266/index.html#tcpsketch abgucken. Da


Danke erstmal, müsste ich mir in Ruhe mal ansehen. Da geht´s ja mehr um 
WIFI Verbindung.. bei mir ist es ja recht klein gehalten ich möchte nur 
Variablen Name füllen mit Werten

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> .. Könntest du mir bitte dabei helfen. Ich bin etwas überfordert. Es
> klingt nämlich nicht so schwer, doch eine Hilfe würde gut tun, wenn es
> natürlich möglich ist.

1. Schritt Google aufrufen
2. Schritt ins Suchfeld eingeben wahlweise Tutotial, Beispiel, Example 
in Kombination mit dem Suchbegriff.
3. Seite Aufrufen
4. Sich freuen, das man etwas selbst gefunden hat
5. Sind noch Unklarheiten vorhanden hier im Forum fragen

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> .. Könntest du mir bitte dabei helfen. Ich bin etwas überfordert. Es
>> klingt nämlich nicht so schwer, doch eine Hilfe würde gut tun, wenn es
>> natürlich möglich ist.
>
> 1. Schritt Google aufrufen
> 2. Schritt ins Suchfeld eingeben wahlweise Tutotial, Beispiel, Example
> in Kombination mit dem Suchbegriff.
> 3. Seite Aufrufen
> 4. Sich freuen, das man etwas selbst gefunden hat
> 5. Sind noch Unklarheiten vorhanden hier im Forum fragen

Echt ja :)

von Testing T. (testing19)


Lesenswert?

Ich habe jetzt mal was versucht, doch leider klappt es nicht wie 
gewollt.
1
#include <Preferences.h>
2
3
Preferences preferences;
4
5
String roomname_long;
6
7
8
void setup() {
9
  Serial.begin(115200);
10
 
11
}
12
13
void loop() {
14
  if(Serial.available()){
15
    roomname = Serial.read();
16
    Serial.print("Roomname_long: ");
17
    Serial.println(roomname_long);
18
  }
19
}

Wenn ich dann etwas im Seriellen Monitor eingebe kommt nur sehr viele 
Anzeigen von Roomname_long:

Wie kriege ich es denn hin, dass ich im Monitor eingebe z.B 
Roomname_long: (Hier der Name)

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> roomname = Serial.read();

wo ist roomname definiert?

Testing T. schrieb:
> Serial.println(roomname_long);

Wolltest du nicht roomname_long verändern durch deine Eingabe?

von Klaus S. (kseege)


Lesenswert?

Das Gesuchte nennt sich meist "Serial Monitor", "Command Decoder" oder 
"Serial Interpreter" und ist die Grundzutat für alle Basic- oder 
Forth-Systeme.

In der Dauerschleife fragt man ab, ob ein Zeichen angekommen ist. Wenn 
ja, macht man, was nötig ist um dieses Zeichen zu verarbeiten. Wenn nix 
angekommen ist, macht man auch nix.

Wer viel Platz auf dem Mikrocontroller hat, legt den ganzen Interpreter 
auf den uC. Wer wenig Platz hat (< 1 KByte) schreibt einen minimalen 
1-Zeichen-Interpreter und hält den Großteil der Information auf einem 
als Bedienterminal funktionierenden PC-Programm.

Dient außerdem hervorragend für alle mit der Arduino-IDE programmierten 
uCs als Ersatz für den nicht vorhanden Debugger.

Gruß
Klaus (der soundsovielte)

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> roomname = Serial.read();
>
> wo ist roomname definiert?
>
> Testing T. schrieb:
>> Serial.println(roomname_long);
>
> Wolltest du nicht roomname_long verändern durch deine Eingabe?

Oh stimmt :)

von Cyblord -. (cyblord)


Lesenswert?

Also mit einem richtigen Debugger kann man jederzeit jede Variable 
ändern die man möchte und sogar noch jede Variable anschauen.
Und auch noch das Programm Zeile für Zeile durchsteppen.

Dieses unsägliche Predigen von Debugging via serieller Schnittstelle 
führt zu solchen völlig falschen Ansätzen.

: Bearbeitet durch User
von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> roomname = Serial.read();
>
> wo ist roomname definiert?
>
> Testing T. schrieb:
>> Serial.println(roomname_long);
>
> Wolltest du nicht roomname_long verändern durch deine Eingabe?

Roomname_long: 82
Roomname_long: 84
Roomname_long: 101
Roomname_long: 115
Roomname_long: 116
Roomname_long: 10

Die Antwort auf dem Monitor ist diese.. wie kommts

von Testing T. (testing19)


Lesenswert?

Cyblord -. schrieb:
> Also mit einem richtigen Debugger kann man jederzeit jede Variable
> ändern die man möchte und sogar noch jede Variable anschauen.
> Und auch noch das Programm Zeile für Zeile durchsteppen.
>
> Dieses unsägliche Predigen von Debugging via serieller Schnittstelle
> führt zu solchen völlig falschen Ansätzen.

Ich möchte nichts debuggen .. Im Grunde genommen werde ich mit einem 
Terminal am Ende arbeiten, womit ich die Variablen werte setzen kann.
Ich möchte nur ein Grundbaustein anfertigen, womit Terminal weiß ok der 
Benutzer hat Roomname_long angegeben also ersetze ich die Variable 
Roomname_long mit dem gegebenen Wert.

von Testing T. (testing19)


Lesenswert?

So mein Code sieht mittlerweile so aus.
1
#include <Preferences.h>
2
3
Preferences preferences;
4
5
String roomname_long;
6
7
void setup() {
8
  Serial.begin(115200);
9
  preferences.begin("lizenzgeber",false);
10
11
12
13
14
  preferences.end();
15
}
16
17
void loop() {
18
  if(Serial.available()){
19
    roomname_long = Serial.readString();
20
    Serial.print("Roomname_long: ");
21
    Serial.println(roomname_long);
22
  }
23
}

Wie setze ich jetzt roomname_long in preferences ein ..
Und wie kriege ich es hin, dass ich selber wähle im Monitor welche 
Variable ich ändern möchte.

Das Ziel welches ich erreichen möchte ist immernoch, wenn ich 
roomname_long: Test
eingebe soll es die Variable roomname_long mit Test füllen

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Da geht´s ja mehr um WIFI Verbindung.

Wie gesagt geht es darum, Eingaben von einem Stream einzusammeln, und 
der serielle Port ist genau wie eine TCP Verbindung ebenfalls ein 
Stream.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Testing T. schrieb:
>> Da geht´s ja mehr um WIFI Verbindung.
>
> Wie gesagt geht es darum, Eingaben von einem Stream einzusammeln, und
> der serielle Port ist genau wie eine TCP Verbindung ebenfalls ein
> Stream.

Ich komme aber nicht mehr weiter mit dem, was ich zuletzt als Code 
gepostet habe.

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Die Antwort auf dem Monitor ist diese.. wie kommts

Weil du jedes Zeichen einzeln liest ohne sie zeilenweise zu einem String 
zusammen zu fügen. Genau für diese Aufgabe habe ich dir mein Beispiel 
mit append_until() gezeigt.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Testing T. schrieb:
>> Die Antwort auf dem Monitor ist diese.. wie kommts
>
> Weil du jedes Zeichen einzeln liest ohne sie zeilenweise zu einem String
> zusammen zu fügen. Genau für diese Aufgabe habe ich dir mein Beispiel
> mit append_until() gezeigt.

Das ist doch schon längst Geschichte :)
1
void loop() {
2
    
3
  if(Serial.available()){
4
    roomname_long = Serial.readString();
5
    Serial.print("Roomname_long: ");
6
    preferences.putString("rooname_long", roomname_long);
7
    Serial.println(roomname_long);
8
    roomname = preferences.getString("roomname_long", "");
9
  }
10
}

Ich lese es ja so ein

von ziege (Gast)


Lesenswert?

Ich gehe nach dem Link (https://unsinnsbasis.de/esp32-preferences/) von 
weiter oben vor - die Bibliothek kenne ich aber nicht.

Du möchtest in den Preferences ein neues Key/Value-Paar anlegen, wobei 
du Key und Value über die serielle Schnittstelle übtragen möchtest?

Dafür scheint es anscheinend die Funktion size_t putString(const char* 
key, String value);.
Jetzt musst du über die serielle Schnitstelle eine Variable mit dem 
Namen/Key und eine mit dem Inhalt/Value befüllen, also ca. so:
1
char keyToAdd[15]; //Keys dürfen max. 15 Zeichen lang sein
2
String valueToAdd;
3
4
keyToAdd = Serial.ReadString(...); /*Ein Protokoll musst du dir ausdenken, genau so wie das hier steht wirds nicht gehen.*/
5
valueToAdd = Serial.ReadString(...);
6
7
preferences.begin("lizenzgeber",false);
8
9
preferences.puString(keyToAdd, valueToAdd);
10
11
preferences.end();

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Ich lese es ja so ein
> roomname_long = Serial.readString();

Gerade war es noch Serial.read() nicht readString(). Ist dir der 
Unterschied klar?

Ich halte Serial.readString() für "gefährlich", weil die Funktion

a) blockiert bis die Zeile abgeschlossen wurde oder ein (einstellbarer!) 
Timeout auftrat. Wenn du das auf einem ESP8266 machst und der Timeout 
>20ms ist, verlierst du gelegentlich die WLAN Verbindung. Ein Timeout 
von 1s würde sogar den Watchdog-Reset auslösen.

b) Die Funktion liest eventuell mehr Zeichen ein, als RAM/Stack zur 
Verfügung steht. Einen ESP8266 kann man mit mehr als 5 Kilobytes 
zuverlässig zum abstürzen bringen.

Wie empfindlich der ESP32 darauf reagiert, weiß ich nicht. Die 
append_until() Methode funktioniert jedoch mit Sicherheit auf allen 
Mikrocontrollern zuverlässig.

von Testing T. (testing19)


Lesenswert?

ziege schrieb:

>
1
> char keyToAdd[15]; //Keys dürfen max. 15 Zeichen lang sein
2
> String valueToAdd;
3
> 
4
> keyToAdd = Serial.ReadString(...); /*Ein Protokoll musst du dir 
5
> ausdenken, genau so wie das hier steht wirds nicht gehen.*/
6
> valueToAdd = Serial.ReadString(...);
7
> 
8
> 
9
> preferences.end();
10
>

Was meinst du mit Protokoll?

von PittyJ (Gast)


Lesenswert?

Vielleicht wäre ein Buch oder ein Kurs "Programmieren für Dummies" das 
richtige.
Da ist doch kein Basiswissen vorhanden.

von Sebastian R. (sebastian_r569)


Lesenswert?

Testing T. schrieb:
> Was meinst du mit Protokoll?

Ein Aufbau für den String, den du überträgst.

Z.B. "SET [varname] [varvalue]
oder "GET [varname]"

Eben eine Befehlskette, die du am Ende aufdröseln und interpretieren 
kannst.

SET roomname Schlafzimmer
"SET" -> Aha, es soll eine Variable gesetzt werden
"roomname" -> okay, die Variable roomname soll geändert werden
"Schlafzimmer" -> Ahhh, roomname soll auf Schlafzimmer geändert werden

von Sebastian R. (sebastian_r569)


Lesenswert?


von Testing T. (testing19)


Lesenswert?

ziege schrieb:
>
1
> char keyToAdd[15]; //Keys dürfen max. 15 Zeichen lang sein
2
> String valueToAdd;
3
> 
4
> keyToAdd = Serial.ReadString(...); /*Ein Protokoll musst du dir 
5
> ausdenken, genau so wie das hier steht wirds nicht gehen.*/
6
> valueToAdd = Serial.ReadString(...);
7
>
1
  char keyToAdd[15]; //Keys dürfen max. 15 Zeichen lang sein
2
3
  String valueToAdd;
4
5
  keyToAdd = Serial.readString("roomname_long"); 
6
  valueToAdd = Serial.readString();
7
8
  preferences.begin("lizenzgeber",false);
9
10
  preferences.putString(keyToAdd, valueToAdd);
11
12
  preferences.end();
13
 }

Zeigt mir als Fehler an :
1
no matching function for call to 'HardwareSerial::readString(const char [14])'

von Sebastian R. (sebastian_r569)


Lesenswert?

Testing T. schrieb:
> Zeigt mir als Fehler an :no matching function for call to
> 'HardwareSerial::readString(const char [14])'

Du hast sicherlich in die Dokumentation geguckt und weißt, welche 
Parameter readString() beherrscht/erwartet?

https://www.arduino.cc/reference/en/language/functions/communication/serial/readstring/

von Testing T. (testing19)


Lesenswert?

Sebastian R. schrieb:
> Testing T. schrieb:
>> Zeigt mir als Fehler an :no matching function for call to
>> 'HardwareSerial::readString(const char [14])'
>
> Du hast sicherlich in die Dokumentation geguckt und weißt, welche
> Parameter readString() beherrscht/erwartet?
>
> 
https://www.arduino.cc/reference/en/language/functions/communication/serial/readstring/

Aus der Seite kann ich leider nicht viel entnehmen ..

von Sebastian R. (sebastian_r569)


Lesenswert?

Testing T. schrieb:
> Aus der Seite kann ich leider nicht viel entnehmen ..

Dann musst du das auch lernen.

WIr können dir leider nicht alles kleinstschrittig vorkauen. 
Dokumentationen finden, lesen und vielleicht sogar verstehen ist eine 
grundlegende Fähigkeit.

von Testing T. (testing19)


Lesenswert?

Sebastian R. schrieb:
> Testing T. schrieb:
>> Aus der Seite kann ich leider nicht viel entnehmen ..
>
> Dann musst du das auch lernen.
>
> WIr können dir leider nicht alles kleinstschrittig vorkauen.
> Dokumentationen finden, lesen und vielleicht sogar verstehen ist eine
> grundlegende Fähigkeit.

Ich sehe ja keine Dokumentation. Es sind nur kurze Erklärungen 
vorhanden, welche ich schon kenne.

von ziege (Gast)


Lesenswert?

Mein Fehler. Hab aus Unkenntnis der read()/readString() Methoden da 
einfach readString(...) hingeschrieben, wobei das (...) als Platzhalter 
für "die Parameter die da hin gehören" gedacht war. Tatsächlich haben 
die Methoden keine Parameter.

von Sebastian R. (sebastian_r569)


Lesenswert?

Testing T. schrieb:
> Es sind nur kurze Erklärungen
> vorhanden, welche ich schon kenne.

Wenn du sie schon kennst, dann frage ich mich, weshalb du das Wissen 
nicht anwendest.
Du weißt ja dann, welche(n) Parameter readString() erwartet, du setzt es 
aber faszinierenderweise nicht um.

von Testing T. (testing19)


Lesenswert?

ziege schrieb:
> Mein Fehler. Hab aus Unkenntnis der read()/readString() Methoden da
> einfach readString(...) hingeschrieben, wobei das (...) als Platzhalter
> für "die Parameter die da hin gehören" gedacht war. Tatsächlich haben
> die Methoden keine Parameter.

Code Ausschnitt:
1
 char keyToAdd[15]; //Keys dürfen max. 15 Zeichen lang sein
2
3
  String valueToAdd;
4
5
  keyToAdd = Serial.readString();
6
  valueToAdd = Serial.readString();
7
8
  preferences.begin("lizenzgeber",false);
9
10
  preferences.putString(keyToAdd, valueToAdd);
11
12
  preferences.end();
13
 }
Ich bekomme leider eine Fehlermeldung ...
1
incompatible types in assignment of 'String' to 'char [15]'

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Ich sehe ja keine Dokumentation. Es sind nur kurze Erklärungen
> vorhanden, welche ich schon kenne.

Du hast dir zu viel vorgenommen. Fange kleiner an - sehr viel kleiner. 
Sprich:  Mit einem Arduino Uno oder Nano. Dafür gibt es reichlich 
Tutorials, die dich vom einfachsten LED Blinker beginnend an die 
Programmiersprache und die Doku heran führen.

Solange du ein originales Arduino Board (also eben nicht den ESP32) 
verwendest, findest du alle nötigen Infos auf der Arduino Webseite. Du 
musst dir nur die Zeit nehmen, dich damit auseinander zu setzen.

Manche Leute können das halt gar nicht, dafür irgend etwas anderes was 
auch nicht jeder kann.

von Testing T. (testing19)


Lesenswert?

Sebastian R. schrieb:
> Testing T. schrieb:
>> Es sind nur kurze Erklärungen
>> vorhanden, welche ich schon kenne.
>
> Wenn du sie schon kennst, dann frage ich mich, weshalb du das Wissen
> nicht anwendest.
> Du weißt ja dann, welche(n) Parameter readString() erwartet, du setzt es
> aber faszinierenderweise nicht um.

Es braucht normalerweise keine Parameter so weit ich es weiß, es liest 
ja vom Seriellen Monitor meine Eingabe.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Testing T. schrieb:
>> Ich sehe ja keine Dokumentation. Es sind nur kurze Erklärungen
>> vorhanden, welche ich schon kenne.
>
> Du hast dir zu viel vorgenommen. Fange kleiner an - sehr viel kleiner.
> Sprich:  Mit einem Arduino Uno oder Nano. Dafür gibt es reichlich
> Tutorials, die dich vom einfachsten LED Blinker beginnend an die
> Programmiersprache und die Doku heran führen.
>
> Solange du ein originales Arduino Board (also eben nicht den ESP32)
> verwendest, findest du alle nötigen Infos auf der Arduino Webseite. Du
> musst dir nur die Zeit nehmen, dich damit auseinander zu setzen.
>
> Manche Leute können das halt gar nicht, dafür irgend etwas anderes was
> auch nicht jeder kann.

Ich hantiere halt nicht jeden Tag mit einer ESP32 rum, es geht 
eigentlich gar nicht um die ESP32, sondern lediglich nur darum vom 
Terminal aus einen Wert für die Variable setzen die ich möchte.

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> es geht
> eigentlich gar nicht um die ESP32, sondern lediglich nur darum vom
> Terminal aus einen Wert für die Variable setzen die ich möchte.

Der ESP32 bringt da ein bisschen zusätzliche Komplexität rein, weil er 
ein Betriebssystem hat. Und zwar eins, das nicht von Arduino kommt. Es 
ist nur dazu kompatibel.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Testing T. schrieb:
>> es geht
>> eigentlich gar nicht um die ESP32, sondern lediglich nur darum vom
>> Terminal aus einen Wert für die Variable setzen die ich möchte.
>
> Der ESP32 bringt da ein bisschen zusätzliche Komplexität rein, weil er
> ein Betriebssystem hat. Und zwar eins, das nicht von Arduino kommt. Es
> ist nur dazu kompatibel.

Ok..wie fahre ich denn jetzt fort. Also ich hatte ja bis jetzt geschafft 
gehabt, dass ich vom Seriellen Monitor einlese und er es mir in die 
Variable schreibt, aber leider nicht persistent. Ich konnte es leider 
nicht mit preferences... einbinden. Nochmals der Code:
1
void loop() {
2
  if(Serial.available()){
3
    roomname_long = Serial.readString();
4
    Serial.print("Roomname_long: ");
5
    preferences.putString("rooname_long", roomname_long);
6
    Serial.println(roomname_long);
7
    roomname = preferences.getString("roomname_long", "");
8
  }
9
}

von Wolfgang (Gast)


Lesenswert?

Testing T. schrieb:
> Das habe ich ja beschrieben, ich möchte keine vorgefertigten Variablen
> haben. Ich möchte die Variablen mittels Serieller Schnittstelle
> eingeben.

Variablen haben ihren Namen nur im Quellcode. Im Binärcode stehen nur 
noch Adresse von Speicherplätzen und Register. Du brauchst also einen 
Programmteil, der anhand deiner Eingaben diese Zuordnung macht.

von Testing T. (testing19)


Lesenswert?

1
#include <Preferences.h>
2
Preferences preferences;
3
4
5
void setup() {
6
  Serial.begin(115200);
7
8
   String keyToAdd;
9
10
  String valueToAdd;
11
12
  keyToAdd = Serial.readString();
13
  valueToAdd = Serial.readString();
14
15
  preferences.begin("lizenzgeber",false);
16
17
  preferences.putString(keyToAdd.c_str(), valueToAdd);
18
  preferences.getString("roomname_long",valueToAdd);
19
  Serial.println(valueToAdd);
20
  preferences.end();
21
 
22
 }
23
24
void loop() {
25
}

Ich bin jetzt soweit gekommen, doch leider wird mir nichts auf dem 
Seriellen Monitor angezeigt.

von Klaus S. (kseege)


Lesenswert?

Testing T. schrieb:
> Ok..wie fahre ich denn jetzt fort. Also ich hatte ja bis jetzt geschafft
> gehabt, dass ich vom Seriellen Monitor einlese und er es mir in die
> Variable schreibt, aber leider nicht persistent.

Es existiert zu den preferences auf dem ESP32 eine Dokumentation im 
Internet, und aus der kann selbst ein Schwachkopf wie ich, der zum 
ersten Mal von den preferences hört. die passende Routine raussuchen. Da 
du eventuell nicht mal das kannst, hier die Auflösung des Rätsels:

putString(const char* key, const String value)

Gruß Klaus (der soundsovielte)

von Testing T. (testing19)


Lesenswert?

Klaus S. schrieb:
> Testing T. schrieb:
>> Ok..wie fahre ich denn jetzt fort. Also ich hatte ja bis jetzt geschafft
>> gehabt, dass ich vom Seriellen Monitor einlese und er es mir in die
>> Variable schreibt, aber leider nicht persistent.
>
> Es existiert zu den preferences auf dem ESP32 eine Dokumentation im
> Internet, und aus der kann selbst ein Schwachkopf wie ich, der zum
> ersten Mal von den preferences hört. die passende Routine raussuchen. Da
> du eventuell nicht mal das kannst, hier die Auflösung des Rätsels:
>
> putString(const char* key, const String value)
>
> Gruß Klaus (der soundsovielte)

Ich glaube du schwebst auf einer anderen Wolke ..
Schau dir meinen Code an da siehst du das es implementiert ist

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> Ich bin jetzt soweit gekommen, doch leider wird mir nichts auf dem
> Seriellen Monitor angezeigt.

Du solltest dir mal anschauen wozu setup() und wozu loop() da ist.

von Klaus S. (kseege)


Lesenswert?

Testing T. schrieb:
> Ich glaube du schwebst auf einer anderen Wolke ..
> Schau dir meinen Code an da siehst du das es implementiert ist

Ja, wir scheinen auf derselben Wellenlänge zu schwingen, zum 2.Mal 
überschneidet sich mein Text mit Deinem. Habe beide Male versucht, 
meinen Beitrag zu löschen, ging aber nicht mehr, weil schon sofort eine 
Antwort da war.

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> Ich bekomme leider eine Fehlermeldung ...incompatible types in
> assignment of 'String' to 'char [15]'

Schon mal bei Google eingegeben?

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Ok..wie fahre ich denn jetzt fort.

Timeout auf 60 Sekunden hoch setzen und hoffen, dass der ESP dabei nicht 
neu startet. Falls er es tut: append_until() benutzen.

>  aber leider nicht persistent

Variablen sind nie persistent. Das ist eine weitere Baustelle für die du 
noch nicht bereit bist.

von Cyblord -. (cyblord)


Lesenswert?

Früher hat man so eine Aufgabe durch programmieren gelöst. Heute braucht 
man dafür ein Forum voller Helfer-Syndrom-Patienten die einen an der 
Hand nehmen.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Testing T. schrieb:
>> Ok..wie fahre ich denn jetzt fort.
>
> Timeout auf 60 Sekunden hoch setzen und hoffen, dass der ESP dabei nicht
> neu startet. Falls er es tut: append_until() benutzen.
>
>>  aber leider nicht persistent
>
> Variablen sind nie persistent. Das ist eine weitere Baustelle für die du
> noch nicht bereit bist.

preferences bringt es dazu, dass der Wert persistent gespeichert wird.
Wenn ich lokal eine Variable eingebe ist Sie persistent drauf.

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> Ich bekomme leider eine Fehlermeldung ...incompatible types in
>> assignment of 'String' to 'char [15]'
>
> Schon mal bei Google eingegeben?

Ich hab das Problem schon gelöst. Mein neuer Code ist auch schon 
aktualisiert im Beitrag drin.

von Testing T. (testing19)


Lesenswert?

Der Code welchen ich bisher habe schaut so aus:
1
#include <Preferences.h>
2
Preferences preferences;
3
4
void setup() {
5
  Serial.begin(115200);
6
  delay(500);
7
  String keyToAdd;
8
  String valueToAdd;
9
  keyToAdd = Serial.readString();
10
  valueToAdd = Serial.readString();
11
  preferences.begin("licence",false);
12
  preferences.putString(keyToAdd.c_str(), valueToAdd);
13
  preferences.getString("roomname_long",valueToAdd);
14
  Serial.println(valueToAdd);
15
  preferences.end();
16
 }
17
void loop() {
18
}

Wie kriege ich es hin, dass beim hochladen die Frage gestellt wird:
Key? ich daraufhin den key eingebe und danach
Value? und daraufhin den Wert einfügen

von Andreas (Gast)


Lesenswert?

Meinst du es wird besser wenn du jetzt einen neuen Thread auf machst?

von Stefan F. (Gast)


Lesenswert?

Nicht noch ein Thread zu selben Frage!
Dort geht es lang: https://www.mikrocontroller.net/topic/535896

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> a) blockiert bis die Zeile abgeschlossen wurde oder ein (einstellbarer!)
> Timeout auftrat. Wenn du das auf einem ESP8266 machst und der Timeout
>>20ms ist, verlierst du gelegentlich die WLAN Verbindung. Ein Timeout
> von 1s würde sogar den Watchdog-Reset auslösen.
Hach....
Spielt dir da evtl. die Fantasie einen Streich?
Das solltest du noch mal überdenken!

Denkhilfe:
Stream::timedRead() ruft yield() auf

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Spielt dir da evtl. die Fantasie einen Streich?
> Stream::timedRead() ruft yield() auf

Vielleicht war das damals anders, als ich es versuchte. Das ist schon 
einige Jahre her.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nicht noch ein Thread zu selben Frage!
> Dort geht es lang: https://www.mikrocontroller.net/topic/535896

Ich wollte, dass jetzt auf den neuen Code basierend geholfen wird.

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Meinst du es wird besser wenn du jetzt einen neuen Thread auf machst?

Jap.

von Andreas (Gast)


Lesenswert?

Damit sinkt aber die Bereitschaft dir helfen zu wollen, da die 
Hilfswilligen jetzt in zwei Threads schauen müssen und evtl. schon 
gelöste dinge doppelt gelöst werden.

von PittyJ (Gast)


Lesenswert?

Da wird was gesucht:
https://www.ausbildung.de/berufe/baecker/
Da hast du auch einen Meister bei der Hand, der dir sofort alle Fragen 
beantwortet, oder dich mit einem Satz heisser Ohren versorgt.

Vielleicht passt das besser als Programmieren.

von Cyblord -. (cyblord)


Lesenswert?

PittyJ schrieb:
> Da wird was gesucht:
> https://www.ausbildung.de/berufe/baecker/
> Da hast du auch einen Meister bei der Hand, der dir sofort alle Fragen
> beantwortet, oder dich mit einem Satz heisser Ohren versorgt.
>
> Vielleicht passt das besser als Programmieren.

Ich frage mich ob in allen anderen Berufsfeldern auch so viele komplett 
talentlose Menschen rumspringen oder ob µC-Entwicklung hier besonders 
ist.
Ich meine sind die Geigen-Foren auch soll von Leuten die ohne Saiten 
spielen wollen und dabei den Bogen mit dem Hintern halten?

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Damit sinkt aber die Bereitschaft dir helfen zu wollen, da die
> Hilfswilligen jetzt in zwei Threads schauen müssen und evtl. schon
> gelöste dinge doppelt gelöst werden.

Es ist ein neuer Thread, weil der alte mit dem jetzigen nichts mehr zu 
tun hat. Das ist jetzt der Code im aktuellen Stand. Ich würde gerne 
wissen kannst du helfen oder nicht, falls wenn nicht dann brauche ich 
solche Kommentare nicht die unnötig die Leiste füllen

von Keller (Gast)


Lesenswert?

Mann, was fuer Typen sind hier unterwegs ?

Grausig !

von PittyJ (Gast)


Lesenswert?

Warum schaust du nicht einfach in die Doku der Serial Klasse?
https://www.arduino.cc/reference/de/language/functions/communication/serial/

Da steht doch alles drin.

von ProTipp (Gast)


Lesenswert?

Keller schrieb:
> s ?

Keller schrieb:
> g !

Warum machst du ein Leerzeichen vor das Satzzeichen? Ein Graus!

von Testing T. (testing19)


Lesenswert?

PittyJ schrieb:
> Warum schaust du nicht einfach in die Doku der Serial Klasse?
> https://www.arduino.cc/reference/de/language/functions/communication/serial/
>
> Da steht doch alles drin.

Ich habe schon überall drauf geschaut. Wenn ich in dieser Zeile
1
keyToAdd = Serial.readString("Key:");

eingebe funktionierts nicht, weil es ein Char erwartet, ich weiß halt 
nicht weiter. Das ist ja das eine Problem. Das zweite wäre, dass die 
Ausgabe nicht funktioniert der Zeigt mir den Wert nicht an.

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> Es ist ein neuer Thread, weil der alte mit dem jetzigen nichts mehr zu
> tun hat. Das ist jetzt der Code im aktuellen Stand.

Wenn du mit dieser Einstellung auch an die Fehlersuche bei deinem 
Programm ran gehst wird das nichts.

Hast du die Frage im anderen Thread (wink mit den Zaunpfahl - anderer 
Thread), schon beantwortet wo der unterschied von setup() und loop() 
ist?

von Dirk B. (dirkb2)


Lesenswert?

Testing T. schrieb:
> PittyJ schrieb:
>> Warum schaust du nicht einfach in die Doku der Serial Klasse?
>> https://www.arduino.cc/reference/de/language/functions/communication/serial/
>>
>> Da steht doch alles drin.
>
> Ich habe schon überall drauf geschaut. Wenn ich in dieser ZeilekeyToAdd
> = Serial.readString("Key:");
>
> eingebe funktionierts nicht,

Wie kommst du von der verlinkten Doku zu der Annahme, dass readString 
ein Parameter hat?

Nebenbei wartet die Funktion solange, bis ein NewLine eingegeben wurde.

von hmm (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier mal ein vorgehen wie man das machen kann wenn von Stefan mit Wifi 
dir das zu abstrakt war ;)

Habs nur schnell runter geschrieben funktioniert aber soweit :)

Gruß

von Testing T. (testing19)


Lesenswert?

> Wie kommst du von der verlinkten Doku zu der Annahme, dass readString
> ein Parameter hat?
>
> Nebenbei wartet die Funktion solange, bis ein NewLine eingegeben wurde.

Ja, Sie hat keinen Parameter, ich habe nur zeigen wollen was ich vor 
habe.

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> Es ist ein neuer Thread, weil der alte mit dem jetzigen nichts mehr zu
>> tun hat. Das ist jetzt der Code im aktuellen Stand.
>
> Wenn du mit dieser Einstellung auch an die Fehlersuche bei deinem
> Programm ran gehst wird das nichts.
>
> Hast du die Frage im anderen Thread (wink mit den Zaunpfahl - anderer
> Thread), schon beantwortet wo der unterschied von setup() und loop()
> ist?

Ich habe es im loop schon probiert. Ich wollte, dass das Programm im 
setup() erstmal funktioniert.
Im Loop zeigt der mir halt nur die Begriffe an, welche ich eingetippt 
habe.

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> eingebe funktionierts nicht, weil es ein Char erwartet, ich weiß halt
> nicht weiter. Das ist ja das eine Problem. Das zweite wäre, dass die
> Ausgabe nicht funktioniert der Zeigt mir den Wert nicht an.

Normalerweise Löst man ein komplexes Problem, indem man es in 
Teilprobleme zerlegt und löst dann Schritt für Schritt die Teilprobleme.

Also gehe dein erstes Teilproblem an, welches wohl ist Daten von der 
Schnittstelle lesen. Kommst da das erwartete heraus?

Hast du das geschaft, werte die Empfangenen Daten aus.

usw.

Testing T. schrieb:
> Ich würde gerne
> wissen kannst du helfen oder nicht, falls wenn nicht dann brauche ich
> solche Kommentare nicht die unnötig die Leiste füllen

Oh, wenn du meine Kommentare beherzigst, lernst du nicht nur 
Programmieren sondern auch etwas fürs Leben.

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> Im Loop zeigt der mir halt nur die Begriffe an, welche ich eingetippt
> habe.

Das ist ja schon mal mehr als in setup() funktioniert. Also solltest du 
da weiter machen und nicht einen Schritt zurück gehen.

von Cyblord -. (cyblord)


Lesenswert?

Testing T. schrieb:
> Ja, Sie hat keinen Parameter, ich habe nur zeigen wollen was ich vor
> habe.

Wähnst du dich bei Wünsch' dir was?

Nutze die Funktionen die du hast, so wie sie benutzt werden sollen. Wenn 
du dazu fragen hast, dann frag. Aber schreib keinen solchen 
Quatsch-Code.

von hmm (Gast)


Lesenswert?

p.s raume[ANZ][2] muss dann in performance ablegen werden, wenn die 
Änderung nach neustart noch da sein soll.

kannst dir auch mal "LittleFS" angucken, das ein Dateisystem für den 
esp32.

Gruß

von Andreas (Gast)


Lesenswert?

Du brauchst dir hier nicht weiter Mühe geben, der Code hier ist total 
veraltet ...


Siehe :
Beitrag "Es erscheint nichts auf dem Seriellen Monitor?"

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> Im Loop zeigt der mir halt nur die Begriffe an, welche ich eingetippt
>> habe.
>
> Das ist ja schon mal mehr als in setup() funktioniert. Also solltest du
> da weiter machen und nicht einen Schritt zurück gehen.

Alles klar.

von PittyJ (Gast)


Lesenswert?

Testing T. schrieb:
> PittyJ schrieb:
>> Warum schaust du nicht einfach in die Doku der Serial Klasse?
>> https://www.arduino.cc/reference/de/language/functions/communication/serial/
>>
>> Da steht doch alles drin.
>
> Ich habe schon überall drauf geschaut. Wenn ich in dieser ZeilekeyToAdd
> = Serial.readString("Key:");
>
> eingebe funktionierts nicht, weil es ein Char erwartet, ich weiß halt
> nicht weiter. Das ist ja das eine Problem. Das zweite wäre, dass die
> Ausgabe nicht funktioniert der Zeigt mir den Wert nicht an.

In der verlinkten Doku ist auch ein print() drin. Was sollte diese 
Funktion wohl tun???
Die Hälfte der Programmierung besteht aus Lesen und Verstehen von APIs 
und Datenblättern. Wenn das dir zuviel ist, versuch es beim Bäcker.

von Andreas (Gast)


Lesenswert?

PittyJ schrieb:
> Die Hälfte der Programmierung besteht aus Lesen und Verstehen von APIs
> und Datenblättern. Wenn das dir zuviel ist, versuch es beim Bäcker.

Da muss man aber die ABI (Allgemeines Backofen Interface / Bedienfeld) 
und das Rezept verstehen bzw. befolgen.

von hmm (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier mal ein Beispiel wie man Sachen einließt und auswertet.

Kenn mich leider nicht mit performace aus darum habs weggelasen, aber 
das shema (gibt noch genug andere) aber hier schonmal eine.

must dir dann auf performace selber ummodeln.

Kannst dir ja auch mal "LittleFS" angucken, das ein Dateisystem für den 
ESP32

Aus den Beipiel solltest du das auch mit Key abgleich hinbekommen.

p.s es nervt mehrere Threats auf zu machen zum selben Thema...

Gruß

von Andreas (Gast)


Lesenswert?

hmm schrieb:
> performace

Meinst du nicht vielleicht preferences?

von Testing T. (testing19)


Lesenswert?

1
#include <Preferences.h>
2
Preferences preferences;
3
4
void setup() {
5
  Serial.begin(115200);
6
  delay(500);
7
  preferences.begin("licence",false);
8
  preferences.getString("roomname_long","");
9
 }
10
void loop() {
11
  String keyToAdd;
12
  String output;
13
  String valueToAdd;
14
15
  keyToAdd = Serial.readStringUntil('\n');
16
  valueToAdd = Serial.readStringUntil('\n');
17
18
  preferences.putString(keyToAdd.c_str(), valueToAdd);
19
  preferences.putString("roomname_long",valueToAdd);
20
  preferences.getString("roomname_long",valueToAdd);
21
  Serial.println(valueToAdd);
22
  output = preferences.getString("roomname_long", "");
23
  
24
}

Ich versuche zu verstehen was ich gerade falsch mache.
Wenn ich es starte kann ich mit wenigen Abständen einmal ein Key 
eingeben und danach mein Value
Es wird im Monitor auch angezeigt, aber wenn ich nun meine ESP32 reboote 
zeigt der mir mein Value nicht an.

von PittyJ (Gast)


Lesenswert?

Nicht auf Diskette gesichert. Dann ist immer alles weg.
Ok, heute macht man das in der Cloud.

#include "Cloud.h"

preferences.SaveToCloud();

von Stefan F. (Gast)


Lesenswert?

Du hast doch echt einen Knall! jetzt schon der dritte Thread zum selben 
Thema am selben Tag.

Sorry, wer jetzt noch zu helfen versucht, kann sich gleich mit einweisen 
lassen.

von Testing T. (testing19)


Lesenswert?

PittyJ schrieb:
> Nicht auf Diskette gesichert. Dann ist immer alles weg.
> Ok, heute macht man das in der Cloud.
>
> #include "Cloud.h"
>
> preferences.SaveToCloud();

:)

von Sebastian R. (sebastian_r569)


Lesenswert?

So langsam reicht es aber mal mit deinen Threads.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Du hast doch echt einen Knall! jetzt schon der dritte Thread zum selben
> Thema am selben Tag.
>
> Sorry, wer jetzt noch zu helfen versucht, kann sich gleich mit einweisen
> lassen.

:)

von Testing T. (testing19)


Lesenswert?

Sebastian R. schrieb:
> So langsam reicht es aber mal mit deinen Threads.

:)

von Sebastian R. (sebastian_r569)


Lesenswert?

Und jetzt erwartest du wirklich noch, dass man dir hier hilft?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich habe die 3 Threads zum immerselben Thema mal zu 1 zusammengeführt. 
Sieht jetzt halt übel aus...

von Testing T. (testing19)


Lesenswert?

Sebastian R. schrieb:
> Und jetzt erwartest du wirklich noch, dass man dir hier hilft?

Ich erwarte die ganze Zeit, dass man mir hilft es gab nur eine Person, 
die mir ein Code Beispiel vorgegeben hat und ich drauf aufbaue.

Beitrag #7041654 wurde vom Autor gelöscht.
von Testing T. (testing19)


Lesenswert?

Lothar M. schrieb:
> Ich habe die 3 Threads zum immerselben Thema mal zu 1 zusammengeführt.
> Sieht jetzt halt übel aus...

Danke sehr.

von OT2048 (Gast)


Lesenswert?

Testing T. schrieb:
> Es wird im Monitor auch angezeigt, aber wenn ich nun meine ESP32 reboote
> zeigt der mir mein Value nicht an.

Wo soll er es denn anzeigen?

von Cyblord -. (cyblord)


Lesenswert?

Testing T. schrieb:
> PittyJ schrieb:
>> Nicht auf Diskette gesichert. Dann ist immer alles weg.
>> Ok, heute macht man das in der Cloud.
>>
>> #include "Cloud.h"
>>
>> preferences.SaveToCloud();
>
> :)

Ist natürlich Unsinn. Dazu braucht man das Cloud-Shield.

Und statt deinem Smiley könntest du mal erklären warum du glaubst deine 
Variablen würden aus dem nichts persistent gespeichert.

: Bearbeitet durch User
von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> Ich erwarte die ganze Zeit, dass man mir hilft es gab nur eine Person,
> die mir ein Code Beispiel vorgegeben hat und ich drauf aufbaue.

Den Code findest du in den Links der Helfenden.

Testing T. schrieb:
> Ich versuche zu verstehen was ich gerade falsch mache.
> Wenn ich es starte kann ich mit wenigen Abständen einmal ein Key
> eingeben und danach mein Value

Was gibt denn dein Programm aus wenn du was eingibst?
Wie schon mal geschrieben aber nicht gemacht ... Teilprobleme!

Funktioniert das Lesen der Schnittstelle richtig?

von Testing T. (testing19)


Lesenswert?

Cyblord -. schrieb:
> Testing T. schrieb:
>> PittyJ schrieb:
>>> Nicht auf Diskette gesichert. Dann ist immer alles weg.
>>> Ok, heute macht man das in der Cloud.
>>>
>>> #include "Cloud.h"
>>>
>>> preferences.SaveToCloud();
>>
>> :)
>
> Ist natürlich Unsinn. Dazu braucht man das Cloud-Shield.
>
> Und statt deinem Smiley könntest du mal erklären warum du glaubst deine
> Variablen würden aus dem nichts persistent gespeichert.

Also im Prinzip funktioniert das System gerade ja so.
Ich gebe erst Key ein -> Enter
Nach einem kleinen Delay
Gebe ich mein Value ein -> Enter

Was ich nun wissen möchte hat der jetzt mein Value unter diesem Key 
gespeichert?

von Hmmm (Gast)


Lesenswert?

Testing T. schrieb:
> Ich erwarte die ganze Zeit, dass man mir hilft

Du kannst um Hilfe bitten, aber erwarten solltest Du gar nichts.

Testing T. schrieb:
> es gab nur eine Person,
> die mir ein Code Beispiel vorgegeben hat

Das macht Copy&Paste natürlich schwieriger, erhöht aber den Lerneffekt.

In loop() laufend Deine Preferences zu schreiben, macht Dir recht 
schnell das Flash kaputt, Preferences::putString ruft nämlich im 
Anschluss nvs_commit() auf:

https://github.com/espressif/arduino-esp32/blob/45b7fa05b616a6107e7aafd4ba3f3c1fc8f388f7/libraries/Preferences/src/Preferences.cpp#L276

von Testing T. (testing19)


Lesenswert?

Andreas schrieb:
> Testing T. schrieb:
>> Ich erwarte die ganze Zeit, dass man mir hilft es gab nur eine Person,
>> die mir ein Code Beispiel vorgegeben hat und ich drauf aufbaue.
>
> Den Code findest du in den Links der Helfenden.
>
> Testing T. schrieb:
>> Ich versuche zu verstehen was ich gerade falsch mache.
>> Wenn ich es starte kann ich mit wenigen Abständen einmal ein Key
>> eingeben und danach mein Value
>
> Was gibt denn dein Programm aus wenn du was eingibst?
> Wie schon mal geschrieben aber nicht gemacht ... Teilprobleme!
>
> Funktioniert das Lesen der Schnittstelle richtig?

Habe ich gerade beantwortet :) . Es nimmt die Werte an und gibt Sie aus, 
aber ob sie auch persistent gespeichert sind kriege ich nicht heraus

von Testing T. (testing19)


Lesenswert?

Hmmm schrieb:
> Testing T. schrieb:
>> Ich erwarte die ganze Zeit, dass man mir hilft
>
> Du kannst um Hilfe bitten, aber erwarten solltest Du gar nichts.
>
> Testing T. schrieb:
>> es gab nur eine Person,
>> die mir ein Code Beispiel vorgegeben hat
>
> Das macht Copy&Paste natürlich schwieriger, erhöht aber den Lerneffekt.
>
> In loop() laufend Deine Preferences zu schreiben, macht Dir recht
> schnell das Flash kaputt, Preferences::putString ruft nämlich im
> Anschluss nvs_commit() auf:
>
> 
https://github.com/espressif/arduino-esp32/blob/45b7fa05b616a6107e7aafd4ba3f3c1fc8f388f7/libraries/Preferences/src/Preferences.cpp#L276

Im setup() geschiet aber gar nichts wie kommts?
Was muss ich ändern, sodass es im Setup funktioniert ?

von ProTipp (Gast)


Lesenswert?

Testing T. schrieb:
> zeigt der mir mein Value nicht an.

Warum wohl? Lies mal die Description und dann spielst du dein Programm 
im Kopf durch.

https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/

von Testing T. (testing19)


Lesenswert?

ProTipp schrieb:
> Testing T. schrieb:
>> zeigt der mir mein Value nicht an.
>
> Warum wohl? Lies mal die Description und dann spielst du dein Programm
> im Kopf durch.
>
> 
https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/

Ich glaube du hast eines nicht verstanden. Ich meine nach dem Restart 
meiner ESP32 zeigt der mir den Value nicht an. Hierbei frage ich mich, 
ob ich Mein Value richtig dem Key zugeordnet habe oder nicht, weil 
hiermit müsste er mir mein Value anzeigen :
1
preferences.getString("roomname_long", "");

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Testing T. schrieb:
> weil
> hiermit müsste er mir mein Value anzeigen :
> preferences.getString("roomname_long", "");

Nein!

Da wird nur ein String zurückgegeben.
Den kann man in einer Variablen speichern oder einer anderen Funktion 
übergeben.

In deinem längeren Beispiel, wurde die Variable output damit 
beschrieben.
Dann ist aber nichts weiter im Programm passiert.

von PittyJ (Gast)


Lesenswert?

Dirk B. schrieb:
> Testing T. schrieb:
>> weil
>> hiermit müsste er mir mein Value anzeigen :
>> preferences.getString("roomname_long", "");
>
> Nein!
>
> Da wird nur ein String zurückgegeben.
> Den kann man in einer Variablen speichern oder einer anderen Funktion
> übergeben.
>
> In deinem längeren Beispiel, wurde die Variable output damit
> beschrieben.
> Dann ist aber nichts weiter im Programm passiert.

Sag ich doch. Die Basics fehlen komplett.
Gibt es keine Bücher mehr?
Die Volkshochschule Dortmund bietet sogar Programmierkurse an.

Programmieren ist mehr als copy&paste.

von Testing T. (testing19)


Lesenswert?

PittyJ schrieb:

> Sag ich doch. Die Basics fehlen komplett.
> Gibt es keine Bücher mehr?
> Die Volkshochschule Dortmund bietet sogar Programmierkurse an.
>
> Programmieren ist mehr als copy&paste.

Deine Kommentare gehen mir langsam auf den Keks, wenn es dir nicht 
gefällt schau nicht auf diesen Thread. Danke ciao

von Testing T. (testing19)


Lesenswert?

Dirk B. schrieb:
> Testing T. schrieb:
>> weil
>> hiermit müsste er mir mein Value anzeigen :
>> preferences.getString("roomname_long", "");
>
> Nein!
>
> Da wird nur ein String zurückgegeben.
> Den kann man in einer Variablen speichern oder einer anderen Funktion
> übergeben.
>
> In deinem längeren Beispiel, wurde die Variable output damit
> beschrieben.
> Dann ist aber nichts weiter im Programm passiert.

Ich hatte dieses Beispiel mit Variablen wo ich Strings schon zugewiesen 
hatte und da hat es so geklappt, oder es funktionierte nur so.

Seit dem ich die Werte selber setze funktionierts nicht mehr.

von Dirk B. (dirkb2)


Lesenswert?

Schon mal ein
1
  Serial.println(preferences.getString("roomname_long", ""));
probiert?

von jobcenter (Gast)


Lesenswert?

Testing T. schrieb:
> Seit dem ich die Werte selber setze funktionierts nicht mehr.

Tätigkeiten die schnell und nachhaltig Erfolg und Befriedigung
verschaffen:

Stricken, Landschaftsplege, Fenster putzen, Autos waschen ....

von Testing T. (testing19)


Lesenswert?

Dirk B. schrieb:
> Schon mal ein
>
1
>   Serial.println(preferences.getString("roomname_long", ""));
2
>
> probiert?

Jap auch schon probiert.

von ProTipp (Gast)


Lesenswert?

Testing T. schrieb:
> Ich glaube du hast eines nicht verstanden.

Wow

Testing T. schrieb:
> Deine Kommentare gehen mir langsam auf den Keks

Wwoooww

Testing T. schrieb:
> Jap auch schon probiert.

Wooooooooooo?

Testing T. schrieb:
> void setup() {
>   Serial.begin(115200);
>   delay(500);
>   preferences.begin("licence",false);
>   preferences.getString("roomname_long",""); Sinnlos<--------------- Hier sollst 
du das probieren

>  }
> void loop() {
>   String keyToAdd; nicht initialisiert: Müll<-----------
>   String output;
>   String valueToAdd; nicht initialisiert: Müll<-----------
>   keyToAdd = Serial.readStringUntil('\n');  Timeout: andererMüll 
bleibt<-----------
>   valueToAdd = Serial.readStringUntil('\n'); dito<-----------
>   preferences.putString(keyToAdd.c_str(), valueToAdd); put andererMüll zu 
andererMüll <-----------
>   preferences.putString("roomname_long",valueToAdd); put andererMüll zu 
"roomname_long"<-----------
>   preferences.getString("roomname_long",valueToAdd); get andererMüll aus 
"roomname_long"<-----------
>   Serial.println(valueToAdd);print andererMüll <-----------
>   output = preferences.getString("roomname_long", "");

von Testing T. (testing19)


Lesenswert?

ProTipp schrieb:
> Testing T. schrieb:
>> Ich glaube du hast eines nicht verstanden.
>
> Wow
>
> Testing T. schrieb:
>> Deine Kommentare gehen mir langsam auf den Keks
>
> Wwoooww
>
> Testing T. schrieb:
>> Jap auch schon probiert.
>
> Wooooooooooo?
>
> Testing T. schrieb:

für dich als update :
1
#include <Preferences.h>
2
3
Preferences preferences;
4
String valueToAdd;
5
String valueToAdd2;
6
String output1;
7
String output2;
8
9
void setup() {
10
  Serial.begin(115200);
11
  Serial.println();
12
  
13
  preferences.begin("licence", false); // Put true for read-only access
14
15
  Serial.print("Enter Value1: ");
16
  Serial.setTimeout(1000);
17
  valueToAdd = Serial.readStringUntil('\n');
18
  output1 = preferences.getString("string_1", valueToAdd);
19
  Serial.println();
20
  Serial.print("Enter Value 2: ");
21
  Serial.setTimeout(1000);
22
  valueToAdd2 = Serial.readStringUntil('\n');
23
  preferences.putString("string_2", valueToAdd2);
24
  output2 = preferences.getString("string_2", valueToAdd2);
25
  
26
  // Get string from Preferences
27
  Serial.println(preferences.getString("string_1"));
28
  Serial.println(preferences.getString("string_2"));
29
  Serial.println("Value1: " + output1);
30
  Serial.println("Value2: " + output2);
31
  
32
33
  // Close the Preferences
34
  preferences.end();
35
36
  // Wait 10 seconds
37
  Serial.println("Restarting in 10 seconds...");
38
  delay(10000);
39
40
  // Restart ESP
41
}
42
void loop(){}

von PittyJ (Gast)


Lesenswert?

Testing T. schrieb:
> PittyJ schrieb:
>
>> Sag ich doch. Die Basics fehlen komplett.
>> Gibt es keine Bücher mehr?
>> Die Volkshochschule Dortmund bietet sogar Programmierkurse an.
>>
>> Programmieren ist mehr als copy&paste.
>
> Deine Kommentare gehen mir langsam auf den Keks, wenn es dir nicht
> gefällt schau nicht auf diesen Thread. Danke ciao

Mir gehen Leute auf den Keks, die nicht mal ein bisschen Biss haben, 
sondern sich jeden Pups noch vorbeten lassen müssen.

Versuch doch einfach mal, etwas selber herauszufinden. Es stehen alle 
Dokus im Netz. Doch manche brauchen wohl noch einen Vorleser dazu.
Selbst wenn man dir postet, dass in der Serial API ein print existiert, 
dann kapierst du das nicht. Lies doch einfach mal die Seite durch, bevor 
wieder nachgefragt wird.
Bei Amazon gibt es immer noch Bücher.

von Testing T. (testing19)


Lesenswert?

PittyJ schrieb:

> Versuch doch einfach mal, etwas selber herauszufinden. Es stehen alle
> Dokus im Netz. Doch manche brauchen wohl noch einen Vorleser dazu.
> Selbst wenn man dir postet, dass in der Serial API ein print existiert,
> dann kapierst du das nicht. Lies doch einfach mal die Seite durch, bevor
> wieder nachgefragt wird.
> Bei Amazon gibt es immer noch Bücher.

Lies dir doch mein letzten Beitrag dann kannste dir dein Print auch bei 
Amazon zulegen.

von Dirk B. (dirkb2)


Lesenswert?

Vielleicht solltest du bei preferences.getString nicht unbedingt den 
Wert als Default angeben, den du auch erwartest.
"-" wäre ok.

String_1 wird auch nicht in preferences geschrieben.

1 Sekunde ist als Timeout für HAndeingaben eher zu klein.

: Bearbeitet durch User
von Testing T. (testing19)


Lesenswert?

Dirk B. schrieb:
> Vielleicht solltest du bei preferences.getString nicht unbedingt den
> Wert als Default angeben, den du auch erwartest.
> "-" wäre ok.
>
> String_1 wird auch nicht in preferences geschrieben.
>
> 1 Sekunde ist als Timeout für HAndeingaben eher zu klein.

Ja, habe ich geändert.

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Was ich nun wissen möchte hat der jetzt mein Value unter diesem Key
> gespeichert?

Testing T. schrieb:
> Ich glaube du hast eines nicht verstanden. Ich meine nach dem Restart
> meiner ESP32 zeigt der mir den Value nicht an.

Logisch, der Mikrocontroller tut nur das, was du ihm befohlen hast.
Gebe die Werte doch einfach aus!

Da dein Programm schon mit der manuellen Eingabeaufforderung beginnt, 
kannst du nicht sehen, ob und was vorher gespeichert wurde.

von Testing T. (testing19)


Lesenswert?

Stefan ⛄ F. schrieb:
> Testing T. schrieb:
>> Was ich nun wissen möchte hat der jetzt mein Value unter diesem Key
>> gespeichert?
>
> Testing T. schrieb:
>> Ich glaube du hast eines nicht verstanden. Ich meine nach dem Restart
>> meiner ESP32 zeigt der mir den Value nicht an.
>
> Logisch, der Mikrocontroller tut nur das, was du ihm befohlen hast.
> Gebe die Werte doch einfach aus!
>
> Da dein Programm schon mit der manuellen Eingabeaufforderung beginnt,
> kannst du nicht sehen, ob und was vorher gespeichert wurde.

Aber wenn ich den Wert persistent speichere ( mit preferences) dann 
müsste er ja mir beim Neustart den Wert zurückgeben können, wenn ich 
danach verlange ?

von Testing T. (testing19)


Lesenswert?

1
#include <Preferences.h>
2
3
Preferences preferences;
4
String valueToAdd;
5
String valueToAdd2;
6
String output1;
7
String output2;
8
9
void setup() {
10
  Serial.begin(115200);
11
  Serial.println();
12
  
13
  preferences.begin("licence", false); // Put true for read-only access
14
  Serial.println("Value1: " + output1);
15
  Serial.println("Value2: " + output2);
16
  
17
  Serial.print("Enter Value 1: ");
18
  Serial.setTimeout(1000);
19
  valueToAdd2 = Serial.readStringUntil('\n');
20
  Serial.setTimeout(3000);
21
  valueToAdd = Serial.readStringUntil('\n');
22
  preferences.putString("string_2", valueToAdd);
23
  output1 = preferences.getString("string_1", valueToAdd);
24
  
25
  Serial.println();
26
  Serial.print("Enter Value 2: ");
27
  Serial.setTimeout(1000);
28
  valueToAdd2 = Serial.readStringUntil('\n');
29
  Serial.setTimeout(3000);
30
  preferences.putString("string_2", valueToAdd2);
31
  output2 = preferences.getString("string_2", valueToAdd2);
32
  
33
  // Get string from Preferences
34
  Serial.println(preferences.getString("string_1"));
35
  Serial.println(preferences.getString("string_2"));
36
  Serial.println("Value1: " + output1);
37
  Serial.println("Value2: " + output2);
38
  
39
  // Close the Preferences
40
  preferences.end();
41
42
43
}
44
45
void loop() {
46
  }

Aktueller Stand

von Stefan F. (Gast)


Lesenswert?

Testing T. schrieb:
> Aber wenn ich den Wert persistent speichere ( mit preferences) dann
> müsste er ja mir beim Neustart den Wert zurückgeben können, wenn ich
> danach verlange ?

Du liest den Speicher gar nicht aus! Dafür müsstest du nämlich die 
getString() Methode aufrufen, bevor du die Eingabeaufforderung für 
neue Werte anzeigst. Und natürlich müsstest du das Ergebnis auch 
ausgeben, was du auch nirgendwo tust.

Die Anleitung dazu kennst du aber hoffentlich, oder? 
https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/

Was mache ich hier eigentlich? Ich muss bekloppt sein.

Kleiner Tipp: Programmieren lernst man besser auf einem PC. Erst wenn du 
die Programmiersprache einigermaßen verstanden hast, solltest du dich an 
Mikrocontroller heran wagen. Wenn dir das zu unbehaglich ist, dann lerne 
wenigstens die Grundlagen anhand eines Tutorials, bevor zu mit fremden 
Frameworks und Bibliotheken hantierst die du noch gar nicht verstehen 
kannst. Fange z.B. damit an: 
http://stefanfrings.de/mikrocontroller_buch/index.html

von Dirk B. (dirkb2)


Lesenswert?

Zeile 14 und 15 änderst du in
1
Serial.println(preferences.getString("string_1", "%"));
2
Serial.println(preferences.getString("string_2", "%"));

Wenn da ein % steht, dann war der Wert vorher nicht da.

Testing T. schrieb:
> Ja, habe ich geändert.

Einmal. Bei 2 Aufrufen.
Das Timeout kannst du für diese Spielereien ruhig auf 30 Sekunden 
setzen.

von Andreas (Gast)


Lesenswert?

Testing T. schrieb:
> Aktueller Stand

Hey sach mal, Warum gehst du immer 1 Schritt vor und dann wieder zwei 
zurück. In loop() ist ja schon wieder nichts drin.

Zum 1000sten mal schau dir an wozu setup() und wozu loop() da ist und 
was diese Funktionen machen.

Du fragst immer nach Code in der Arduino IDE gibt es im Datei-Menü ein 
Punkt Examples oder Beispiele. Da gibt es bestimmt etwas zu deinen 
Teilproblemen.

Apropos Teilprobleme ... Fange mal ein neues Demo Projekt an, in dem 
ohne Benutzereingabe ein Wert in den NVS schreibst und beim nächsten 
Programmstart wieder ausließt. Nicht MEHR und nicht weniger.

Noch mal der Tipp unterteile dein Problem in Teilprobleme! Das gilt 
nicht nur fürs Programmieren sondern für alle Bereiche deines Lebens.

von Andreas (Gast)


Lesenswert?

1
void setup() {
2
  Serial.begin(115200);
3
  Serial.println();
4
5
  preferences.begin("licence", false); // Put true for read-only access
6
  Serial.println("Value1: " + output1); // es wird immer nichts Ausgegeben, also Sinnlos
7
  Serial.println("Value2: " + output2); // es wird immer nichts Ausgegeben, also Sinnlos
8
9
  Serial.print("Enter Value 1: ");
10
  Serial.setTimeout(1000);
11
  valueToAdd2 = Serial.readStringUntil('\n'); // Es wird nichts gelesen, da du nicht schaffst in 1s etwas einzugeben- > Sinnlos
12
  Serial.setTimeout(3000);
13
  valueToAdd = Serial.readStringUntil('\n'); // Es wird nichts gelesen da du in 3s nichts eingegeben hast -> Sinnlos
14
  preferences.putString("string_2", valueToAdd); // Es Wird nichts geschrieben, da vorher nichts eingegeben -> Sinnlos (wolltest du evtl string_1 schreiben?)
15
16
  output1 = preferences.getString("string_1", valueToAdd); // Es wird nichts gelesen, da nichts vorher in string_1 geschriben -> Sinnlos
17
18
  Serial.println();
19
  Serial.print("Enter Value 2: ");
20
  Serial.setTimeout(1000);
21
  valueToAdd2 = Serial.readStringUntil('\n'); // Sinnlos siehe oben
22
  Serial.setTimeout(3000);
23
  preferences.putString("string_2", valueToAdd2);  // Sinnlos siehe oben
24
  output2 = preferences.getString("string_2", valueToAdd2);  // Sinnlos siehe oben
25
26
  // Get string from Preferences
27
  Serial.println(preferences.getString("string_1")); // da nichts geschrieben (Evtl leeren String) keine Ausgabe
28
  Serial.println(preferences.getString("string_2")); // da nichts geschrieben (Evtl leeren String) keine Ausgabe
29
  Serial.println("Value1: " + output1); // in output1 nicht drinn siehe oben
30
  Serial.println("Value2: " + output2); // siehe oben
31
32
  // Close the Preferences
33
34
  preferences.end();

Beitrag #7042851 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.