- websocket client on ESP32

- telemetry protocol builder
- server-side message handling
- database migrations
- telemetry persistence
This commit is contained in:
2026-04-14 16:09:18 +03:00
parent 977227296e
commit 4100931deb
57 changed files with 4960 additions and 63 deletions

82
esp32/main/ws.cpp Normal file
View File

@@ -0,0 +1,82 @@
#include "ws.h"
#include "esp_websocket_client.h"
#include "esp_log.h"
#include <string.h>
#include "sdkconfig.h"
static const char* TAG = "WS";
static esp_websocket_client_handle_t client = nullptr;
static bool connected = false;
static void ws_event_handler(void *handler_args,
esp_event_base_t base,
int32_t event_id,
void *event_data)
{
switch (event_id) {
case WEBSOCKET_EVENT_CONNECTED:
connected = true;
ESP_LOGI(TAG, "Connected");
break;
case WEBSOCKET_EVENT_DISCONNECTED:
connected = false;
ESP_LOGI(TAG, "Disconnected");
break;
case WEBSOCKET_EVENT_ERROR:
connected = false;
ESP_LOGE(TAG, "Error");
break;
case WEBSOCKET_EVENT_DATA: {
auto *data = (esp_websocket_event_data_t *)event_data;
ESP_LOGI(TAG, "Recv: %.*s", data->data_len, (char*)data->data_ptr);
break;
}
}
}
void ws_init(const char* uri)
{
esp_websocket_client_config_t config = {};
config.uri = uri;
config.reconnect_timeout_ms = 5000;
config.network_timeout_ms = 5000;
client = esp_websocket_client_init(&config);
esp_websocket_register_events(client, WEBSOCKET_EVENT_ANY, ws_event_handler, NULL);
}
void ws_start()
{
if (client) {
esp_websocket_client_start(client);
}
}
bool ws_is_connected()
{
return connected;
}
void ws_send(const char* data)
{
if (connected && client) {
esp_websocket_client_send_text(client, data, strlen(data), portMAX_DELAY);
}
}
void ws_go()
{
char uri[128];
snprintf(uri, sizeof(uri),
"ws://%s:%d/ws",
CONFIG_SERVER_HOST,
CONFIG_SERVER_PORT);
ws_init(uri);
ws_start();
}