diff --git a/Firmware/EggbotWireless/include/Config.h b/Firmware/EggbotWireless/include/Config.h index f6bae29..a484e31 100644 --- a/Firmware/EggbotWireless/include/Config.h +++ b/Firmware/EggbotWireless/include/Config.h @@ -6,4 +6,6 @@ constexpr int i2cTimeout{10}, i2cTimeoutTries{10}; constexpr int lastStsTTL{1}; constexpr unsigned long powerTimeout{20000}, powerStartupDelay{100}; +constexpr const char *defSSID{"eggbot"}, *defPass{"eggbotwi"}; + #endif // CONFIG_H \ No newline at end of file diff --git a/Firmware/EggbotWireless/include/ConfigManager.h b/Firmware/EggbotWireless/include/ConfigManager.h index 079110e..8902903 100644 --- a/Firmware/EggbotWireless/include/ConfigManager.h +++ b/Firmware/EggbotWireless/include/ConfigManager.h @@ -14,8 +14,8 @@ class ConfigManager { public: std::unordered_map map; ConfigManager(); - std::string get(std::string &prop); - void update(std::string &prop, std::string &val); + std::string get(std::string prop); + void update(std::string prop, std::string val); void load(); void write(); void reset(); diff --git a/Firmware/EggbotWireless/include/WiFiManager.h b/Firmware/EggbotWireless/include/WiFiManager.h new file mode 100644 index 0000000..f89fd91 --- /dev/null +++ b/Firmware/EggbotWireless/include/WiFiManager.h @@ -0,0 +1,19 @@ +#ifndef WIFI_MANAGER_H +#define WIFI_MANAGER_H + +#include +#include + +#include "ConfigManager.h" + +class WiFiManager +{ +private: +public: + WiFiManager(); + void init(); +}; + +extern WiFiManager wifiManager; + +#endif // WIFI_MANAGER_H \ No newline at end of file diff --git a/Firmware/EggbotWireless/src/ConfigManager.cpp b/Firmware/EggbotWireless/src/ConfigManager.cpp index 75c499d..87af9df 100644 --- a/Firmware/EggbotWireless/src/ConfigManager.cpp +++ b/Firmware/EggbotWireless/src/ConfigManager.cpp @@ -1,14 +1,10 @@ #include "EEPROM.h" +#include "Config.h" #include "ConfigManager.h" const std::unordered_map defaults{ - {{"wifiClient", "off"}, - {"wifiClientSSID", ""}, - {"wifiClientPass", ""}, - {"wifiAP", "on"}, - {"wifiAPSSID", "eggbot"}, - {"wifiAPPASS", "eggbot"}}}; + {{"wifiMode", "ap"}, {"wifiSSID", defSSID}, {"wifiPass", defPass}}}; /* Max string length is 25 @@ -19,7 +15,7 @@ const std::unordered_map defaults{ ConfigManager::ConfigManager() { map.reserve(20); } -void ConfigManager::update(std::string &prop, std::string &val) { +void ConfigManager::update(std::string prop, std::string val) { if (prop == "good" || prop == "reset" || prop == "end") { return; } @@ -33,7 +29,7 @@ void ConfigManager::update(std::string &prop, std::string &val) { saved = false; } -std::string ConfigManager::get(std::string &prop) { +std::string ConfigManager::get(std::string prop) { auto valp = map.find(prop); if (valp != map.end()) { return valp->second; diff --git a/Firmware/EggbotWireless/src/WiFiManager.cpp b/Firmware/EggbotWireless/src/WiFiManager.cpp new file mode 100644 index 0000000..98e23a9 --- /dev/null +++ b/Firmware/EggbotWireless/src/WiFiManager.cpp @@ -0,0 +1,33 @@ +#include "WiFiManager.h" + +#include "Config.h" + +WiFiManager::WiFiManager(){}; + +void WiFiManager::init() { + if (configManager.get("wifiMode") == "client") { + WiFi.begin(configManager.get("wifiSSID").c_str(), + configManager.get("wifiPass").c_str()); + int status = WiFi.status(); + while (status != WL_CONNECTED && status != WL_NO_SSID_AVAIL && + status != WL_CONNECT_FAILED) { + delay(500); + status = WiFi.status(); + } + if (status == WL_NO_SSID_AVAIL || status == WL_CONNECT_FAILED) { + Serial.println("WiFi connection failed"); + configManager.update("wifiMode", "ap"); + configManager.update("wifiSSID", defSSID); + configManager.update("wifiPass", defPass); + } + } + + if (configManager.get("wifiMode") == "ap") { + WiFi.reconnect(); + Serial.println("Starting WiFi AP"); + WiFi.softAP(configManager.get("wifiSSID").c_str(), + configManager.get("wifiPass").c_str()); + } +} + +WiFiManager wifiManager; \ No newline at end of file diff --git a/Firmware/EggbotWireless/src/main.cpp b/Firmware/EggbotWireless/src/main.cpp index 5a9dfbd..a1bb29c 100644 --- a/Firmware/EggbotWireless/src/main.cpp +++ b/Firmware/EggbotWireless/src/main.cpp @@ -9,6 +9,7 @@ #include "GCodeParser.h" #include "Globals.h" #include "LocalExecutor.h" +#include "WiFiManager.h" #include "Power.h" #include "common/Commands.h" @@ -21,6 +22,7 @@ void setup() { Wire.begin(12, 13); power.enable12v(); configManager.load(); + wifiManager.init(); } void printSts(I2CStatusMsg status) {