Merge pull request 'Finished web socket communication' (#1) from feature/ui_websockets into main
Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
+2
-2
@@ -12,8 +12,8 @@
|
|||||||
platform = espressif32
|
platform = espressif32
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
framework = arduino
|
framework = arduino
|
||||||
;lib_deps =
|
lib_deps =
|
||||||
;; esp32async/ESPAsyncWebServer@^3.12.0
|
WebSockets
|
||||||
|
|
||||||
; upload via OTA
|
; upload via OTA
|
||||||
upload_protocol = espota
|
upload_protocol = espota
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
// Contains configuration constants:
|
// Contains configuration constants:
|
||||||
|
|
||||||
#define FIRMWARE_VERSION "1.0.2"
|
#define FIRMWARE_VERSION "1.0.3"
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ WebService::WebService(DashboardState& state)
|
|||||||
:
|
:
|
||||||
Service("Web", 10),
|
Service("Web", 10),
|
||||||
dashboardState(state),
|
dashboardState(state),
|
||||||
server(80)
|
server(80),
|
||||||
|
webSocket(81)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,31 +66,35 @@ h1 {
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function updateUptime() {
|
|
||||||
fetch('/uptime')
|
let socket;
|
||||||
.then(response => response.text())
|
|
||||||
.then(data => {
|
function connectWebSocket() {
|
||||||
document.getElementById("uptime").innerHTML = data;
|
socket = new WebSocket(
|
||||||
});
|
"ws://" + window.location.hostname + ":81/"
|
||||||
|
);
|
||||||
|
|
||||||
|
socket.onopen = function() {
|
||||||
|
console.log("WebSocket connected");
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.onmessage = function(event) {
|
||||||
|
const data = JSON.parse(event.data);
|
||||||
|
|
||||||
|
document.getElementById("uptime").innerHTML = data.uptime;
|
||||||
|
document.getElementById("firmware_version").innerHTML = data.version;
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.onclose = function() {
|
||||||
|
console.log("WebSocket disconnected");
|
||||||
|
setTimeout(connectWebSocket, 2000);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
setInterval(updateUptime, 1000);
|
window.onload = connectWebSocket;
|
||||||
window.onload = updateUptime;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
|
||||||
function getVersion() {
|
|
||||||
fetch('/version')
|
|
||||||
.then(response => response.text())
|
|
||||||
.then(data => {
|
|
||||||
document.getElementById("firmware_version").innerHTML = data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onload = getVersion;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -105,18 +110,22 @@ Firmware Version: <div id="firmware_version">Loading...</div>
|
|||||||
</html>
|
</html>
|
||||||
)rawliteral";
|
)rawliteral";
|
||||||
|
|
||||||
|
void WebService::broadcastState()
|
||||||
// server.send(200, "text/html", html);
|
{
|
||||||
// }
|
String json = "{";
|
||||||
//
|
|
||||||
// void handleUptime() {
|
json += "\"uptime\":\"";
|
||||||
// server.send(200, "text/plain", formatUptime());
|
json += dashboardState.uptime;
|
||||||
// }
|
json += "\",";
|
||||||
//
|
|
||||||
// void handleVersion() {
|
json += "\"version\":\"";
|
||||||
// server.send(200, "text/plain", FIRMWARE_VERSION);
|
json += dashboardState.firmwareVersion;
|
||||||
// }
|
json += "\"";
|
||||||
//
|
|
||||||
|
json += "}";
|
||||||
|
|
||||||
|
webSocket.broadcastTXT(json);
|
||||||
|
}
|
||||||
|
|
||||||
void WebService::begin() {
|
void WebService::begin() {
|
||||||
// Root path
|
// Root path
|
||||||
@@ -128,34 +137,59 @@ void WebService::begin() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Version path
|
|
||||||
server.on("/version", [this](){
|
|
||||||
server.send(
|
|
||||||
200,
|
|
||||||
"text/plain",
|
|
||||||
dashboardState.firmwareVersion
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Uptime path
|
|
||||||
server.on("/uptime", [this]() {
|
|
||||||
server.send(
|
|
||||||
200,
|
|
||||||
"text/plain",
|
|
||||||
dashboardState.uptime
|
|
||||||
);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
server.begin();
|
server.begin();
|
||||||
|
|
||||||
|
webSocket.begin();
|
||||||
|
|
||||||
|
// Manage web socket connections
|
||||||
|
webSocket.onEvent(
|
||||||
|
[this](uint8_t clientNum,
|
||||||
|
WStype_t type,
|
||||||
|
uint8_t *payload,
|
||||||
|
size_t length)
|
||||||
|
{
|
||||||
|
if (type == WStype_TEXT) {
|
||||||
|
handleWebSocketMessage(
|
||||||
|
clientNum,
|
||||||
|
payload,
|
||||||
|
length
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == WStype_CONNECTED) {
|
||||||
|
Serial.println("WebSocket client connected");
|
||||||
|
broadcastState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
Serial.println("Web server started");
|
Serial.println("Web server started");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebService::handleWebSocketMessage(uint8_t clientNum, uint8_t *payload, size_t length) {
|
||||||
|
Serial.println("Client number: " + clientNum);
|
||||||
|
Serial.println("Sent a message of length: " + length);
|
||||||
|
Serial.print("Saying: ");
|
||||||
|
for (int ii = 0; ii < length; ii ++) {
|
||||||
|
Serial.print(payload[ii]);
|
||||||
|
}
|
||||||
|
Serial.print("\n\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void WebService::update()
|
void WebService::update()
|
||||||
{
|
{
|
||||||
dashboardState.update();
|
dashboardState.update();
|
||||||
|
|
||||||
server.handleClient();
|
server.handleClient();
|
||||||
|
webSocket.loop();
|
||||||
|
|
||||||
|
// Brodcast updates once per second
|
||||||
|
static unsigned long lastUpdate = 0;
|
||||||
|
|
||||||
|
if (millis() - lastUpdate >= 1000)
|
||||||
|
{
|
||||||
|
lastUpdate = millis();
|
||||||
|
broadcastState();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "service.h"
|
|
||||||
#include "../core/dashboard_state.h"
|
|
||||||
#include <WebServer.h>
|
#include <WebServer.h>
|
||||||
|
#include <WebSocketsServer.h>
|
||||||
|
|
||||||
|
#include "service.h"
|
||||||
|
|
||||||
|
#include "../core/dashboard_state.h"
|
||||||
|
|
||||||
class WebService : public Service {
|
class WebService : public Service {
|
||||||
|
|
||||||
@@ -17,5 +19,9 @@ public:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
WebServer server;
|
WebServer server;
|
||||||
|
WebSocketsServer webSocket;
|
||||||
DashboardState dashboardState;
|
DashboardState dashboardState;
|
||||||
|
|
||||||
|
void handleWebSocketMessage(uint8_t clientNum, uint8_t *payload, size_t length);
|
||||||
|
void broadcastState();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user