diff --git a/Software/Software.ino b/Software/Software.ino index 2a711ec1..6c0f0030 100644 --- a/Software/Software.ino +++ b/Software/Software.ino @@ -26,9 +26,15 @@ #include "src/datalayer/datalayer.h" #ifdef WEBSERVER -#include #include "src/devboard/webserver/webserver.h" -#endif +#ifdef MDNSRESPONDER +#include +#endif // MDNSRESONDER +#else // WEBSERVER +#ifdef MDNSRESPONDER +#error WEBSERVER needs to be enabled for MDNSRESPONDER! +#endif // MDNSRSPONDER +#endif // WEBSERVER Preferences settings; // Store user settings // The current software version, shown on webserver @@ -167,7 +173,9 @@ void loop() { void connectivity_loop(void* task_time_us) { // Init init_webserver(); +#ifdef MDNSRESPONDER init_mDNS(); +#endif #ifdef MQTT init_mqtt(); #endif @@ -286,7 +294,7 @@ void core_loop(void* task_time_us) { } } -#ifdef WEBSERVER +#ifdef MDNSRESPONDER // Initialise mDNS void init_mDNS() { @@ -305,7 +313,7 @@ void init_mDNS() { MDNS.addService("battery_emulator", "tcp", 80); } } -#endif +#endif // MDNSRESPONDER // Initialization functions void init_serial() { @@ -928,19 +936,19 @@ void receive_can(CAN_frame* rx_frame, int interface) { if (interface == can_config.battery) { receive_can_battery(*rx_frame); } - if (interface == can_config.inverter) { #ifdef CAN_INVERTER_SELECTED + if (interface == can_config.inverter) { receive_can_inverter(*rx_frame); -#endif } - if (interface == can_config.battery_double) { +#endif #ifdef DOUBLE_BATTERY + if (interface == can_config.battery_double) { receive_can_battery2(*rx_frame); -#endif } - if (interface == can_config.charger) { +#endif #ifdef CHARGER_SELECTED + if (interface == can_config.charger) { receive_can_charger(*rx_frame); -#endif } +#endif } diff --git a/Software/USER_SETTINGS.cpp b/Software/USER_SETTINGS.cpp index 0171c248..71065018 100644 --- a/Software/USER_SETTINGS.cpp +++ b/Software/USER_SETTINGS.cpp @@ -14,17 +14,22 @@ CAN_ADDON_FD_MCP2518 = Add-on CAN-FD MCP2518 connected to GPIO pins volatile CAN_Configuration can_config = { .battery = CAN_NATIVE, // Which CAN is your battery connected to? .inverter = CAN_NATIVE, // Which CAN is your inverter connected to? (No need to configure incase you use RS485) +#ifdef DOUBLE_BATTERY .battery_double = CAN_ADDON_MCP2515, // (OPTIONAL) Which CAN is your second battery connected to? - .charger = CAN_NATIVE // (OPTIONAL) Which CAN is your charger connected to? +#endif +#ifdef CHARGER_SELECTED + .charger = CAN_NATIVE // (OPTIONAL) Which CAN is your charger connected to? +#endif }; #ifdef WEBSERVER -volatile uint8_t AccessPointEnabled = true; //Set to either true/false to enable direct wifi access point std::string ssid = "REPLACE_WITH_YOUR_SSID"; // Maximum of 63 characters; std::string password = "REPLACE_WITH_YOUR_PASSWORD"; // Minimum of 8 characters; -const char* ssidAP = "Battery Emulator"; // Maximum of 63 characters; +const char* ssidAP = "Battery Emulator"; // Maximum of 63 characters, also used for device name on web interface +#ifdef WIFIAP const char* passwordAP = "123456789"; // Minimum of 8 characters; set to NULL if you want the access point to be open -const uint8_t wifi_channel = 0; // Set to 0 for automatic channel selection +#endif +const uint8_t wifi_channel = 0; // Set to 0 for automatic channel selection // MQTT #ifdef MQTT const char* mqtt_user = "REDACTED"; diff --git a/Software/USER_SETTINGS.h b/Software/USER_SETTINGS.h index 551054c7..5e82cd5a 100644 --- a/Software/USER_SETTINGS.h +++ b/Software/USER_SETTINGS.h @@ -54,6 +54,8 @@ //#define SERIAL_LINK_RECEIVER //Enable this line to receive battery data over RS485 pins from another Lilygo (This LilyGo interfaces with inverter) //#define SERIAL_LINK_TRANSMITTER //Enable this line to send battery data over RS485 pins to another Lilygo (This LilyGo interfaces with battery) #define WEBSERVER //Enable this line to enable WiFi, and to run the webserver. See USER_SETTINGS.cpp for the Wifi settings. +#define MDNSRESPONDER //Enable this line to enable MDNS, allows battery monitor te be found by .local address. Requires WEBSERVER to be enabled. +#define WIFIAP //Enable this line to make battery monitor create an wifi access point. When disabled make sure to hardcode wifi settings to make battery emulator connect to you home wifi. #define LOAD_SAVED_SETTINGS_ON_BOOT //Enable this line to read settings stored via the webserver on boot (overrides Wifi/battery settings set below) //#define FUNCTION_TIME_MEASUREMENT // Enable this to record execution times and present them in the web UI (WARNING, raises CPU load, do not use for production) @@ -89,11 +91,14 @@ typedef enum { CAN_NATIVE = 0, CANFD_NATIVE = 1, CAN_ADDON_MCP2515 = 2, CAN_ADDO typedef struct { CAN_Interface battery; CAN_Interface inverter; +#ifdef DOUBLE_BATTERY CAN_Interface battery_double; +#endif +#ifdef CHARGER_SELECTED CAN_Interface charger; +#endif } CAN_Configuration; extern volatile CAN_Configuration can_config; -extern volatile uint8_t AccessPointEnabled; extern const uint8_t wifi_channel; extern volatile float charger_setpoint_HV_VDC; extern volatile float charger_setpoint_HV_IDC; diff --git a/Software/src/devboard/webserver/webserver.cpp b/Software/src/devboard/webserver/webserver.cpp index 449f1638..b6a6c37b 100644 --- a/Software/src/devboard/webserver/webserver.cpp +++ b/Software/src/devboard/webserver/webserver.cpp @@ -37,12 +37,12 @@ unsigned long last_wifi_attempt_time = millis(); //init millis so wifi monitor void init_webserver() { // Configure WiFi - if (AccessPointEnabled) { - WiFi.mode(WIFI_AP_STA); // Simultaneous WiFi AP and Router connection - init_WiFi_AP(); - } else { - WiFi.mode(WIFI_STA); // Only Router connection - } +#ifdef WIFIAP + WiFi.mode(WIFI_AP_STA); // Simultaneous WiFi AP and Router connection + init_WiFi_AP(); +#else + WiFi.mode(WIFI_STA); // Only Router connection +#endif init_WiFi_STA(ssid.c_str(), password.c_str(), wifi_channel); String content = index_html; @@ -286,6 +286,7 @@ void init_webserver() { #endif } +#ifdef WIFIAP void init_WiFi_AP() { #ifdef DEBUG_VIA_USB Serial.println("Creating Access Point: " + String(ssidAP)); @@ -299,6 +300,7 @@ void init_WiFi_AP() { Serial.println(IP); #endif } +#endif String getConnectResultString(wl_status_t status) { switch (status) { diff --git a/Software/src/devboard/webserver/webserver.h b/Software/src/devboard/webserver/webserver.h index 93d17fde..8829e1c4 100644 --- a/Software/src/devboard/webserver/webserver.h +++ b/Software/src/devboard/webserver/webserver.h @@ -23,7 +23,9 @@ extern std::string ssid; extern std::string password; extern const uint8_t wifi_channel; extern const char* ssidAP; +#ifdef WIFI_AP extern const char* passwordAP; +#endif // Common charger parameters extern float charger_stat_HVcur; @@ -54,6 +56,7 @@ void init_webserver(); */ void wifi_monitor(); +#ifdef WIFI_AP /** * @brief Initialization function that creates a WiFi Access Point. * @@ -62,6 +65,7 @@ void wifi_monitor(); * @return void */ void init_WiFi_AP(); +#endif /** * @brief Initialization function that connects to an existing network. diff --git a/platformio.ini b/platformio.ini index fe1d94e3..f7cca324 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,8 +14,8 @@ src_dir = ./Software [env:esp32dev] platform = espressif32 platform_packages= - framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.2 - framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.2/esp32-arduino-libs-3.0.2.zip + framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.4 + framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.4/esp32-arduino-libs-3.0.4.zip board = esp32dev monitor_speed = 115200 monitor_filters = default, time, log2file