example of HTTP server in AP mode?
-
- Posts: 46
- Joined: Wed Mar 13, 2019 9:20 pm
example of HTTP server in AP mode?
Can anyone direct me to a working example of a simple HTTP server, which uses AP mode?
It seems like a powerful feature of ESP32 but I havn't been able to locate a working example yet.
I would like to be able to connect to the ESP32 network on another device, open a web browser, navigate to some address, and have ESP32 serve a webpage from its flash memory.
It seems like a powerful feature of ESP32 but I havn't been able to locate a working example yet.
I would like to be able to connect to the ESP32 network on another device, open a web browser, navigate to some address, and have ESP32 serve a webpage from its flash memory.
-
- Posts: 8
- Joined: Wed Mar 13, 2019 9:49 pm
- Location: Lima, Peru
- Contact:
Re: example of HTTP server in AP mode?
Hey there!
This link shows a tutorial about what you are looking for: http://www.lucadentella.it/en/2018/01/2 ... ta-softap/. Nevertheless, this example uses the Netconn API.
If you want to use the esp_http_server.h component, there is no example implemented with SoftAp, yet.
This link shows a tutorial about what you are looking for: http://www.lucadentella.it/en/2018/01/2 ... ta-softap/. Nevertheless, this example uses the Netconn API.
If you want to use the esp_http_server.h component, there is no example implemented with SoftAp, yet.
-
- Posts: 3
- Joined: Thu Dec 28, 2017 4:28 pm
Re: example of HTTP server in AP mode?
i am also very keen on such an working example. reading html from a sdcard
regards from berlin
gerhard
regards from berlin
gerhard
-
- Posts: 8
- Joined: Wed Mar 13, 2019 9:49 pm
- Location: Lima, Peru
- Contact:
Re: example of HTTP server in AP mode?
Hey there!
Since there is no example of what you are looking for, I decided to create one.
NOTES
Hope it helps
Best regards
Verde
Since there is no example of what you are looking for, I decided to create one.
NOTES
- Some header files are unnecessary.
- This example also includes IP configuration.
- The URI handler has minimal code in this example but you can define it as you wish.
- If you have an Android device, I recommend that you use this app: https://play.google.com/store/apps/deta ... tprequests.
- #include "string.h"
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/event_groups.h"
- #include "esp_wifi.h"
- #include "esp_system.h"
- #include "esp_event.h"
- #include "esp_event_loop.h"
- #include "esp_log.h"
- #include "nvs_flash.h"
- #include "esp_http_server.h"
- #define SOFT_AP_SSID "ESP32 SoftAP"
- #define SOFT_AP_PASSWORD "Password"
- #define SOFT_AP_IP_ADDRESS_1 192
- #define SOFT_AP_IP_ADDRESS_2 168
- #define SOFT_AP_IP_ADDRESS_3 5
- #define SOFT_AP_IP_ADDRESS_4 18
- #define SOFT_AP_GW_ADDRESS_1 192
- #define SOFT_AP_GW_ADDRESS_2 168
- #define SOFT_AP_GW_ADDRESS_3 5
- #define SOFT_AP_GW_ADDRESS_4 20
- #define SOFT_AP_NM_ADDRESS_1 255
- #define SOFT_AP_NM_ADDRESS_2 255
- #define SOFT_AP_NM_ADDRESS_3 255
- #define SOFT_AP_NM_ADDRESS_4 0
- #define SERVER_PORT 3500
- #define HTTP_METHOD HTTP_POST
- #define URI_STRING "/test"
- static httpd_handle_t httpServerInstance = NULL;
- static esp_err_t methodHandler(httpd_req_t* httpRequest){
- ESP_LOGI("HANDLER","This is the handler for the <%s> URI", httpRequest->uri);
- return ESP_OK;
- }
- static httpd_uri_t testUri = {
- .uri = URI_STRING,
- .method = HTTP_METHOD,
- .handler = methodHandler,
- .user_ctx = NULL,
- };
- static void startHttpServer(void){
- httpd_config_t httpServerConfiguration = HTTPD_DEFAULT_CONFIG();
- httpServerConfiguration.server_port = SERVER_PORT;
- if(httpd_start(&httpServerInstance, &httpServerConfiguration) == ESP_OK){
- ESP_ERROR_CHECK(httpd_register_uri_handler(httpServerInstance, &testUri));
- }
- }
- static void stopHttpServer(void){
- if(httpServerInstance != NULL){
- ESP_ERROR_CHECK(httpd_stop(httpServerInstance));
- }
- }
- static esp_err_t wifiEventHandler(void* userParameter, system_event_t *event) {
- switch(event->event_id){
- case SYSTEM_EVENT_AP_STACONNECTED:
- startHttpServer();
- break;
- case SYSTEM_EVENT_AP_STADISCONNECTED:
- stopHttpServer();
- break;
- default:
- break;
- }
- return ESP_OK;
- }
- static void launchSoftAp(){
- ESP_ERROR_CHECK(nvs_flash_init());
- tcpip_adapter_init();
- ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
- tcpip_adapter_ip_info_t ipAddressInfo;
- memset(&ipAddressInfo, 0, sizeof(ipAddressInfo));
- IP4_ADDR(
- &ipAddressInfo.ip,
- SOFT_AP_IP_ADDRESS_1,
- SOFT_AP_IP_ADDRESS_2,
- SOFT_AP_IP_ADDRESS_3,
- SOFT_AP_IP_ADDRESS_4);
- IP4_ADDR(
- &ipAddressInfo.gw,
- SOFT_AP_GW_ADDRESS_1,
- SOFT_AP_GW_ADDRESS_2,
- SOFT_AP_GW_ADDRESS_3,
- SOFT_AP_GW_ADDRESS_4);
- IP4_ADDR(
- &ipAddressInfo.netmask,
- SOFT_AP_NM_ADDRESS_1,
- SOFT_AP_NM_ADDRESS_2,
- SOFT_AP_NM_ADDRESS_3,
- SOFT_AP_NM_ADDRESS_4);
- ESP_ERROR_CHECK(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &ipAddressInfo));
- ESP_ERROR_CHECK(tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP));
- ESP_ERROR_CHECK(esp_event_loop_init(wifiEventHandler, NULL));
- wifi_init_config_t wifiConfiguration = WIFI_INIT_CONFIG_DEFAULT();
- ESP_ERROR_CHECK(esp_wifi_init(&wifiConfiguration));
- ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
- wifi_config_t apConfiguration = {
- .ap = {
- .ssid = SOFT_AP_SSID,
- .password = SOFT_AP_PASSWORD,
- .ssid_len = 0,
- //.channel = default,
- .authmode = WIFI_AUTH_WPA2_PSK,
- .ssid_hidden = 0,
- .max_connection = 1,
- .beacon_interval = 150,
- },
- };
- ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &apConfiguration));
- ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
- ESP_ERROR_CHECK(esp_wifi_start());
- }
- void app_main(void){
- launchSoftAp();
- while(1) vTaskDelay(10);
- }
Hope it helps
Best regards
Verde
-
- Posts: 46
- Joined: Wed Mar 13, 2019 9:20 pm
Re: example of HTTP server in AP mode?
Amazing. Thanks so much Verde!
Re: example of HTTP server in AP mode?
Here's a http server working out of the box. Lot's of features and examples.
https://github.com/chmorgan/esphttpd-freertos
https://github.com/chmorgan/esphttpd-freertos
-
- Posts: 46
- Joined: Wed Mar 13, 2019 9:20 pm
Re: example of HTTP server in AP mode?
unfortunately the suggestions above do not work for esp-idf version 4.
Is anyone able to suggest code to run a softAP http server in v4.1?
or perhaps able to port the code?
Is anyone able to suggest code to run a softAP http server in v4.1?
or perhaps able to port the code?
Re: example of HTTP server in AP mode?
hi
cant share the code, so i will just explain the concepts to get it to work. Literally just slapped these two examples together.
https://github.com/espressif/esp-idf/tr ... ted/softAP
https://github.com/espressif/esp-idf/tr ... ver/simple
as for the "ESP_ERROR_CHECK(example_connect());" in the main of simple httpserver, just replace this example_connect with the init_softAP function from the softAP example. Some points to note:
1.Try to put all the functions in one page. somehow the definitions in different pages seem to cause issues.
2. Use the default settings, the ssid and passwd. Dont do fancy stuffs yet.
3. after combining and compiling, try to solve the errors one by one.
hope it helps.
cant share the code, so i will just explain the concepts to get it to work. Literally just slapped these two examples together.
https://github.com/espressif/esp-idf/tr ... ted/softAP
https://github.com/espressif/esp-idf/tr ... ver/simple
as for the "ESP_ERROR_CHECK(example_connect());" in the main of simple httpserver, just replace this example_connect with the init_softAP function from the softAP example. Some points to note:
1.Try to put all the functions in one page. somehow the definitions in different pages seem to cause issues.
2. Use the default settings, the ssid and passwd. Dont do fancy stuffs yet.
3. after combining and compiling, try to solve the errors one by one.
hope it helps.
-
- Posts: 1
- Joined: Fri Oct 18, 2019 8:16 am
Re: example of HTTP server in AP mode?
Hi,
By building the above code for http in softAP mode, I am getting this error " C:/msys32/home/APRASAD/esp/esp-idf_1/esp-idf-template/main/main.c:105:21: error: implicit declaration of function 'esp_event_init' [-Werror=implicit-function-declaration]
ESP_ERROR_CHECK(esp_event_init(wifiEventHandler, NULL)); ".
make[1]: *** [/home/APRASAD/esp/esp-idf/make/component_wrapper.mk:292: main.o] Error 1
make: *** [C:\msys32\home\APRASAD\esp\esp-idf/make/project.mk:584: component-main-build] Error 2
I am not getting these error in my other codes.
What can I do to resolve this ?
I recently started working with esp so, I am not familiar with this.
By building the above code for http in softAP mode, I am getting this error " C:/msys32/home/APRASAD/esp/esp-idf_1/esp-idf-template/main/main.c:105:21: error: implicit declaration of function 'esp_event_init' [-Werror=implicit-function-declaration]
ESP_ERROR_CHECK(esp_event_init(wifiEventHandler, NULL)); ".
make[1]: *** [/home/APRASAD/esp/esp-idf/make/component_wrapper.mk:292: main.o] Error 1
make: *** [C:\msys32\home\APRASAD\esp\esp-idf/make/project.mk:584: component-main-build] Error 2
I am not getting these error in my other codes.
What can I do to resolve this ?
I recently started working with esp so, I am not familiar with this.
Re: example of HTTP server in AP mode?
Thanks, it did.stock86c wrote: ↑Fri Sep 13, 2019 1:28 amhi
cant share the code, so i will just explain the concepts to get it to work. Literally just slapped these two examples together.
https://github.com/espressif/esp-idf/tr ... ted/softAP
https://github.com/espressif/esp-idf/tr ... ver/simple
as for the "ESP_ERROR_CHECK(example_connect());" in the main of simple httpserver, just replace this example_connect with the init_softAP function from the softAP example. Some points to note:
1.Try to put all the functions in one page. somehow the definitions in different pages seem to cause issues.
2. Use the default settings, the ssid and passwd. Dont do fancy stuffs yet.
3. after combining and compiling, try to solve the errors one by one.
hope it helps.
Here I'm leaving the example code I managed to make. Altough, I encourage everybody to follow the steps stock86c mentioned to truly understand the code (maybe you might end on a better code).
Code: Select all
#include <esp_wifi.h>
#include <esp_event.h>
#include <esp_log.h>
#include <esp_system.h>
#include <nvs_flash.h>
#include <sys/param.h>
#include "nvs_flash.h"
//#include "tcpip_adapter.h"
#include "esp_netif.h"
#include "esp_eth.h"
//#include "protocol_examples_common.h"
#include <esp_http_server.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "lwip/err.h"
#include "lwip/sys.h"
/* The examples use WiFi configuration that you can set via project configuration menu.
If you'd rather not, just change the below entries to strings with
the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
*/
#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID
#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD
#define EXAMPLE_MAX_STA_CONN CONFIG_ESP_MAX_STA_CONN
/* A simple example that demonstrates how to create GET and POST
* handlers for the web server.
*/
static const char *TAG = "wifi_AP_WEBserver";
//------------------------------------------------------------------------------
/* An HTTP GET handler */
static esp_err_t hello_get_handler(httpd_req_t *req)
{
char* buf;
size_t buf_len;
/* Get header value string length and allocate memory for length + 1,
* extra byte for null termination */
buf_len = httpd_req_get_hdr_value_len(req, "Host") + 1;
if (buf_len > 1)
{
buf = malloc(buf_len);
/* Copy null terminated value string into buffer */
if (httpd_req_get_hdr_value_str(req, "Host", buf, buf_len) == ESP_OK)
{
ESP_LOGI(TAG, "Found header => Host: %s", buf);
}
free(buf);
}
buf_len = httpd_req_get_hdr_value_len(req, "Test-Header-2") + 1;
if (buf_len > 1)
{
buf = malloc(buf_len);
if (httpd_req_get_hdr_value_str(req, "Test-Header-2", buf, buf_len) == ESP_OK)
{
ESP_LOGI(TAG, "Found header => Test-Header-2: %s", buf);
}
free(buf);
}
buf_len = httpd_req_get_hdr_value_len(req, "Test-Header-1") + 1;
if (buf_len > 1)
{
buf = malloc(buf_len);
if (httpd_req_get_hdr_value_str(req, "Test-Header-1", buf, buf_len) == ESP_OK)
{
ESP_LOGI(TAG, "Found header => Test-Header-1: %s", buf);
}
free(buf);
}
/* Read URL query string length and allocate memory for length + 1,
* extra byte for null termination */
buf_len = httpd_req_get_url_query_len(req) + 1;
if (buf_len > 1) {
buf = malloc(buf_len);
if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK)
{
ESP_LOGI(TAG, "Found URL query => %s", buf);
char param[32];
/* Get value of expected key from query string */
if (httpd_query_key_value(buf, "query1", param, sizeof(param)) == ESP_OK)
{
ESP_LOGI(TAG, "Found URL query parameter => query1=%s", param);
}
if (httpd_query_key_value(buf, "query3", param, sizeof(param)) == ESP_OK)
{
ESP_LOGI(TAG, "Found URL query parameter => query3=%s", param);
}
if (httpd_query_key_value(buf, "query2", param, sizeof(param)) == ESP_OK)
{
ESP_LOGI(TAG, "Found URL query parameter => query2=%s", param);
}
}
free(buf);
}
/* Set some custom headers */
httpd_resp_set_hdr(req, "Custom-Header-1", "Custom-Value-1");
httpd_resp_set_hdr(req, "Custom-Header-2", "Custom-Value-2");
/* Send response with custom headers and body set as the
* string passed in user context*/
const char* resp_str = (const char*) req->user_ctx;
httpd_resp_send(req, resp_str, strlen(resp_str));
/* After sending the HTTP response the old HTTP request
* headers are lost. Check if HTTP request headers can be read now. */
if (httpd_req_get_hdr_value_len(req, "Host") == 0)
{
ESP_LOGI(TAG, "Request headers lost");
}
return ESP_OK;
}
static const httpd_uri_t hello = {
.uri = "/hello",
.method = HTTP_GET,
.handler = hello_get_handler,
/* Let's pass response string in user
* context to demonstrate it's usage */
.user_ctx = "Hello World!"
};
/* An HTTP POST handler */
static esp_err_t echo_post_handler(httpd_req_t *req)
{
char buf[100];
int ret, remaining = req->content_len;
while (remaining > 0) {
/* Read the data for the request */
if ((ret = httpd_req_recv(req, buf,
MIN(remaining, sizeof(buf)))) <= 0) {
if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
/* Retry receiving if timeout occurred */
continue;
}
return ESP_FAIL;
}
/* Send back the same data */
httpd_resp_send_chunk(req, buf, ret);
remaining -= ret;
/* Log data received */
ESP_LOGI(TAG, "=========== RECEIVED DATA ==========");
ESP_LOGI(TAG, "%.*s", ret, buf);
ESP_LOGI(TAG, "====================================");
}
// End response
httpd_resp_send_chunk(req, NULL, 0);
return ESP_OK;
}
static const httpd_uri_t echo = {
.uri = "/echo",
.method = HTTP_POST,
.handler = echo_post_handler,
.user_ctx = NULL
};
/* This handler allows the custom error handling functionality to be
* tested from client side. For that, when a PUT request 0 is sent to
* URI /ctrl, the /hello and /echo URIs are unregistered and following
* custom error handler http_404_error_handler() is registered.
* Afterwards, when /hello or /echo is requested, this custom error
* handler is invoked which, after sending an error message to client,
* either closes the underlying socket (when requested URI is /echo)
* or keeps it open (when requested URI is /hello). This allows the
* client to infer if the custom error handler is functioning as expected
* by observing the socket state.
*/
esp_err_t http_404_error_handler(httpd_req_t *req, httpd_err_code_t err)
{
if (strcmp("/hello", req->uri) == 0) {
httpd_resp_send_err(req, HTTPD_404_NOT_FOUND, "/hello URI is not available");
/* Return ESP_OK to keep underlying socket open */
return ESP_OK;
} else if (strcmp("/echo", req->uri) == 0) {
httpd_resp_send_err(req, HTTPD_404_NOT_FOUND, "/echo URI is not available");
/* Return ESP_FAIL to close underlying socket */
return ESP_FAIL;
}
/* For any other URI send 404 and close socket */
httpd_resp_send_err(req, HTTPD_404_NOT_FOUND, "Some 404 error message");
return ESP_FAIL;
}
/* An HTTP PUT handler. This demonstrates realtime
* registration and deregistration of URI handlers
*/
static esp_err_t ctrl_put_handler(httpd_req_t *req)
{
char buf;
int ret;
if ((ret = httpd_req_recv(req, &buf, 1)) <= 0) {
if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
httpd_resp_send_408(req);
}
return ESP_FAIL;
}
if (buf == '0') {
/* URI handlers can be unregistered using the uri string */
ESP_LOGI(TAG, "Unregistering /hello and /echo URIs");
httpd_unregister_uri(req->handle, "/hello");
httpd_unregister_uri(req->handle, "/echo");
/* Register the custom error handler */
httpd_register_err_handler(req->handle, HTTPD_404_NOT_FOUND, http_404_error_handler);
}
else {
ESP_LOGI(TAG, "Registering /hello and /echo URIs");
httpd_register_uri_handler(req->handle, &hello);
httpd_register_uri_handler(req->handle, &echo);
/* Unregister custom error handler */
httpd_register_err_handler(req->handle, HTTPD_404_NOT_FOUND, NULL);
}
/* Respond with empty body */
httpd_resp_send(req, NULL, 0);
return ESP_OK;
}
static const httpd_uri_t ctrl = {
.uri = "/ctrl",
.method = HTTP_PUT,
.handler = ctrl_put_handler,
.user_ctx = NULL
};
static httpd_handle_t start_webserver(void)
{
httpd_handle_t server = NULL;
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
// Start the httpd server
ESP_LOGI(TAG, "Starting server on port: '%d'", config.server_port);
if (httpd_start(&server, &config) == ESP_OK) {
// Set URI handlers
ESP_LOGI(TAG, "Registering URI handlers");
httpd_register_uri_handler(server, &hello);
httpd_register_uri_handler(server, &echo);
httpd_register_uri_handler(server, &ctrl);
return server;
}
ESP_LOGI(TAG, "Error starting server!");
return NULL;
}
/*
static void stop_webserver(httpd_handle_t server)
{
// Stop the httpd server
httpd_stop(server);
}
*/
/*
static void disconnect_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
{
httpd_handle_t* server = (httpd_handle_t*) arg;
if (*server) {
ESP_LOGI(TAG, "Stopping webserver");
stop_webserver(*server);
*server = NULL;
}
}
*/
/*
static void connect_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
{
httpd_handle_t* server = (httpd_handle_t*) arg;
if (*server == NULL) {
ESP_LOGI(TAG, "Starting webserver");
*server = start_webserver();
}
}
*/
//------------------------------------------------------------------------------
static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
{
if (event_id == WIFI_EVENT_AP_STACONNECTED) {
wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",
MAC2STR(event->mac), event->aid);
} else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {
wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",
MAC2STR(event->mac), event->aid);
}
}
esp_err_t wifi_init_softap(void)
{
//esp_netif_init();
//ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_ap();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
.authmode = WIFI_AUTH_WPA_WPA2_PSK
},
};
if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
}
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
return ESP_OK;
}
//------------------------------------------------------------------------------
void app_main(void)
{
httpd_handle_t server = NULL;
ESP_LOGI(TAG, "NVS init");
ESP_ERROR_CHECK(nvs_flash_init());
//tcpip_adapter_init();
esp_netif_init();
ESP_LOGI(TAG, "Eventloop create");
ESP_ERROR_CHECK(esp_event_loop_create_default());
/* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig.
* Read "Establishing Wi-Fi or Ethernet Connection" section in
* examples/protocols/README.md for more information about this function.
*/
//ESP_ERROR_CHECK(example_connect());
ESP_LOGI(TAG, "init softAP");
ESP_ERROR_CHECK(wifi_init_softap());
/* Register event handlers to stop the server when Wi-Fi or Ethernet is disconnected,
* and re-start it upon connection.
*/
#ifdef CONFIG_EXAMPLE_CONNECT_WIFI
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &connect_handler, &server));
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &disconnect_handler, &server));
#endif // CONFIG_EXAMPLE_CONNECT_WIFI
#ifdef CONFIG_EXAMPLE_CONNECT_ETHERNET
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &connect_handler, &server));
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ETHERNET_EVENT_DISCONNECTED, &disconnect_handler, &server));
#endif // CONFIG_EXAMPLE_CONNECT_ETHERNET
/* Start the server for the first time */
server = start_webserver();
}
Also, this code was compiled over the latest version, using the esp_netif library, so make sure to "update" your IDF or uncomment the tcpip_adapter library and fix what's necessary.
Who is online
Users browsing this forum: No registered users and 332 guests