#include #include "freertos/FreeRTOS.h" #include "esp_event.h" #include "esp_event_loop.h" #include "esp_system.h" #include "esp_wifi.h" #include "nvs_flash.h" #include "./../../../mongoose.h" #define WIFI_SSID "ssid" #define WIFI_PASS "pass" #define MG_LISTEN_ADDR "80" static esp_err_t event_handler(void *ctx, system_event_t *event) { (void) ctx; (void) event; return ESP_OK; } static void mg_ev_handler(struct mg_connection *nc, int ev, void *p) { static const char *reply_fmt = "HTTP/1.0 200 OK\r\n" "Connection: close\r\n" "Content-Type: text/plain\r\n" "\r\n" "Hello %s\n"; switch (ev) { case MG_EV_ACCEPT: { char addr[32]; mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr), MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT); printf("Connection %p from %s\n", nc, addr); break; } case MG_EV_HTTP_REQUEST: { char addr[32]; struct http_message *hm = (struct http_message *) p; mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr), MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT); printf("HTTP request from %s: %.*s %.*s\n", addr, (int) hm->method.len, hm->method.p, (int) hm->uri.len, hm->uri.p); mg_printf(nc, reply_fmt, addr); nc->flags |= MG_F_SEND_AND_CLOSE; break; } case MG_EV_CLOSE: { printf("Connection %p closed\n", nc); break; } } } void app_main(void) { nvs_flash_init(); tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); /* Initializing WiFi */ wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); wifi_config_t sta_config = { .sta = {.ssid = WIFI_SSID, .password = WIFI_PASS, .bssid_set = false}}; ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK(esp_wifi_start()); ESP_ERROR_CHECK(esp_wifi_connect()); /* Starting Mongoose */ struct mg_mgr mgr; struct mg_connection *nc; printf("Starting web-server on port %s\n", MG_LISTEN_ADDR); mg_mgr_init(&mgr, NULL); nc = mg_bind(&mgr, MG_LISTEN_ADDR, mg_ev_handler); if (nc == NULL) { printf("Error setting up listener!\n"); return; } mg_set_protocol_http_websocket(nc); /* Processing events */ while (1) { mg_mgr_poll(&mgr, 1000); } }