ich möchte ohne die bekannten Apps wie Home Automation etc. meinen ESP32, der aktuell als WIFI AP aktiv ist eine einfache Webseite bereitstellen lassen für einen Client (Anzeigetafel), damit dieser die Messwerte abgreift und darstellt.
Leider bin ich kein Web Experte und frage mich, wie ich unten stehenden Struct in einen JSOn Container verpacken kann? D.h. wie erzeuge ich daraus eine Struktur, die das abbildet und die im Client wieder in Daten zerlegt wird.
Kann da mal jemand Starthilfe geben?
1
/* Globaler Datenstruct */
2
typedefstruct
3
{
4
doubleUBatt;// Batterie in Volt
5
doublePWLast,PWSolar;// Watt von Last und Solar
6
doubleIALast,IASolar;// Ströme von Last und Solar
7
doubleISolSensorCal;// Kalibrationswerte der Stromwandler
8
doubleILastSensorCal;
9
doublePWhSolarTag,PWhLastTag;// Wattstunden summiert auf den Tag
10
doublePWhSolarStd,PWhLastStd;// Wattstunden summiert auf die Stunde
11
uint16_tWhStdSolarWeek[8];// Wh Historie pro Tag eine Woche lang
So, wie meine schwachen Kenntnisse sind muss man erst ein JSON Objekt erzeugen und in diesem wird dann ein JSON Document erzeugt, was eine Struktur hat. Dieses Dokument kann man dann mit Daten füllen, z.b
Ok, das klappt in der Ausgabe mit serializeJsonPretty(doc, Serial)
Eine flache Strktur, die es aber erstmal tun sollte. Wäre gut, wenn root einen Namen hätte aber keine Ahnung wie man den erzeugt. ESPO32 resett aber nach 4 Ausgaben leider.
Leier erzeugt DynamicJSON Object auch eine Heap Verletzung und der ESP32 resettet. Dafür finde ich leider keine Lösung und im Netz steht auch nichts.
Niemand hier, der da schon was mit gemacht hat? Das Ganze muss dann ja vom Webserver in eine Webseite verpackt werden, die den Anforderungen an deren Aufbau entspricht, so dass der Client genau das zu sehen bekommt was da steht.
Deine Programmabstürze kann ich mir nicht erklären. Das
StaticJsonDocument<512> sollte eigentlich wieder aufräumen, wenn der
Scope verlassen wird.
Der ESP32 stürzt gerne ab, wenn man bei Funktionen keinen return setzt, mit oder ohne Wert. Ich habe überall return reingeschrieben und es war weg. Stand irgendwo im Internet bei stackoveerflow, dass dem so ist. Ursache war eine ISR ohne return, also weit weg von diesem Thema. Die wurde jede Sekunde aufgerufen und erzeugte einen Überlauf. Es ist gibt ja Unterschiede zwischen RET und REFI bei einer CPU.
Dann aber schleunigst die Warnungen im Compiler aktivieren, Funktionen die mit Rückgabewert definiert sind aber keinen liefern werden dann angemeckert.
Einem Interrupt eine Funktion mit Rückgabewert unterzuschieben sollte einen Fehler liefern weil die Signatur nicht passt. Mit Typecast würde man das unterdrücken, aber man macht sich den Stack kaputt.
Einem Interrupt eine Funktion mit Rückgabewert unterzuschieben
Wer macht denn sowas ???? Leider erzeugen sehr viel Libarys der Arduino Welt etliche Warnungen, so dass man erschlagen wird von Meldungen die gar nicht zum Projekt gehören. Da reicht schon ein uint_8t mit char oder byte zu kreuzen.
Ach ja... sieht gut aus! Das muss ich dann nur noch in eine Webseite verpacken, die vom Browser akzeptiert wird bzw. vom anderen ESP32. Hoffe das geht ohne den Zertifkate Kram. Wird zusammen mit dem OTA Interface gemacht, wenn es soweit ist.
Das muss ich dann nur noch in eine Webseite verpacken
Üblicherweise lässt man die Webseite das JSON mit den veränderlichen Daten separat nachladen und füllt diese Daten dann nachher in die Webseite bzw. den DOM ein. Das hat den Vorteil, dass man danach jeweils nur die Daten bei Bedarf oder periodisch nachladen muss und nicht immer die komplette Webseite.
Das kann man direkt mit JavaScript realisieren oder etwas komfortabler mit der Verwendung von JQuery. Es ist kein Hexenwerk, auch wenn es erst kompliziert klingt.
Das kann man direkt mit JavaScript realisieren oder etwas komfortabler
mit der Verwendung von JQuery. Es ist kein Hexenwerk, auch wenn es erst
kompliziert klingt.
Dumme Frage: Wenn sowieso nur ein ESP32 (Master, Client) über das Wlan der Fritzbox mit dem anderen ESP32 (Slave, Server) kommúniziert ... könnte man da nicht das ganze Browserzeugs weglassen? Ich brauche doch gar keinen Interpreter für HTML, CSS usw. Lässt sich mit wget nicht der ASCII JSON String direkt einlesen zum parsen mit der JSON Lib? Ich plane nicht das fern abrufbar zu machen, denn dann hätte ich wohl eine dieser fertigen Lösungen ioBroker und wie sie alle heissen genommen wo man in Skriptsprache die ESP als Datenpunkte einfügt.
Wobei, diesen Gedanken weiter gesponnnen, brauche ich auch kein JSON
Es reicht alle Daten in einen String zu packen, Komma dazwischen und diesen String auf der Zielseite wieder zu zerlegen, so wie NMEA, CSV und viele andere Formate es auch machen.
Dann brauchst du auch keinen String, da kannst du deinen Stuct auch
gleich als Bytefolge senden.
Und wie macht man das durch einen TCP/IP Socket? Denn den muss ich ja benutzen.
2 ESP32 hängen an der Fritzbox mit eigenen IP Adressen. Sie können sich sehen und aufeinander zugreifen. Leider ist das für mich alles Neuland, was mit dem Web und seinen Diensten zu tun hat.