diff --git a/tools/esp8266/ahoywifi.cpp b/tools/esp8266/ahoywifi.cpp
index 38863e05..7a78cec0 100644
--- a/tools/esp8266/ahoywifi.cpp
+++ b/tools/esp8266/ahoywifi.cpp
@@ -141,6 +141,14 @@ bool ahoywifi::setupStation(uint32_t timeout) {
}
WiFi.mode(WIFI_STA);
+ if(mConfig->staticIp.ip[0] != 0) {
+ IPAddress ip(mConfig->staticIp.ip);
+ IPAddress mask(mConfig->staticIp.mask);
+ IPAddress dns(mConfig->staticIp.dns);
+ IPAddress gateway(mConfig->staticIp.gateway);
+ if(!WiFi.config(ip, gateway, mask, dns))
+ DPRINTLN(DBG_ERROR, F("failed to set static IP!"));
+ }
WiFi.begin(mSysCfg->stationSsid, mSysCfg->stationPwd);
if(String(mSysCfg->deviceName) != "")
WiFi.hostname(mSysCfg->deviceName);
diff --git a/tools/esp8266/defines.h b/tools/esp8266/defines.h
index b3bc8a2f..eb1163ce 100644
--- a/tools/esp8266/defines.h
+++ b/tools/esp8266/defines.h
@@ -126,6 +126,17 @@ typedef struct {
#pragma pack(pop) // restore original alignment from stack
+#pragma pack(push) // push current alignment to stack
+#pragma pack(1) // set alignment to 1 byte boundary
+typedef struct {
+ uint8_t ip[4]; // ip address
+ uint8_t mask[4]; // sub mask
+ uint8_t dns[4]; // dns
+ uint8_t gateway[4]; // standard gateway
+} staticIp_t;
+#pragma pack(pop) // restore original alignment from stack
+
+
#pragma pack(push) // push current alignment to stack
#pragma pack(1) // set alignment to 1 byte boundary
typedef struct {
@@ -160,8 +171,8 @@ typedef struct {
bool serialShowIv;
bool serialDebug;
- // static ip placeholder
- uint32_t staticIp[4];
+ // static ip
+ staticIp_t staticIp;
} config_t;
#pragma pack(pop) // restore original alignment from stack
diff --git a/tools/esp8266/html/setup.html b/tools/esp8266/html/setup.html
index 6dac4c84..4a9b70ef 100644
--- a/tools/esp8266/html/setup.html
+++ b/tools/esp8266/html/setup.html
@@ -57,6 +57,21 @@
+