feat: add support for build-time WiFi credentials from .env file
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -85,3 +85,6 @@ Desktop.ini
|
|||||||
|
|
||||||
# sample code
|
# sample code
|
||||||
sample-code/
|
sample-code/
|
||||||
|
|
||||||
|
.env
|
||||||
|
*.env
|
||||||
|
|||||||
@@ -3,6 +3,40 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
# target_compile_options(${COMPONENT_LIB} PRIVATE -std=c++23)
|
# target_compile_options(${COMPONENT_LIB} PRIVATE -std=c++23)
|
||||||
|
|
||||||
|
# Define the path to your .env file
|
||||||
|
set(ENV_FILE "${CMAKE_SOURCE_DIR}/.env")
|
||||||
|
|
||||||
|
# Check if the .env file exists
|
||||||
|
if(EXISTS ${ENV_FILE})
|
||||||
|
# Read the .env file line by line
|
||||||
|
file(STRINGS ${ENV_FILE} ENV_VARS)
|
||||||
|
|
||||||
|
foreach(VAR ${ENV_VARS})
|
||||||
|
# Use regex to extract the key and value
|
||||||
|
if (VAR MATCHES "([^=]+)=(.*)")
|
||||||
|
set(ENV{${CMAKE_MATCH_1}} ${CMAKE_MATCH_2})
|
||||||
|
message(STATUS "Loaded environment variable from .env: ${CMAKE_MATCH_1}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
|
message(STATUS ".env file not found at ${ENV_FILE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# If build-time WiFi environment variables were loaded above, expose them
|
||||||
|
# as compile-time definitions so C++ can use them.
|
||||||
|
if(DEFINED ENV{WIFI_SSID})
|
||||||
|
add_compile_definitions(BUILD_WIFI_SSID="$ENV{WIFI_SSID}")
|
||||||
|
message(STATUS "Added BUILD_WIFI_SSID compile definition")
|
||||||
|
else()
|
||||||
|
message(STATUS "WIFI_SSID not defined; skipping BUILD_WIFI_SSID compile definition")
|
||||||
|
endif()
|
||||||
|
if(DEFINED ENV{WIFI_PASSWORD})
|
||||||
|
add_compile_definitions(BUILD_WIFI_PASSWORD="$ENV{WIFI_PASSWORD}")
|
||||||
|
message(STATUS "Added BUILD_WIFI_PASSWORD compile definition")
|
||||||
|
else()
|
||||||
|
message(STATUS "WIFI_PASSWORD not defined; skipping BUILD_WIFI_PASSWORD compile definition")
|
||||||
|
endif()
|
||||||
|
|
||||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
# "Trim" the build. Include the minimal set of components, main, and anything it depends on.
|
# "Trim" the build. Include the minimal set of components, main, and anything it depends on.
|
||||||
idf_build_set_property(MINIMAL_BUILD ON)
|
idf_build_set_property(MINIMAL_BUILD ON)
|
||||||
|
|||||||
@@ -120,6 +120,19 @@ esp_err_t WifiHandler::init() {
|
|||||||
std::string password;
|
std::string password;
|
||||||
this->get_wifi_credentials(ssid, password);
|
this->get_wifi_credentials(ssid, password);
|
||||||
|
|
||||||
|
// If KV storage didn't provide credentials, allow build-time injected values
|
||||||
|
// via compile-time defines BUILD_WIFI_SSID and BUILD_WIFI_PASSWORD.
|
||||||
|
#if defined(BUILD_WIFI_SSID) and defined(BUILD_WIFI_PASSWORD)
|
||||||
|
if (ssid.empty()) {
|
||||||
|
ssid = std::string(BUILD_WIFI_SSID);
|
||||||
|
ESP_LOGI(TAG, "Using build-time injected WiFi SSID");
|
||||||
|
}
|
||||||
|
if (password.empty()) {
|
||||||
|
password = std::string(BUILD_WIFI_PASSWORD);
|
||||||
|
ESP_LOGI(TAG, "Using build-time injected WiFi password");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!ssid.empty() && !password.empty()) {
|
if (!ssid.empty() && !password.empty()) {
|
||||||
ESP_LOGI(TAG, "Found stored WiFi credentials, connecting to SSID: %s", ssid.c_str());
|
ESP_LOGI(TAG, "Found stored WiFi credentials, connecting to SSID: %s", ssid.c_str());
|
||||||
err = this->connect(ssid, password);
|
err = this->connect(ssid, password);
|
||||||
|
|||||||
Reference in New Issue
Block a user