diff --git a/Arduino/CanGrow/CanGrow.ino b/Arduino/CanGrow/CanGrow.ino index ca4d952..bdfc28d 100644 --- a/Arduino/CanGrow/CanGrow.ino +++ b/Arduino/CanGrow/CanGrow.ino @@ -45,9 +45,11 @@ float valHumidity; bool configured; char WIFIssid[32]; char WIFIpassword[64]; +//int WIFIssidsAvail; IPAddress WIFIip(192,168,4,20); IPAddress WIFInetmask(255,255,255,0); IPAddress WIFIgateway(192,168,4,254); +IPAddress WIFIdns(0,0,0,0); // GrowName - contains the name of the grow/plant. Up to 32 byte char GrowName[32]; @@ -91,8 +93,14 @@ byte SoilmoistureLow; * WiFi */ -const char *APssid = "CanGrow-unconfigured"; -const char *APpass = "CanGrow"; +const char* APssid = "CanGrow-unconfigured"; +/* + * TODO - does not work atm. idk why. + * const char* APpass = "CanGrow"; +const int APchannel = 6; +const bool APhidden = false; +* +*/ /* @@ -424,7 +432,7 @@ void wipeEEPROM() { bool loadEEPROM() { - + Serial.println(":: loading EEPROM ::"); /* * configured * @@ -433,6 +441,8 @@ bool loadEEPROM() { * would be at the beginning - more a cosmetic thing */ EEPROM.get(511, configured); + Serial.print("configured: "); + Serial.println(configured); // when configured is > 1 (it should == 1) then read EEPROM furher data if(configured > 0) { @@ -452,6 +462,8 @@ bool loadEEPROM() { EEPROM.get(112, WIFInetmask); // read var WIFIgateway from address 128, 16 byte long EEPROM.get(128, WIFIgateway); + // read var WIFIgateway from address 128, 16 byte long + EEPROM.get(144, WIFIdns); /* * Grow data @@ -466,16 +478,45 @@ bool loadEEPROM() { Serial.print("WIFIssid: "); Serial.println(WIFIssid); Serial.print("WIFIpassword: "); - Serial.println(WIFIpassword); + Serial.println(WIFIpassword); } - - - Serial.print("configured: "); - Serial.println(configured); + Serial.println(":: EEPROM loaded ::"); return(configured); } +void wifiConnect() { + Serial.println(":: Connecting to WiFi ::"); + Serial.print("SSID: "); + Serial.println(WIFIssid); + + // Start WiFi connection + WiFi.begin(WIFIssid, WIFIpassword); + WiFi.config(WIFIip, WIFIdns, WIFIgateway); + + // wait until WiFi connection is established + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(" CONNECTED!"); + Serial.print("IP: "); + Serial.println(WiFi.localIP()); +} + +void wifiAp() { + Serial.println(":: Creating Accesspoint ::"); + + // configure WiFi Access Point + WiFi.softAPConfig(WIFIip, WIFIgateway, WIFInetmask); + // start Access Point + // TODO make AP with password - does not work atm. idk why. + WiFi.softAP(APssid); + Serial.print("SSID: "); + Serial.println(APssid); + Serial.print("CanGrow IP address: "); + Serial.println(WiFi.softAPIP()); +} /* * Setup @@ -554,42 +595,21 @@ void setup() { */ - // load stored values from EEPROM + // load stored values from EEPROM and check what var configured is returned if(loadEEPROM()) { - Serial.print("Configuration found in EEPROM, connect to Wifi "); - Serial.println(WIFIssid); - - // Start WiFi connection - WiFi.begin(WIFIssid, WIFIpassword); - - // wait until WiFi connection is established - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - Serial.println(" CONNECTED!"); - Serial.print("IP: "); - Serial.println(WiFi.localIP()); + + // connect to wifi + wifiConnect(); - // use webhandlers for configured state + // use webhandler for configured state WebHandler_configured(); - // no data found in EEPROM, setup Access Point - } else { - Serial.println("Creating Accesspoint"); - Serial.print("SSID: "); - Serial.println(APssid); - Serial.print("Password: "); - Serial.println(APpass); - - // configure WiFi Access Point - WiFi.softAPConfig(WIFIip, WIFIgateway, WIFInetmask); - // start Access Point - WiFi.softAP(APssid, APpass); - Serial.print("CanGrow IP address: "); - Serial.println(WiFi.softAPIP()); - - // use webhandlers for unconfigured state + // configured is 0, setup Access Point + } else { + + // start an wifi accesspoint + wifiAp(); + // use webhandler for unconfigured state WebHandler_unconfigured(); } @@ -627,10 +647,20 @@ void loop() { } void WebHandler_unconfigured() { - webserver.on("/", HTTP_GET, WEBrootAP); + /* + * WebHandler_unconfigured() + * + * Here all URL routings are defined, in unconfigured state + */ + webserver.on("/", HTTP_GET, WEBrootUnconfigured); } void WebHandler_configured() { + /* + * WebHandler_unconfigured() + * + * Here all URL routings are defined, in configured state + */ webserver.on("/", HTTP_GET, WEBroot); } @@ -640,6 +670,37 @@ void WebHandler_configured() { * */ +void WEB404() { + String body = FPSTR(HTMLheader); + body += "404 - not found"; + body += FPSTR(HTMLfooter); +} + +void WEBrootUnconfigured() { + byte ssidsAvail = WiFi.scanNetworks(); + String body = FPSTR(HTMLheader); + body += "
Available WiFi
"; + for(int i = 0 ; i < ssidsAvail; i++) { + body += WiFi.SSID(ssidsAvail); + body += "\n"; + } + body += ""; + body += FPSTR(HTMLfooter); + + webserver.send(200, "text/html", body); +} + void WEBroot() { String body = FPSTR(HTMLheader); @@ -649,30 +710,6 @@ void WEBroot() { webserver.send(200, "text/html", body); } -void WEBrootAP() { - - String body = FPSTR(HTMLheader); - body += "