Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build issues caused by external deps #71

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions adem/libraries/I2Cdev/I2Cdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ THE SOFTWARE.

#define MAX_RETRY 4

#ifdef ESP8266
#define min _min
#define max _max
#endif

#define BUFFER_LENGTH 64

class I2Cdev {
public:
I2Cdev();
Expand Down
33 changes: 0 additions & 33 deletions adem/libraries/WiFiManager/.travis.yml

This file was deleted.

25 changes: 15 additions & 10 deletions adem/libraries/WiFiManager/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## Current development going on here :arrow_right: [Development Branch](https://github.com/tzapu/WiFiManager/tree/development)

# WiFiManager
ESP8266 WiFi Connection manager with fallback web configuration portal

Expand Down Expand Up @@ -43,16 +45,19 @@ First attempt at a library. Lots more changes and fixes to do. Contributions are
![ESP8266 WiFi Captive Portal Homepage](http://i.imgur.com/YPvW9eql.png) ![ESP8266 WiFi Captive Portal Configuration](http://i.imgur.com/oicWJ4gl.png)

## Wishlist
- ~~remove dependency on EEPROM library~~
- ~~move HTML Strings to PROGMEM~~
- ~~cleanup and streamline code~~ (although this is ongoing)
- if timeout is set, extend it when a page is fetched in AP mode
- ~~add ability to configure more parameters than ssid/password~~
- ~~maybe allow setting ip of ESP after reboot~~
- ~~add to Arduino Library Manager~~
- ~~add to PlatformIO~~
- add multiple sets of network credentials
- ~~allow users to customize CSS~~
- [x] remove dependency on EEPROM library
- [x] move HTML Strings to PROGMEM
- [x] cleanup and streamline code (although this is ongoing)
- [x] if timeout is set, extend it when a page is fetched in AP mode
- [x] add ability to configure more parameters than ssid/password
- [x] maybe allow setting ip of ESP after reboot
- [x] add to Arduino Library Manager
- [x] add to PlatformIO
- [ ] add multiple sets of network credentials
- [x] allow users to customize CSS
- [ ] ESP32 support or instructions
- [ ] rewrite documentation for simplicity, based on scenarios/goals
- [ ] rely on the SDK's built in auto connect more than forcing a connect

## Quick Start

Expand Down
136 changes: 98 additions & 38 deletions adem/libraries/WiFiManager/WiFiManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
inspired by:
http://www.esp8266.com/viewtopic.php?f=29&t=2520
https://github.com/chriscook8/esp-arduino-apboot
https://github.com/esp8266/Arduino/tree/esp8266/hardware/esp8266com/esp8266/libraries/DNSServer/examples/CaptivePortalAdvanced
https://github.com/esp8266/Arduino/tree/master/libraries/DNSServer/examples/CaptivePortalAdvanced
Built by AlexT https://github.com/tzapu
Licensed under MIT license
**************************************************************/
Expand Down Expand Up @@ -34,7 +34,7 @@ void WiFiManagerParameter::init(const char *id, const char *placeholder, const c
_placeholder = placeholder;
_length = length;
_value = new char[length + 1];
for (int i = 0; i < length; i++) {
for (int i = 0; i < length + 1; i++) {
_value[i] = 0;
}
if (defaultValue != NULL) {
Expand All @@ -44,6 +44,12 @@ void WiFiManagerParameter::init(const char *id, const char *placeholder, const c
_customHTML = custom;
}

WiFiManagerParameter::~WiFiManagerParameter() {
if (_value != NULL) {
delete[] _value;
}
}

const char* WiFiManagerParameter::getValue() {
return _value;
}
Expand All @@ -60,14 +66,42 @@ const char* WiFiManagerParameter::getCustomHTML() {
return _customHTML;
}


WiFiManager::WiFiManager() {
_max_params = WIFI_MANAGER_MAX_PARAMS;
_params = (WiFiManagerParameter**)malloc(_max_params * sizeof(WiFiManagerParameter*));
}

void WiFiManager::addParameter(WiFiManagerParameter *p) {
WiFiManager::~WiFiManager()
{
if (_params != NULL)
{
DEBUG_WM(F("freeing allocated params!"));
free(_params);
}
}

bool WiFiManager::addParameter(WiFiManagerParameter *p) {
if(_paramsCount + 1 > _max_params)
{
// rezise the params array
_max_params += WIFI_MANAGER_MAX_PARAMS;
DEBUG_WM(F("Increasing _max_params to:"));
DEBUG_WM(_max_params);
WiFiManagerParameter** new_params = (WiFiManagerParameter**)realloc(_params, _max_params * sizeof(WiFiManagerParameter*));
if (new_params != NULL) {
_params = new_params;
} else {
DEBUG_WM(F("ERROR: failed to realloc params, size not increased!"));
return false;
}
}

_params[_paramsCount] = p;
_paramsCount++;
DEBUG_WM("Adding parameter");
DEBUG_WM(F("Adding parameter"));
DEBUG_WM(p->getID());
return true;
}

void WiFiManager::setupConfigPortal() {
Expand Down Expand Up @@ -109,14 +143,14 @@ void WiFiManager::setupConfigPortal() {
dnsServer->start(DNS_PORT, "*", WiFi.softAPIP());

/* Setup web pages: root, wifi config pages, SO captive portal detectors and not found. */
server->on("/", std::bind(&WiFiManager::handleRoot, this));
server->on("/wifi", std::bind(&WiFiManager::handleWifi, this, true));
server->on("/0wifi", std::bind(&WiFiManager::handleWifi, this, false));
server->on("/wifisave", std::bind(&WiFiManager::handleWifiSave, this));
server->on("/i", std::bind(&WiFiManager::handleInfo, this));
server->on("/r", std::bind(&WiFiManager::handleReset, this));
server->on(String(F("/")), std::bind(&WiFiManager::handleRoot, this));
server->on(String(F("/wifi")), std::bind(&WiFiManager::handleWifi, this, true));
server->on(String(F("/0wifi")), std::bind(&WiFiManager::handleWifi, this, false));
server->on(String(F("/wifisave")), std::bind(&WiFiManager::handleWifiSave, this));
server->on(String(F("/i")), std::bind(&WiFiManager::handleInfo, this));
server->on(String(F("/r")), std::bind(&WiFiManager::handleReset, this));
//server->on("/generate_204", std::bind(&WiFiManager::handle204, this)); //Android/Chrome OS captive portal check.
server->on("/fwlink", std::bind(&WiFiManager::handleRoot, this)); //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler.
server->on(String(F("/fwlink")), std::bind(&WiFiManager::handleRoot, this)); //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler.
server->onNotFound (std::bind(&WiFiManager::handleNotFound, this));
server->begin(); // Web server start
DEBUG_WM(F("HTTP server started"));
Expand Down Expand Up @@ -149,10 +183,34 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) {
return startConfigPortal(apName, apPassword);
}

boolean WiFiManager::configPortalHasTimeout(){
if(_configPortalTimeout == 0 || wifi_softap_get_station_num() > 0){
_configPortalStart = millis(); // kludge, bump configportal start time to skew timeouts
return false;
}
return (millis() > _configPortalStart + _configPortalTimeout);
}

boolean WiFiManager::startConfigPortal() {
String ssid = "ESP" + String(ESP.getChipId());
return startConfigPortal(ssid.c_str(), NULL);
}

boolean WiFiManager::startConfigPortal(char const *apName, char const *apPassword) {
//setup AP
WiFi.mode(WIFI_AP_STA);
DEBUG_WM("SET AP STA");

if(!WiFi.isConnected()){
WiFi.persistent(false);
// disconnect sta, start ap
WiFi.disconnect(); // this alone is not enough to stop the autoconnecter
WiFi.mode(WIFI_AP);
WiFi.persistent(true);
}
else {
//setup AP
WiFi.mode(WIFI_AP_STA);
DEBUG_WM(F("SET AP STA"));
}


_apName = apName;
_apPassword = apPassword;
Expand All @@ -165,7 +223,11 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo
connect = false;
setupConfigPortal();

while (_configPortalTimeout == 0 || millis() < _configPortalStart + _configPortalTimeout) {
while(1){

// check if timeout
if(configPortalHasTimeout()) break;

//DNS
dnsServer->processNextRequest();
//HTTP
Expand Down Expand Up @@ -222,35 +284,37 @@ int WiFiManager::connectWifi(String ssid, String pass) {
}
//fix for auto connect racing issue
if (WiFi.status() == WL_CONNECTED) {
DEBUG_WM("Already connected. Bailing out.");
DEBUG_WM(F("Already connected. Bailing out."));
return WL_CONNECTED;
}
//check if we have ssid and pass and force those, if not, try with last saved values
if (ssid != "") {
WiFi.begin(ssid.c_str(), pass.c_str());
} else {
if (WiFi.SSID()) {
DEBUG_WM("Using last saved values, should be faster");
DEBUG_WM(F("Using last saved values, should be faster"));
//trying to fix connection in progress hanging
ETS_UART_INTR_DISABLE();
wifi_station_disconnect();
ETS_UART_INTR_ENABLE();

WiFi.begin();
} else {
DEBUG_WM("No saved credentials");
DEBUG_WM(F("No saved credentials"));
}
}

int connRes = waitForConnectResult();
DEBUG_WM ("Connection result: ");
DEBUG_WM ( connRes );
//not connected, WPS enabled, no pass - first attempt
#ifdef NO_EXTRA_4K_HEAP
if (_tryWPS && connRes != WL_CONNECTED && pass == "") {
startWPS();
//should be connected at the end of WPS
connRes = waitForConnectResult();
}
#endif
return connRes;
}

Expand Down Expand Up @@ -278,9 +342,9 @@ uint8_t WiFiManager::waitForConnectResult() {
}

void WiFiManager::startWPS() {
DEBUG_WM("START WPS");
DEBUG_WM(F("START WPS"));
WiFi.beginWPSConfig();
DEBUG_WM("END WPS");
DEBUG_WM(F("END WPS"));
}
/*
String WiFiManager::getSSID() {
Expand Down Expand Up @@ -362,13 +426,14 @@ void WiFiManager::handleRoot() {
page += FPSTR(HTTP_STYLE);
page += _customHeadElement;
page += FPSTR(HTTP_HEAD_END);
page += "<h1>";
page += String(F("<h1>"));
page += _apName;
page += "</h1>";
page += F("<h3>WiFiManager</h3>");
page += String(F("</h1>"));
page += String(F("<h3>WiFiManager</h3>"));
page += FPSTR(HTTP_PORTAL_OPTIONS);
page += FPSTR(HTTP_END);

server->sendHeader("Content-Length", String(page.length()));
server->send(200, "text/html", page);

}
Expand Down Expand Up @@ -459,7 +524,7 @@ void WiFiManager::handleWifi(boolean scan) {
}

page += FPSTR(HTTP_FORM_START);
char parLength[2];
char parLength[5];
// add the extra parameters to the form
for (int i = 0; i < _paramsCount; i++) {
if (_params[i] == NULL) {
Expand All @@ -471,7 +536,7 @@ void WiFiManager::handleWifi(boolean scan) {
pitem.replace("{i}", _params[i]->getID());
pitem.replace("{n}", _params[i]->getID());
pitem.replace("{p}", _params[i]->getPlaceholder());
snprintf(parLength, 2, "%d", _params[i]->getValueLength());
snprintf(parLength, 5, "%d", _params[i]->getValueLength());
pitem.replace("{l}", parLength);
pitem.replace("{v}", _params[i]->getValue());
pitem.replace("{c}", _params[i]->getCustomHTML());
Expand Down Expand Up @@ -522,6 +587,7 @@ void WiFiManager::handleWifi(boolean scan) {

page += FPSTR(HTTP_END);

server->sendHeader("Content-Length", String(page.length()));
server->send(200, "text/html", page);


Expand All @@ -544,7 +610,7 @@ void WiFiManager::handleWifiSave() {
//read parameter
String value = server->arg(_params[i]->getID()).c_str();
//store it in array
value.toCharArray(_params[i]->_value, _params[i]->_length);
value.toCharArray(_params[i]->_value, _params[i]->_length + 1);
DEBUG_WM(F("Parameter"));
DEBUG_WM(_params[i]->getID());
DEBUG_WM(value);
Expand Down Expand Up @@ -579,6 +645,7 @@ void WiFiManager::handleWifiSave() {
page += FPSTR(HTTP_SAVED);
page += FPSTR(HTTP_END);

server->sendHeader("Content-Length", String(page.length()));
server->send(200, "text/html", page);

DEBUG_WM(F("Sent wifi save page"));
Expand Down Expand Up @@ -621,6 +688,7 @@ void WiFiManager::handleInfo() {
page += F("</dl>");
page += FPSTR(HTTP_END);

server->sendHeader("Content-Length", String(page.length()));
server->send(200, "text/html", page);

DEBUG_WM(F("Sent info page"));
Expand All @@ -638,6 +706,8 @@ void WiFiManager::handleReset() {
page += FPSTR(HTTP_HEAD_END);
page += F("Module will reset in a few seconds.");
page += FPSTR(HTTP_END);

server->sendHeader("Content-Length", String(page.length()));
server->send(200, "text/html", page);

DEBUG_WM(F("Sent reset page"));
Expand All @@ -646,17 +716,6 @@ void WiFiManager::handleReset() {
delay(2000);
}



//removed as mentioned here https://github.com/tzapu/WiFiManager/issues/114
/*void WiFiManager::handle204() {
DEBUG_WM(F("204 No Response"));
server->sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
server->sendHeader("Pragma", "no-cache");
server->sendHeader("Expires", "-1");
server->send ( 204, "text/plain", "");
}*/

void WiFiManager::handleNotFound() {
if (captivePortal()) { // If captive portal redirect instead of displaying the error page.
return;
Expand All @@ -676,6 +735,7 @@ void WiFiManager::handleNotFound() {
server->sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
server->sendHeader("Pragma", "no-cache");
server->sendHeader("Expires", "-1");
server->sendHeader("Content-Length", String(message.length()));
server->send ( 404, "text/plain", message );
}

Expand Down Expand Up @@ -737,7 +797,7 @@ int WiFiManager::getRSSIasQuality(int RSSI) {

/** Is this an IP? */
boolean WiFiManager::isIp(String str) {
for (int i = 0; i < str.length(); i++) {
for (size_t i = 0; i < str.length(); i++) {
int c = str.charAt(i);
if (c != '.' && (c < '0' || c > '9')) {
return false;
Expand Down
Loading