Meinen Arduino Nano soll Messwerte von 2 Sensoren abholen und per Http-Request an einen Server schicken.
Das Auslesen der Sensoren alleine funktioniert, das Senden der Daten von einem Sensor (egal Welcher) ebenfalls.
NUR alles zusammen funktioniert nicht.
Das Programm startet immer wieder neu, mit verstümmelter serieller Ausgabe.
Auf einem Arduino Mega 2560 funktioniert das Programm (2 Sensoren + Senden) allerdings.
Kann es sich um Speicherüberlauf handeln?
Was muss man besser machen, damit es mit beiden Sensoren auch auf den Nano läuft?
Zum Anhang:
Das Programm wie angehängt funktioniert (Sensor SDS011 auskommentiert) und hat folgende Größe.
DATA: [======= ] 65.7% (used 1345 bytes from 2048 bytes)
PROGRAM: [========= ] 89.0% (used 27356 bytes from 30720 bytes)
Auch mit allen Zeilen (auch Debug) sind es weniger als 100%.
(Das Problem ist IDE unabhängig.)
Du benutzt große Puffer in Funktionen. Die kann der Kompiler bei seiner Speicherberechnung nicht mit berücksichtigen. Also scheint der RAM zu wenig zu werden. Da hilft dann nur ein größerer MC.
Ergibt folgende Ausgabe:
BME280-SDS011->VZ
local IP address: 192.168.178.35
xl BME280-SDS011->VZ
local IP address: 192.168.178.35
xl BME280-SDS011->VZ
... uns so weiter ...
das xl - kommt vom xloop
HotSystems:
Dann sieht es für mich nach einem Fehler des Sensors BME280 aus.
Eigentlich nicht, es sieht genauso aus wenn ich es umdrehe also SDS011 verwende und den BME280 dazu nehmen will.
Schade
Wenn ich char cValue[8]; bzw. char path[90 ]; optimiere wird es auch nicht besser
vergrößern hilft auch nicht.
Tommy56:
Du benutzt große Puffer in Funktionen. Die kann der Kompiler bei seiner Speicherberechnung nicht mit berücksichtigen. Also scheint der RAM zu wenig zu werden. Da hilft dann nur ein größerer MC.
Ich habe mal versucht das RAM "auszuloten" und die Sensoren entfernt und mit den Buffer gespielt.
Dabei habe ich char path[500]; deutlich erhöht. -> kein Problem.
Bei char path[1000]; -> zusätzliche komische Zeichen in der seriellen Ausgabe => Aber der HTTP-Request ist okay.
KEINE Neustarts bzw. mehrfaches ausführen der void setup().
Man kann halt schlecht sagen was die Lib's an RAM benötigen ...
Zur weiteren und besseren Fehlersuche solltest du deine einzelnen Sensoren in einzelne Funktionen packen. Dann kann man diese leichter ein und ausschalten.
Meinen Arduino Nano soll Messwerte von 2 Sensoren abholen und per Http-Request an einen Server schicken.
Das Auslesen der Sensoren alleine funktioniert, das Senden der Daten von einem Sensor (egal Welcher) ebenfalls.
NUR alles zusammen funktioniert nicht.
Das Programm startet immer wieder neu, mit verstümmelter serieller Ausgabe.
Auf einem Arduino Mega 2560 funktioniert das Programm (2 Sensoren + Senden) allerdings.
Das deutet darauf hin, daß am ATmega328 auf dem NANO zuwenig RAM hat um den Bedarf zu stillen.
Ein größerer Prozessor ist sicherlich der sichere Weg, da auch die Bibliotheken schon einiges an RAM brauchen. Aber da lässt auch so noch etwas RAM sparen. Das F() Makro ist nicht alles:
Auch für die normalen C String Funktionen gibt es PROGMEM Varianten. So wird das:
Und braucht man wirklich 500 Bytes für den Puffer? Das ist das Hauptproblem. Auf einem Atmega328 ist das ein Viertel des Speichers. Es sieht nicht so aus als ob der Pfad so extrem lang ist
Mal eine grundlegende Frage. Müssen die Dinger so lang sein? Weil deren Inhalt unterscheidet sich ja nur in der letzten Ziffer. Da könnte die doch reichen?