From 235ef588c159198ce31394189124e58fe32ce1b6 Mon Sep 17 00:00:00 2001 From: catvayor Date: Mon, 3 Mar 2025 14:35:16 +0100 Subject: [PATCH] feat: choose a static IP instead of dhcp --- main/Kconfig.projbuild | 18 ++++++++++++++++++ main/main.c | 27 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 8f1f2e6..9bb09a9 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -75,4 +75,22 @@ menu "Project Configuration" default 19 help GPIO pin number to be used as GPIO_OUTPUT_IO_1. + + config STATIC_IP_ADDR + string "Static IP address" + default "192.168.51.10" + help + Set static IP address. + + config STATIC_NETMASK_ADDR + string "Static netmask address" + default "255.255.255.0" + help + Set static netmask address. + + config STATIC_GW_ADDR + string "Static gateway address" + default "192.168.51.1" + help + Set static gateway address. endmenu diff --git a/main/main.c b/main/main.c index 5da149e..f8c1b80 100644 --- a/main/main.c +++ b/main/main.c @@ -14,6 +14,7 @@ #include #include #include +#include "esp_wifi_types_generic.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" @@ -40,6 +41,8 @@ #include "nvs_flash.h" #include "esp_eth.h" +#include + #define EXAMPLE_HTTP_QUERY_KEY_MAX_LEN (64) // GPIO pin definition. Use menu config to choose GPIO @@ -53,6 +56,9 @@ #define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID #define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD +#define STATIC_IP_ADDR CONFIG_STATIC_IP_ADDR +#define STATIC_NETMASK_ADDR CONFIG_STATIC_NETMASK_ADDR +#define STATIC_GW_ADDR CONFIG_STATIC_GW_ADDR #if CONFIG_ESP_WPA3_SAE_PWE_HUNT_AND_PECK #define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HUNT_AND_PECK @@ -93,11 +99,15 @@ static EventGroupHandle_t s_wifi_event_group; static const char *TAG = "devant"; +void set_static_ip(esp_netif_t *netif); + static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); + } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_CONNECTED) { + set_static_ip(arg); } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { esp_wifi_connect(); ESP_LOGI(TAG,"Retry connect to the AP"); @@ -171,6 +181,23 @@ void wifi_init_sta(void) } } +void set_static_ip(esp_netif_t *netif){ + if (esp_netif_dhcpc_stop(netif) != ESP_OK) { + ESP_LOGE(TAG, "Failed to stop dhcp client"); + return; + } + esp_netif_ip_info_t ip; + memset(&ip, 0 , sizeof(esp_netif_ip_info_t)); + ip.ip.addr = ipaddr_addr(STATIC_IP_ADDR); + ip.netmask.addr = ipaddr_addr(STATIC_NETMASK_ADDR); + ip.gw.addr = ipaddr_addr(STATIC_GW_ADDR); + if (esp_netif_set_ip_info(netif, &ip) != ESP_OK) { + ESP_LOGE(TAG, "Failed to set ip info"); + return; + } + ESP_LOGD(TAG, "Success to set static ip: %s, netmask: %s, gw: %s", STATIC_IP_ADDR, STATIC_NETMASK_ADDR, STATIC_GW_ADDR); +} + static atomic_bool status_one = false; static atomic_bool status_two = false;