diff options
| Commit | df4743b401a6072c1b96ac1cc6b95a977821cff2 (patch) | |
|---|---|---|
| Author | 2024-05-27 22:21:12 +0300 | |
| Committer | 2024-05-27 22:21:12 +0300 | |
| Files | 7fe116cc4242fae1d9efe9ceaba98f89dc166934 | |
| uni-projects-df4743b401a6072c1b96ac1cc6b95a977821cff2.tar uni-projects-df4743b401a6072c1b96ac1cc6b95a977821cff2.tar.gz uni-projects-df4743b401a6072c1b96ac1cc6b95a977821cff2.zip | ||
| Parent | 2a3a4296e747a5b15786646a1ec5142ad23331c2 (diff) | |
[iot/goam] Added websocket for waiting and receiving images
5 files changed, 41 insertions, 2 deletions
| -rw-r--r-- | Year 3/Internet of things/goam/main/main.c | 1 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/webserver.c | 37 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/webserver.h | 1 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/sdkconfig | 2 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/sdkconfig.old | 2 |
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 |
