Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitdf4743b401a6072c1b96ac1cc6b95a977821cff2 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-05-27 22:21:12 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-05-27 22:21:12 +0300
Files7fe116cc4242fae1d9efe9ceaba98f89dc166934
uni-projects-df4743b401a6072c1b96ac1cc6b95a977821cff2.tar
uni-projects-df4743b401a6072c1b96ac1cc6b95a977821cff2.tar.gz
uni-projects-df4743b401a6072c1b96ac1cc6b95a977821cff2.zip
Parent2a3a4296e747a5b15786646a1ec5142ad23331c2 (diff)
[iot/goam] Added websocket for waiting and receiving images
diff --git a/Year 3/Internet of things/goam/main/main.c b/Year 3/Internet of things/goam/main/main.c
index 6d8d4f8..82cebe0 100644
--- a/Year 3/Internet of things/goam/main/main.c
+++ b/Year 3/Internet of things/goam/main/main.c
@@ -74,6 +74,7 @@ void take_photo() {
char* image;
size_t length = ptc06_get_image(&image);
spiffs_write(SPIFFS_PREFIX "/capture.jpeg", image, length);
+ ws_send_bin(image, length);
display_printon(DCHAR_CAMERA, 1);
free(image);
diff --git a/Year 3/Internet of things/goam/main/webserver.c b/Year 3/Internet of things/goam/main/webserver.c
index 26a170f..b0ccbeb 100644
--- a/Year 3/Internet of things/goam/main/webserver.c
+++ b/Year 3/Internet of things/goam/main/webserver.c
@@ -17,6 +17,7 @@
#include "wifi.h"
static const char *TAG = "webserver";
+#define MAX_CLIENTS 4
static httpd_handle_t server = NULL;
@@ -113,6 +114,21 @@ static const httpd_uri_t post_network = {
.handler = post_network_handler,
};
+static esp_err_t ws_camera_handler(httpd_req_t *req) {
+ if (req->method == HTTP_GET) {
+ ESP_LOGI(TAG, "Established websocket connection");
+ return ESP_OK;
+ }
+ // Nobody should send websocket data, it's only for receiving
+ return ESP_OK;
+}
+static const httpd_uri_t ws_camera = {
+ .uri = "/camera",
+ .method = HTTP_GET,
+ .handler = ws_camera_handler,
+ .is_websocket = true,
+};
+
/*
* On network connection/disconnect
*/
@@ -164,6 +180,7 @@ void webserver_start()
httpd_ssl_config_t config = HTTPD_SSL_CONFIG_DEFAULT();
config.httpd.lru_purge_enable = true;
config.httpd.uri_match_fn = httpd_uri_match_wildcard;
+ config.httpd.max_open_sockets = MAX_CLIENTS;
SET_EMBEDDED_PTR(config.servercert, config.servercert_len, cacert, "cacert_pem");
SET_EMBEDDED_PTR(config.prvtkey_pem, config.prvtkey_len, prvtkey, "prvtkey_pem");
@@ -177,6 +194,26 @@ void webserver_start()
httpd_register_uri_handler(server, &get_index);
httpd_register_uri_handler(server, &get_image);
httpd_register_uri_handler(server, &post_network);
+ httpd_register_uri_handler(server, &ws_camera);
ESP_LOGI(TAG, "Started server on port %d", config.httpd.server_port);
}
+
+void ws_send_bin(const char* msg, size_t size) {
+ httpd_ws_frame_t value = {
+ .fragmented = false,
+ .type = HTTPD_WS_TYPE_BINARY,
+ .payload = (unsigned char*)msg,
+ .len = size,
+ };
+
+ size_t clients = MAX_CLIENTS;
+ int client_fds[MAX_CLIENTS];
+ ESP_ERROR_CHECK(httpd_get_client_list(server, &clients, client_fds));
+ for (size_t i = 0; i < clients; i++) {
+ if (httpd_ws_get_fd_info(server, client_fds[i]) != HTTPD_WS_CLIENT_WEBSOCKET) continue;
+ ESP_LOGI(TAG, "Sending websocket data to fd:%d", client_fds[i]);
+
+ httpd_ws_send_data(server, client_fds[i], &value);
+ }
+}
diff --git a/Year 3/Internet of things/goam/main/webserver.h b/Year 3/Internet of things/goam/main/webserver.h
index b4111b1..57dafd4 100644
--- a/Year 3/Internet of things/goam/main/webserver.h
+++ b/Year 3/Internet of things/goam/main/webserver.h
@@ -2,3 +2,4 @@
void webserver_init();
void webserver_start();
+void ws_send_bin(const char* msg, size_t size);
diff --git a/Year 3/Internet of things/goam/sdkconfig b/Year 3/Internet of things/goam/sdkconfig
index 4b44199..90205f4 100644
--- a/Year 3/Internet of things/goam/sdkconfig
+++ b/Year 3/Internet of things/goam/sdkconfig
@@ -610,7 +610,7 @@ CONFIG_HTTPD_MAX_URI_LEN=512
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
CONFIG_HTTPD_PURGE_BUF_LEN=32
# CONFIG_HTTPD_LOG_PURGE_DATA is not set
-# CONFIG_HTTPD_WS_SUPPORT is not set
+CONFIG_HTTPD_WS_SUPPORT=y
# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set
# end of HTTP Server
diff --git a/Year 3/Internet of things/goam/sdkconfig.old b/Year 3/Internet of things/goam/sdkconfig.old
index 001ab44..5c940da 100644
--- a/Year 3/Internet of things/goam/sdkconfig.old
+++ b/Year 3/Internet of things/goam/sdkconfig.old
@@ -605,7 +605,7 @@ CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
#
# HTTP Server
#
-CONFIG_HTTPD_MAX_REQ_HDR_LEN=512
+CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
CONFIG_HTTPD_MAX_URI_LEN=512
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
CONFIG_HTTPD_PURGE_BUF_LEN=32