From c363b2b7daacb4e654c950906be2a2efad9b20af Mon Sep 17 00:00:00 2001 From: Johnathon Slightham Date: Sun, 20 Jul 2025 20:53:12 -0400 Subject: [PATCH] Wifi configuration from NVS --- components/config/ConfigManager.cpp | 38 +++++++++++++++++++ components/config/include/ConfigManager.h | 8 ++++ .../constants/include/constants/config.h | 4 +- components/rpc/WifiManager.cpp | 11 ++++-- main/main.cpp | 1 - 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/components/config/ConfigManager.cpp b/components/config/ConfigManager.cpp index 53b29ca..34d6fbf 100644 --- a/components/config/ConfigManager.cpp +++ b/components/config/ConfigManager.cpp @@ -45,6 +45,29 @@ ModuleType ConfigManager::get_module_type() { return static_cast(type); } +std::string ConfigManager::get_wifi_ssid() { + return get_string(WIFI_SSID_KEY); +} + +std::string ConfigManager::get_wifi_password() { + return get_string(WIFI_PASSWORD_KEY); +} + +std::string ConfigManager::get_string(const char *key) { + nvs_handle config_handle; + nvs_open(NVS_FLASH_NAMESPACE, NVS_READONLY, &config_handle); + + size_t required_size; // get size of the string + nvs_get_str(config_handle, key, nullptr, &required_size); + + std::string str; + str.resize(required_size); + nvs_get_str(config_handle, key, str.data(), &required_size); + + nvs_close(config_handle); + return str; +} + void ConfigManager::set_module_id(const uint16_t id) { nvs_handle config_handle; nvs_open(NVS_FLASH_NAMESPACE, NVS_READWRITE, &config_handle); @@ -58,3 +81,18 @@ void ConfigManager::set_module_type(const ModuleType type) { nvs_set_u16(config_handle, MODULE_TYPE_KEY, type); nvs_close(config_handle); } + +void ConfigManager::set_wifi_ssid(const char* ssid) { + nvs_handle config_handle; + nvs_open(NVS_FLASH_NAMESPACE, NVS_READWRITE, &config_handle); + nvs_set_str(config_handle, WIFI_SSID_KEY, ssid); + nvs_close(config_handle); +} + +void ConfigManager::set_wifi_password(const char* password) { + nvs_handle config_handle; + nvs_open(NVS_FLASH_NAMESPACE, NVS_READWRITE, &config_handle); + nvs_set_str(config_handle, WIFI_PASSWORD_KEY, password); + nvs_close(config_handle); +} + diff --git a/components/config/include/ConfigManager.h b/components/config/include/ConfigManager.h index 7f938fe..4fc69dd 100644 --- a/components/config/include/ConfigManager.h +++ b/components/config/include/ConfigManager.h @@ -14,9 +14,17 @@ public: static uint16_t get_module_id(); static ModuleType get_module_type(); + static std::string get_wifi_ssid(); + static std::string get_wifi_password(); static void set_module_id(uint16_t id); static void set_module_type(ModuleType type); + static void set_wifi_ssid(const char* ssid); + static void set_wifi_password(const char* password); + +private: + static std::string get_string(const char* key); + }; #endif //CONFIGMANAGER_H diff --git a/components/constants/include/constants/config.h b/components/constants/include/constants/config.h index a7e7d7d..f5d14be 100644 --- a/components/constants/include/constants/config.h +++ b/components/constants/include/constants/config.h @@ -6,10 +6,12 @@ #define CONFIG_H #define NVS_FLASH_NAMESPACE "app" -#define DEFAULT_MODULE_ID 0 +#define DEFAULT_MODULE_ID 1 #define DEFAULT_MODULE_TYPE 0 #define MODULE_ID_KEY "module_id" #define MODULE_TYPE_KEY "module_type" +#define WIFI_SSID_KEY "wifi_ssid" +#define WIFI_PASSWORD_KEY "wifi_password" #endif //CONFIG_H diff --git a/components/rpc/WifiManager.cpp b/components/rpc/WifiManager.cpp index c4f3efb..87ea6ae 100644 --- a/components/rpc/WifiManager.cpp +++ b/components/rpc/WifiManager.cpp @@ -1,5 +1,6 @@ #include "WifiManager.h" +#include #include #include #include @@ -96,15 +97,19 @@ int WifiManager::init_connection() { esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_event_handler, this); esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, wifi_event_handler, this); - // TEMP: get config from nvs key value store wifi_config_t wifi_configuration; wifi_configuration = { .sta = { - .ssid = "", - .password = "", } }; + std::string ssid = ConfigManager::get_wifi_ssid(); + std::string pass = ConfigManager::get_wifi_password(); + std::strncpy(reinterpret_cast(wifi_configuration.sta.ssid), ssid.c_str(), 32); + std::strncpy(reinterpret_cast(wifi_configuration.sta.password), pass.c_str(), 64); + wifi_configuration.sta.ssid[31] = '\0'; + wifi_configuration.sta.password[63] = '\0'; + esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_set_config(static_cast(ESP_IF_WIFI_STA), &wifi_configuration); diff --git a/main/main.cpp b/main/main.cpp index 1c6aac6..89ad2c6 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -16,6 +16,5 @@ extern "C" [[noreturn]] void app_main(void) { ESP_LOGI("MEM", "Free PSRAM: %d", heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); ConfigManager::init_config(); - LoopManager::control_loop(); }