Add possibility to reset wifi credentials.

This commit is contained in:
2023-09-05 01:23:18 +02:00
parent f402d31be5
commit 9d98a39724
4 changed files with 601 additions and 565 deletions

View File

@@ -49,8 +49,9 @@ typedef enum
#define PERIOD_TIME_VISU_UPDATE_US (1 * 1000 * 1000) // 1s #define PERIOD_TIME_VISU_UPDATE_US (1 * 1000 * 1000) // 1s
#define TIMEOUT_LEDDIRECT_US (5 * 1000 * 1000) // 5s #define TIMEOUT_LEDDIRECT_US (5 * 1000 * 1000) // 5s
#define SHORT_PRESS_US (100 * 1000) // 100ms #define SHORT_PRESS_US (100 * 1000) // 100ms
#define LONG_PRESS_US (2 * 1000 * 1000) // 2s #define LONG_PRESS_US (2 * 1000 * 1000) // 2s
#define VERY_LONG_PRESS_US (10 * 1000 * 1000) // 10s
// Current limit // Current limit
#define CURRENT_LIMIT_LED 2500 // limit the total current consumed by LEDs (mA) #define CURRENT_LIMIT_LED 2500 // limit the total current consumed by LEDs (mA)
@@ -65,5 +66,4 @@ typedef enum
#define MATRIX_WIDTH 11 #define MATRIX_WIDTH 11
#define MATRIX_HEIGHT 11 #define MATRIX_HEIGHT 11
#endif /* WORDCLOCK_CONSTANTS_H */ #endif /* WORDCLOCK_CONSTANTS_H */

View File

@@ -43,6 +43,7 @@ void handle_led_direct(void);
void load_main_color(void); void load_main_color(void);
void ntp_time_update(uint32 *last_ntp_update_us); void ntp_time_update(uint32 *last_ntp_update_us);
void on_state_entry(uint8_t state); void on_state_entry(uint8_t state);
void reset_wifi_credentials(void);
void send_heartbeat(void); void send_heartbeat(void);
void set_main_color(uint8_t red, uint8_t green, uint8_t blue); void set_main_color(uint8_t red, uint8_t green, uint8_t blue);
void set_night_mode(bool on); void set_night_mode(bool on);

File diff suppressed because it is too large Load Diff

View File

@@ -94,6 +94,7 @@ static Tetris tetris = Tetris(&led_matrix, &logger);
static bool night_mode = false; // stores state of nightmode static bool night_mode = false; // stores state of nightmode
static bool state_auto_change = false; // stores state of automatic state change static bool state_auto_change = false; // stores state of automatic state change
static bool reset_wifi_creds = false; // used to reset stored wifi credentials
static float filter_factor = DEFAULT_SMOOTHING_FACTOR; // stores smoothing factor for led transition static float filter_factor = DEFAULT_SMOOTHING_FACTOR; // stores smoothing factor for led transition
static uint32_t main_color_clock = colors_24bit[2]; // color of the clock and digital clock static uint32_t main_color_clock = colors_24bit[2]; // color of the clock and digital clock
static uint32_t main_color_snake = colors_24bit[1]; // color of the random snake animation static uint32_t main_color_snake = colors_24bit[1]; // color of the random snake animation
@@ -146,11 +147,11 @@ void setup()
led_matrix.draw_on_matrix_instant(); led_matrix.draw_on_matrix_instant();
/* Use WiFiMaanger for handling initial Wifi setup */ /* Use WiFiMaanger for handling initial Wifi setup */
WiFiManager wifiManager; // Local intialization. Once its business is done, there is no need to keep it around WiFiManager wifi_manager; // Local intialization. Once its business is done, there is no need to keep it around
/* fetches ssid and pass from eeprom and tries to connect. if it does not connect it starts an access point with /* fetches ssid and pass from eeprom and tries to connect. if it does not connect it starts an access point with
* the specified name and goes into a blocking loop awaiting configuration. */ * the specified name and goes into a blocking loop awaiting configuration. */
wifiManager.autoConnect(AP_SSID); wifi_manager.autoConnect(AP_SSID);
// If you get here you have connected to the WiFi // If you get here you have connected to the WiFi
Serial.printf("Connected, IP address: "); Serial.printf("Connected, IP address: ");
@@ -302,6 +303,7 @@ void loop()
{ {
send_heartbeat(); // send heartbeat update send_heartbeat(); // send heartbeat update
last_heartbeat_us = system_get_time(); last_heartbeat_us = system_get_time();
delay(10);
} }
if (!night_mode && ((current_time_us - last_animation_step_us) > PERIODS[state_auto_change][current_state]) && ((current_time_us - last_led_direct_us) > TIMEOUT_LEDDIRECT_US)) if (!night_mode && ((current_time_us - last_animation_step_us) > PERIODS[state_auto_change][current_state]) && ((current_time_us - last_led_direct_us) > TIMEOUT_LEDDIRECT_US))
@@ -455,8 +457,8 @@ void update_matrix()
*/ */
void send_heartbeat() void send_heartbeat()
{ {
logger.log_string("Heartbeat, current state: " + state_names[current_state] + ", counter: " + logger.log_string("Current state: " + state_names[current_state] + ", counter: " +
heartbeat_counter + ", on-time: " + (float)(heartbeat_counter) / 3600.0 + "h\n"); heartbeat_counter + ", on-time: " + (float)(heartbeat_counter) / 3600.0 + "h\n");
heartbeat_counter++; heartbeat_counter++;
} }
@@ -700,7 +702,13 @@ void handle_button()
if (button_pressed == false && last_button_state == true) if (button_pressed == false && last_button_state == true)
{ {
// button press ended // button press ended
if ((system_get_time() - button_press_start) > LONG_PRESS_US) if ((system_get_time() - button_press_start) > VERY_LONG_PRESS_US)
{
// longpress -> reset wifi creds and restart ESP
logger.log_string("Button press ended - very long press -> Reset Wifi creds.");
reset_wifi_credentials();
}
else if ((system_get_time() - button_press_start) > LONG_PRESS_US)
{ {
// longpress -> nightmode // longpress -> nightmode
logger.log_string("Button press ended - long press"); logger.log_string("Button press ended - long press");
@@ -828,16 +836,18 @@ void handle_command()
} }
else if (webserver.argName(0).equals("setting")) else if (webserver.argName(0).equals("setting"))
{ {
String time_str = webserver.arg(0) + "-"; String cmd_str = webserver.arg(0) + "-";
logger.log_string("Nightmode setting change via Webserver to: " + time_str); logger.log_string("Nightmode setting change via Webserver to: " + cmd_str);
night_mode_times.start_hour = split(time_str, '-', 0).toInt(); night_mode_times.start_hour = split(cmd_str, '-', 0).toInt();
night_mode_times.start_min = split(time_str, '-', 1).toInt(); night_mode_times.start_min = split(cmd_str, '-', 1).toInt();
night_mode_times.end_hour = split(time_str, '-', 2).toInt(); night_mode_times.end_hour = split(cmd_str, '-', 2).toInt();
night_mode_times.end_min = split(time_str, '-', 3).toInt(); night_mode_times.end_min = split(cmd_str, '-', 3).toInt();
brightness = split(time_str, '-', 4).toInt(); brightness = split(cmd_str, '-', 4).toInt();
reset_wifi_creds = split(cmd_str, '-', 5).toInt() > 0 ? true : false;
if (brightness < 10) if (brightness < 10)
{ {
brightness = 10; brightness = 10; // minimum brightness
} }
if (night_mode_times.start_hour < 0 || night_mode_times.start_hour > 23) if (night_mode_times.start_hour < 0 || night_mode_times.start_hour > 23)
{ {
@@ -855,6 +865,10 @@ void handle_command()
{ {
night_mode_times.end_min = NIGHTMODE_END_MIN; night_mode_times.end_min = NIGHTMODE_END_MIN;
} }
if (reset_wifi_creds == true)
{
reset_wifi_credentials(); // this function will not return
}
EEPROM_write_to_address(ADR_NM_START_H, night_mode_times.start_hour); EEPROM_write_to_address(ADR_NM_START_H, night_mode_times.start_hour);
EEPROM_write_to_address(ADR_NM_START_M, night_mode_times.start_min); EEPROM_write_to_address(ADR_NM_START_M, night_mode_times.start_min);
@@ -1040,3 +1054,15 @@ String leading_zero2digit(int value)
msg += String(value); msg += String(value);
return msg; return msg;
} }
/**
* @brief Reset Wifi credentials and restart ESP. This function will not return.
*
*/
void reset_wifi_credentials()
{
WiFiManager wifi_manager;
wifi_manager.resetSettings();
delay(200);
ESP.restart();
}