Hallo,
ich habe auf einem ESP einen Server (AP) mit Websocket laufen, der mir serielle Daten an meine Webseite schickt. Alles läuft stabil. Nur eine Sache bekomme ich nicht in den Griff:
Die Daten werden durch ein document.getElementById..innerHTML angezeigt. Aber die Werte kumulieren, d.h., dass ein Wert empfangen wird (z.B. NDR2) und der nächste Wert (NDR1) drangehängt ist. So wird der Text immer länger und ist natürlich nicht zu gebrauchen. Auch ein value=" " vor dem Empfang bringt nicht. Ich glaube eher, das liegt am Buffer des Websockets. Gibt es eine Möglichkeit, evtl den Buffer nach Erhalt eines Datensatzes zu löschen?
Der Empfang auf der HTML-Seite:
function start()
{
Socket = new WebSocket('ws://' + window.location.hostname + ':81/');
Socket.onmessage = function(evt)
{
document.getElementById("sender").innerHTML += evt.data;
}
}
Das Senden vom Server aus:
webSocket.loop();
server.handleClient();
if (ESPSerial.available() > 0)
{
char c[] = {(char)ESPSerial.read()};
webSocket.broadcastTXT(c, sizeof(c));
}
Ich bin für jeden Tip dankbar.
Grüße
Achso, Nachtrag: in die andere Richtung, von HTML zum Server funktioniert es super, da kommen die einzelnen Daten auch getrennt an.
HTML senden:
<div align="center">
<p class="kopf">Stationstaste:</p>
<select align="center" id="myselect" class="selin"
onchange="change_myselect(this.value)">
<option value="0">keine</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</div>
function change_myselect(sel)
{
Socket.send("Taste "+sel);
}
...und Server empfang:
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
if (type == WStype_TEXT)
{
for(int i = 0; i < length; i++) ESPSerial.print((char) payload[i]);
ESPSerial.println();
}
}