Under the work of v0.9.7 documentation

pull/41/head
Hieromon Ikasamo 6 years ago
parent 58cfc4d799
commit 65f964e036
  1. 16
      mkdocs.yml
  2. 35
      mkdocs/acelements.md
  3. 7
      mkdocs/achandling.md
  4. 82
      mkdocs/acintro.md
  5. 1
      mkdocs/acjson.md
  6. 33
      mkdocs/advancedusage.md
  7. 329
      mkdocs/api.md
  8. 37
      mkdocs/apiaux.md
  9. 241
      mkdocs/apiconfig.md
  10. 24
      mkdocs/apiextra.md
  11. 2
      mkdocs/basicusage.md
  12. 11
      mkdocs/changelog.md
  13. 10
      mkdocs/css/paragraph.css
  14. 2
      mkdocs/examples.md
  15. 2
      mkdocs/gettingstarted.md
  16. 233
      mkdocs/images/ac_auxjoin_multi.svg
  17. BIN
      mkdocs/images/ac_auxmenu.png
  18. BIN
      mkdocs/images/ac_auxmenu_multi.png
  19. 677
      mkdocs/images/ac_declaration.svg
  20. 1401
      mkdocs/images/ac_objects.svg
  21. BIN
      mkdocs/images/aux_menu.gif
  22. BIN
      mkdocs/images/aux_ov.gif
  23. 15
      mkdocs/index.md

@ -8,13 +8,23 @@ site_url: 'https://Hieromon.github.io/AutoConnect/'
docs_dir: 'mkdocs' docs_dir: 'mkdocs'
# Pages # Pages
pages: nav:
- 'Overview' : index.md - 'Overview' : index.md
- 'Getting started' : gettingstarted.md - 'Getting started' : gettingstarted.md
- 'AutoConnect menu' : menu.md - 'AutoConnect menu' : menu.md
- 'Basic usage' : basicusage.md - 'Basic usage' : basicusage.md
- 'Advanced usage' : advancedusage.md - 'Advanced usage' : advancedusage.md
- 'Library APIs' : api.md - 'Custom Web pages' :
- 'Custom Web pages with AutoConnect' : acintro.md
- 'AutoConnectElements' : acelements.md
- 'AutoConnectAux with JSON' : acjson.md
- 'Handling AutoConnectAux' : achandling.md
- 'Library APIs' :
- 'AutoConnect API': api.md
- 'AutoConnectConfig API': apiconfig.md
- 'AutoConnectAux API': apiaux.md
- 'AutoConnectElements API': apielements.md
- 'Something extra': apiextra.md
- 'Examples' : examples.md - 'Examples' : examples.md
- 'FAQ' : faq.md - 'FAQ' : faq.md
- 'Change log' : changelog.md - 'Change log' : changelog.md
@ -62,10 +72,12 @@ google_analytics:
# Extensions # Extensions
markdown_extensions: markdown_extensions:
- attr_list
- admonition - admonition
- footnotes - footnotes
- pymdownx.betterem: - pymdownx.betterem:
smart_enable: all smart_enable: all
- pymdownx.caret
- pymdownx.critic - pymdownx.critic
- pymdownx.details - pymdownx.details
- pymdownx.inlinehilite - pymdownx.inlinehilite

@ -0,0 +1,35 @@
## The elements for the custome Web pages
Representative HTML elements for making the custom Web page are provided as AutoConnectElements.
- AutoConnectButton: Labeled action button
- AutoConnectCheckbox: Labeled checkbox
- AutoConnectElement: General tag
- AutoConnectInput: Labeled text input box
- AutoConnectRadio: Labeled radio button
- AutoConnectSelect: Selection list
- AutoConnectSubmit: Submit button
- AutoConnectText: Style attributed text
Each element has a common attribute and its own attributes.
## Layout on custom Web page
You can specify the direction to arrange the radio buttons as **AutoConnectRadio** vertically or horizontally. The checkbox as **AutoConnectCheckbox** is not divided in a line by each element. In order to arrange vertically, it is necessary to clearly indicate the **<br>** tag. Other elements are aligned vertically. This basic layout depends on the CSS of the AutoConnect menu so it can not be changed drastically.
## AutoConnectElement - <small>A basic class of elements</small>
## AutoConnectButton
## AutoConnectCheckbox
## AutoConnectInput
## AutoConnectRadio
## AutoConnectSelect
## AutoConnectSubmit
## AutoConnectText

@ -0,0 +1,7 @@
## loading and saving AutoConnectElements
## page transition
## Parameter handling

@ -0,0 +1,82 @@
## What it is
<span style="margin-left:20px;float:right;width:320px;height:550px;"><img data-gifffer="../images/aux_ov.gif" data-gifffer-width="320" data-gifffer-height="550" /></span>
AutoConnect can handle custom Web pages prepared by user sketches individually. Custom Web pages are displayed in the [AutoConnect menu](menu.md) and can be used from there. It can also have input-output parameters and handle it with sketches. For example, you can program some sketches that publish messages by entering the URI or unique ID of the MQTT broker on a custom page. You do not need to code the processing to handle the web page, it retrieves the input parameters and passes to the MQTT broker connection API is only.
## How it works
Custom Web pages are dynamically created by AutoConnect. The Classes and APIs necessary for dynamic creation are provided. **AutoConnectAux** is an object dependent on AutoConnect, which provides an easy way to incorporate custom Web pages like the one on the right figure into AutoConnect. The elements that make up a custom web page are provided as an [**AutoConnectElement**](acelements.md) class. Furthermore, an input box, a check box, a submit button, etc. are implemented by classes derived from AutoConnectElement.
<img src="../images/ac_objects.svg">
AutoConnectAux is a container for AutoConnectElements. To make a custom Web page, create elements that make up the page and put it in the AutoConnectAux object. Joining that AutoConnectAux object to AutoConnect will integrate the custom Web page into the AutoConnect menu.
<img src="../images/ac_declaration.svg">
The above figure shows a code sequence that declares AutoConnectElements and put in the AutoConnectAux container and integrates those into AutoConnect. Declare two text elements named &#39;*header*&#39;, &#39;*caption*&#39; and add those to the AutoConnectAux object *aux*. Bind it to an AutoConnect object called the &#39;*portal*&#39;. It's basic procedure for configuring the custom Web page. Also, further explanation of AutoConnectElements is the [documentation](acelements.md).
## Custom Web pages in AutoConnect menu
<ul class="horizontal-list">
<li><img style="margin:0 20px auto;float:left;width:320px;height:360px;" src="../images/ac_auxmenu.png">
Custom Web pages as AutoConnectAux are integrated into the <a href="menu.html">AutoConnect menu</a>. AutoConnectAux object owns title and URI as member variables. It also has an indicator to show on the AutoConnect menu. You give the title and URI of the custom web page to the AutoConnectAux object with Sketch. Then the title of the custom Web page is displayed at the bottom of the AutoConnect menu as the left figure.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup> It is a hyperlink as URI you given to the page and taps it will display the page composed of AutoConnectElements. The title is also shown to top left corner of the custom page, and a hyperlink to AutoConnect statistical screen is contained.</li>
</ul>
[^1]:There is no overlay in the actual menu.
## Multiple custom Web pages
You can create multiple custom pages, integrate them into the AutoConnect menu, and specify pages to invokes from the menu. The following code combines three AutoConnectAuxs to a AutoConnect object as &#39;*portal*&#39;.
<img align="center" width="520px" src="../images/ac_auxjoin_multi.svg">
<ul class="horizontal-list">
<li><span style="margin-left:20px;float:right;width:320px;height:550px;"><img data-gifffer="../images/aux_menu.gif" data-gifffer-width="320" data-gifffer-height="550" /></span><b>False</b> is specified as the third parameter of &#39;<i>aux2</i>&#39; in the above code. The third parameter of the AutoConnectAux constructor is an indicator of whether it's shown to the AutoConnect menu. Right animation is the execution result of the above code. You will see that the custom web page&#39;s menu is displayed only in the last two lines. Because &#39;<i>aux1</i>&#39; and &#39;<i>aux2</i>&#39; in this example have a pair of page transitions. The sketch of this animation is written to transition to &#39;<i>aux2</i>&#39; by the utility of the <b>AutoConnectSubmit</b> element owned by &#39;<i>aux1</i>&#39;.<sup id="fnref:2"><a class="footnote-ref" href="#fn:2" rel="footnote">2</a></sup><br>An &#39;<i>aux2</i>&#39; page transitions only from the submit button of &#39;<i>aux1</i>&#39;. It is a page that saves the parameters you entered on the previous page as shown in mqttRSSI in the library example. It is to want to hide &#39;<i>aux2</i>&#39; from AutoConnect menu lines. The third parameter of the AutoConnectAux constructor is used for this purpose.</li>
</ul>
## Basic steps to use custom Web pages
So, the basic procedure is as follows.
1. Create or define AutoConnectAux.
2. Create or define [AutoConnectElement(s)](acelements.md).
3. Add [AutoConnectElement(s)](acelements.md) to AutoConnectAux.
4. Create more AutoConnectAux containing [AutoConnectElement(s)](acelements.md), if necessary.
5. Join prepared AutoConnectAux(s) to [AutoConnect](api.md#autoconnect-api).
6. Invoke [AutoConnect::begin()](api.md#begin).
[^2]:
The sketch is actually this:
```cpp
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <AutoConnect.h>
AutoConnect portal;
ACText(header, "MQTT broker settings");
ACText(caption1, "Publishing the WiFi...");
ACSubmit(save, "SAVE", "/mqtt_save");
AutoConnectAux aux1("/mqtt_setting", "MQTT Setting", { header, caption1, save });
ACText(caption2, "Save parameters");
ACSubmit(start, "START", "/mqtt_start");
AutoConnectAux aux2("/mqtt_save", "MQTT Setting", false, { caption2, start });
AutoConnectAux aux3("/mqtt_start", "MQTT Start");
void setup() {
portal.join({ aux1, aux2, aux3 });
portal.begin();
}
void loop() {
portal.handleClient();
}
```
<script>
window.onload = function() {
Gifffer();
};
</script>

@ -0,0 +1 @@
To process the described AutoConnect element written in the JSON is you need to install the ArduinoJson library.

@ -134,6 +134,31 @@ Also, the placement of the EEPROM area of ESP32 is described in the [partition t
The [**boundaryOffset**](api.md#boundaryoffset) in [**AutoConnectConfig**](api.md#autoconnectconfig-api) specifies the start offset of the credentials storage area. The default value is 0. The [**boundaryOffset**](api.md#boundaryoffset) in [**AutoConnectConfig**](api.md#autoconnectconfig-api) specifies the start offset of the credentials storage area. The default value is 0.
### <i class="fa fa-caret-right"></i> On-demand start the captive portal
If you do not usually connect to WiFi and need to establish a WiFi connection if necessary, you can combine the [**autoRise**](api.md#autorise) option with the [**immediateStart**](api.md#immediatestart) option to achieve on-demand connection. This behavior is similar to the [WiFiManager's startConfigPortal](https://github.com/tzapu/WiFiManager#on-demand-configuration-portal) function. In order to do this, you usually configure only with AutoConnectConfig in *setup()* and [*AutoConnect::begin()*](api.md#begin) handles in *loop()*.
```arduino hl_lines="5 6"
AutoConnect Portal;
AutoConnectConfig Config;
void setup() {
Config.autoRise = false;
Config.immediateStart = true;
Portal.config(Config);
}
void loop() {
if (digitalRead(TRIGGER_PIN) == LOW) {
while (digitalRead(TRIGGER_PIN) == LOW)
yield();
Portal.begin();
}
Portal.handleClient();
}
```
The above example does not connect to WiFi until TRIGGER\_PIN goes LOW. When TRIGGER\_PIN goes LOW, the captive portal starts and you can connect to WiFi. Even if you reset the module, it will not automatically reconnect.
### <i class="fa fa-caret-right"></i> Refers the hosted ESP8266WebServer/WebServer ### <i class="fa fa-caret-right"></i> Refers the hosted ESP8266WebServer/WebServer
Constructing an AutoConnect object variable without parameters then creates and starts an ESP8266WebServer/WebServer inside the AutoConnect. This object variable could be referred by [*AutoConnect::host()*](api.md#host) function to access ESP8266WebServer/WebServer instance as like below. Constructing an AutoConnect object variable without parameters then creates and starts an ESP8266WebServer/WebServer inside the AutoConnect. This object variable could be referred by [*AutoConnect::host()*](api.md#host) function to access ESP8266WebServer/WebServer instance as like below.
@ -204,7 +229,7 @@ An example sketch used with the PageBuilder as follows and it explains how it ai
## Configuration functions ## Configuration functions
### <i class="fa fa-caret-right"></i> Configuration for Soft AP ### <i class="fa fa-caret-right"></i> Configuration for Soft AP and captive portal
AutoConnect will activate SoftAP at failed the first *WiFi.begin*. It SoftAP settings are stored in [**AutoConnectConfig**](api.md#autoconnectconfig) as the following parameters. The sketch could be configured SoftAP using these parameters, refer the [AutoConnectConfig API](api.md#autoconnectconfig-api) for details. AutoConnect will activate SoftAP at failed the first *WiFi.begin*. It SoftAP settings are stored in [**AutoConnectConfig**](api.md#autoconnectconfig) as the following parameters. The sketch could be configured SoftAP using these parameters, refer the [AutoConnectConfig API](api.md#autoconnectconfig-api) for details.
@ -214,11 +239,13 @@ AutoConnect will activate SoftAP at failed the first *WiFi.begin*. It SoftAP set
- SSID for SoftAP. - SSID for SoftAP.
- Password for SoftAP. - Password for SoftAP.
- Channel. - Channel.
- SoftAP name.
- Hidden attribute. - Hidden attribute.
- Auto save credential. - Auto save credential.
- Offset address of the credentials storage area in EEPROM. - Offset address of the credentials storage area in EEPROM.
- Length of start up time after reset. - Length of start up time after reset.
- Automatic starting the captive portal. - Automatic starting the captive portal.
- Start the captive portal forcely.
- Auto reset after connection establishment. - Auto reset after connection establishment.
- Home URL of the user sketch application. - Home URL of the user sketch application.
@ -265,3 +292,7 @@ portal.begin();
``` ```
[^2]:Static IP address assignment is available from version 0.9.3. [^2]:Static IP address assignment is available from version 0.9.3.
### <i class="fa fa-caret-right"></i> Station host name

@ -1,12 +1,14 @@
## Include headers ## <i class="fa fa-code"></i> Include headers
### <i class="fa fa-code"></i> AutoConnect.h ### AutoConnect.h
```cpp ```cpp
#include <AutoConnect.h> #include <AutoConnect.h>
``` ```
#### Defined macros ## <i class="fa fa-code"></i> Defined macros
They contain in ```AutoConnectDefs.h```.
```cpp ```cpp
#define AC_DEBUG // Monitor message output activation #define AC_DEBUG // Monitor message output activation
@ -26,11 +28,9 @@
!!! note "Macros placement moved" !!! note "Macros placement moved"
Source code placement of the above macros provided for user sketch changed from v0.9.7. The new code is in ```AutoConnectDefs.h```. Source code placement of the above macros provided for user sketch changed from v0.9.7. The new code is in ```AutoConnectDefs.h```.
## AutoConnect API ## <i class="fa fa-code"></i> Constructors
### <i class="fa fa-code"></i> Constructors
#### AutoConnect ### AutoConnect
```cpp ```cpp
AutoConnect() AutoConnect()
@ -54,15 +54,28 @@ AutoConnect(WebServer& webServer)
Run the AutoConnect site using the externally ensured ESP8266WebServer for ESP8266 or WebServer for ESP32. Run the AutoConnect site using the externally ensured ESP8266WebServer for ESP8266 or WebServer for ESP32.
The [**handleClient**](api.md#handleclient) function of AutoConnect can include the response of the URI handler added by the user using the "*on*" function of ESP8266WebServer/WebServer. If ESP8266WebServer/WebServer is assigned internally by AutoConnect, the sketch can obtain that reference with the [**host**](api.me#host) function. The [**handleClient**](api.md#handleclient) function of AutoConnect can include the response of the URI handler added by the user using the "*on*" function of ESP8266WebServer/WebServer. If ESP8266WebServer/WebServer is assigned internally by AutoConnect, the sketch can obtain that reference with the [**host**](api.md#host) function.
<dl class="apidl"> <dl class="apidl">
<dt>**Parameters**</dt> <dt>**Parameters**</dt>
<dd><span class="apidef">webServer</span>A reference of ESP8266WebServer or WebServer instance.</dd> <dd><span class="apidef">webServer</span>A reference of ESP8266WebServer or WebServer instance.</dd>
</dl> </dl>
### <i class="fa fa-code"></i> Public member functions ## <i class="fa fa-code"></i> Public member functions
#### begin ### aux
```cpp
AutoConnectAux* aux(const String& uri) const
```
Returns a pointer to AutoConnectAux with the URI specified by *uri*. If AutoConnectAux with that URI is not bound, it returns **nullptr**.
<dl class="apidl">
<dt>**Parameters**</dt>
<dd><span class="apidef">uri</span>URI string.</dd>
<dt>**Return value**</dt>
<dd>A Pointer of the AutoConnectAux instance.</dd>
</dl>
### begin
```cpp ```cpp
bool begin() bool begin()
@ -87,7 +100,7 @@ The captive portal will not be started if the connection has been established wi
<dd><span class="apidef">false</span>Could not connected, Captive portal started with WIFI_AP_STA mode.</dd> <dd><span class="apidef">false</span>Could not connected, Captive portal started with WIFI_AP_STA mode.</dd>
</dl> </dl>
#### config ### config
```cpp ```cpp
bool config(AutoConnectConfig& config) bool config(AutoConnectConfig& config)
@ -107,7 +120,7 @@ Set SoftAP's WiFi configuration and static IP configuration.
<dd><span class="apidef">false</span>Configuration parameter is invalid, some values out of range.</dd> <dd><span class="apidef">false</span>Configuration parameter is invalid, some values out of range.</dd>
</dl> </dl>
#### end ### end
```cpp ```cpp
void end() void end()
@ -118,7 +131,7 @@ Stops AutoConnect captive portal service. Release ESP8266WebServer/WebServer and
!!! warning "Attention to end" !!! warning "Attention to end"
The end function releases the instance of ESP8266WebServer/WebServer and DNSServer. It can not process them after the end function. The end function releases the instance of ESP8266WebServer/WebServer and DNSServer. It can not process them after the end function.
#### handleClient ### handleClient
```cpp ```cpp
void handleClient() void handleClient()
@ -126,7 +139,7 @@ void handleClient()
Process the AutoConnect menu interface. The handleClient() function of the ESP8266WebServer/WebServer hosted by AutoConnect is also called from within AutoConnect, and the client request handlers contained in the user sketch are also handled. Process the AutoConnect menu interface. The handleClient() function of the ESP8266WebServer/WebServer hosted by AutoConnect is also called from within AutoConnect, and the client request handlers contained in the user sketch are also handled.
#### handleRequest ### handleRequest
```cpp ```cpp
void handleRequest() void handleRequest()
@ -137,7 +150,7 @@ Handling for the AutoConnect menu request.
!!! warning "About used in combination with handleClient" !!! warning "About used in combination with handleClient"
The handleRequest function is not supposed to use with AutoConnect::handleClient. It should be used with ESP8266WebServer::handleClient or WebServer::handleClient. The handleRequest function is not supposed to use with AutoConnect::handleClient. It should be used with ESP8266WebServer::handleClient or WebServer::handleClient.
#### home ### home
```cpp ```cpp
void home(String uri) void home(String uri)
@ -149,9 +162,7 @@ Put a user site's home URI. The URI specified by home is linked from "HOME" in t
<dd><span class="apidef">uri</span> A URI string of user site's home path.</dd> <dd><span class="apidef">uri</span> A URI string of user site's home path.</dd>
</dl> </dl>
#### host ### host
Returns the reference of the ESP8266WebServer/WebServer which is allocated in AutoConnect automatically.
- For ESP8266 - For ESP8266
@ -164,6 +175,8 @@ ESP8266WebServer& host()
```cpp ```cpp
WebServer& host() WebServer& host()
``` ```
Returns the reference of the ESP8266WebServer/WebServer which is allocated in AutoConnect automatically.
<dl class="apidl"> <dl class="apidl">
<dt>**Return value**</dt> <dt>**Return value**</dt>
<dd>A reference of the ESP8266WebServer/WebServer.</dd> <dd>A reference of the ESP8266WebServer/WebServer.</dd>
@ -180,7 +193,43 @@ WebServer& host()
portal.host().handleClient(); portal.host().handleClient();
``` ```
#### onDetect ### join
```cpp
void join(AutoConnectAux& aux)
```
```cpp
void join(std::vector<std::reference_wrapper<AutoConnectAux>> aux)
```
Join the AutoConnectAux object to AutoConnect. AutoConnectAux objects can be joined one by one, or joined altogether. The AutoConnectAux object joined by the join function can be handled from the AutoConnect menu.
<dl class="apidl">
<dt>**Parameters**</dt>
<dd><span class="apidef">aux</span>Reference to AutoConnectAux. It can be std::vector of std::reference_wrapper of AutoConnectAux with [list initialization](https://en.cppreference.com/w/cpp/language/list_initialization).</dd>
</dl>
### load
```cpp
bool load(const String& aux)
```
```cpp
bool load(const __FlashStringHelper* aux)
```
```cpp
bool load(Stream& aux)
```
Load
### on
```cpp
bool on(const String& uri, const AuxHandlerFunctionT handler, AutoConnectExitOrder_t order = AC_EXIT_AHEAD)
```
!!! caution "It is not ESP8266WebServer::on, not WebServer::on for ESP32."
This function effects to AutoConnectAux only. However, it coexists with that of ESP8266WebServer::on or WebServer::on of ESP32.
### onDetect
```cpp ```cpp
void onDetect(DetectExit_ft fn) void onDetect(DetectExit_ft fn)
@ -205,7 +254,7 @@ typedef std::function<bool(IPAddress softapIP)> DetectExit_ft
<dd><span class="apidef">false</span>Cancel the captive portal. AutoConnect::begin function will return with a false.</dd> <dd><span class="apidef">false</span>Cancel the captive portal. AutoConnect::begin function will return with a false.</dd>
</dl> </dl>
#### onNotFound ### onNotFound
- For ESP8266 - For ESP8266
@ -223,243 +272,3 @@ Register the handler function for undefined URL request detected.
<dt>**Parameters**</dt> <dt>**Parameters**</dt>
<dd><span class="apidef">fn</span>A function of the "not found" handler.</dd> <dd><span class="apidef">fn</span>A function of the "not found" handler.</dd>
</dl> </dl>
## AutoConnectConfig API
### <i class="fa fa-code"></i> Constructor
#### AutoConnectConfig
```cpp
AutoConnectConfig();
```
```cpp
AutoConnectConfig(const char* ap, const char* password);
```
<dl class="apidl">
<dt>**Parameters**</dt>
<dd><span class="apidef">ap</span>SSID for SoftAP. The length should be up to 31. The default value is **esp8266ap** for ESP8266, **esp32ap** for ESP32.</dd>
<dd><span class="apidef">password</span>Password for SodtAP. The length should be from 8 to up to 63. The default value is **12345678**.</dd>
</dl>
### <i class="fa fa-code"></i> Public member variables
#### apid
SoftAP's SSID.
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
#### apip
Sets IP address for Soft AP in captive portal. When AutoConnect fails the initial WiFi.begin, it starts the captive portal with the IP address specified this.
<dl class="apidl">
<dt>**Type**</dt>
<dd><span class="apidef" style="width:230px;">IPAddress</span>The default value is **192.168.244.1**</dd>
</dl>
#### autoReconnect
Automatically will try to reconnect with the past established access point (BSSID) when the current configured SSID in ESP8266/ESP32 could not be connected. By enabling this option, *AutoConnect::begin()* function will attempt to reconnect to a known access point using credentials stored in the EEPROM, even if the connection failed by current SSID.
If the connection fails, starts the captive portal in SoftAP + STA mode.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Reconnect automatically.</dd>
<dd><span class="apidef" style="width:230px;">false</span>Starts Captive Portal in SoftAP + STA mode without trying to reconnect. This is the default.</dd>
</dl>
When the autoReconnect option is enabled, an automatic connection will behave if the following conditions are satisfied.
- Invokes *AutoConnect::begin* without user name and password parameter as ```begin()```.
- If one of the saved BSSIDs (not the SSID) of the credentials matches the BSSID detected by the network scan.
#### autoReset
Reset ESP8266 module automatically after WLAN disconnected.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Reset after WiFi disconnected automatically.</dd>
<dd><span class="apidef" style="width:230px;">false</span>No reset.</dd>
</dl>
#### autoRise
Captive portal activation switch. False for disabling the captive portal. It prevents starting the captive portal even if the connection at the first *WiFi.begin* fails.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Enable the captive portal. This is the default.</dd>
<dd><span class="apidef" style="width:230px;">false</span>Disable the captive portal.</dd>
</dl>
#### autoSave
The credential saved automatically at the connection establishment.
<dl class="apidl">
<dt>**Type**</dt>
<dd>AC_SAVECREDENTIAL_t</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">AC_SAVECREDENTIAL_AUTO</span>The credential saved automatically. This is the default.</dd>
<dd><span class="apidef" style="width:230px;">AC_SAVECREDENTIAL_NEVER</span>The credential no saved.</dd>
</dl>
#### boundaryOffset
Sets the offset address of the credential storage area for EEPROM. This value must be between greater than 4 and less than flash sector size. (4096 by SDK)
The default value is 0.
<dl class="apidl">
<dt>**Type**</dt>
<dd>uint16_t</dd>
</dl>
!!! warning "It will conflict with user data."
If the sketch leaves this offset at zero, it will conflict the storage area of credentials with the user sketch owned data. It needs to use the behind of credential area.
#### channel
The channel number of WIFi when SoftAP starts.
<dl class="apidl">
<dt>**Type**</dt>
<dd>uint8_t</dd>
<dt>**Value**</dt>
<dd>1 ~ 14. The default value is 1.</dd>
</dl>
!!! info "How do I choose Channel"
Espressif Systems had announced the [application note](https://www.espressif.com/sites/default/files/esp8266_wi-fi_channel_selection_guidelines.pdf) about Wi-Fi channel selection.
#### dns1
Set primary DNS server address when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
#### dns2
Set secondary DNS server address when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
#### gateway
Sets gateway address for Soft AP in captive portal. When AutoConnect fails the initial WiFi.begin, it starts the captive portal with the IP address specified this.
<dl class="apidl">
<dt>**Type**</dt>
<dd><span class="apidef" style="width:230px;">IPAddress</span>The default value is **192.168.244.1**</dd>
</dl>
#### hidden
Sets SoftAP to hidden SSID.
<dl class="apidl">
<dt>**Type**</dt>
<dd>uint8_t</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">0</span>SSID will be appeared. This is the default.</dd>
<dd><span class="apidef" style="width:230px;">1</span>SSID will be hidden.</dd>
</dl>
#### homeUri
Sets the home path of user sketch. This path would be linked from 'HOME' in the AutoConnect menu.
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
#### netmask
Sets subnet mask for Soft AP in captive portal. When AutoConnect fails the initial WiFi.begin, it starts the captive portal with the IP address specified this.
<dl class="apidl">
<dt>**Type**</dt>
<dd><span class="apidef" style="width:230px;">IPAddress</span>The default value is **255.255.255.0**</dd>
</dl>
#### psk
Sets password for SoftAP. The length should be from 8 to up to 63. The default value is **12345678**.
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
#### staip
Set a static IP address. The IP will behave with STA mode.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
#### staGateway
Set the gateway address when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
#### staNetmask
Set the subnetmask when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
### <i class="fa fa-code"></i> AutoConnectConfig example
```arduino
AutoConenct Portal;
AutoConenctConfig Config("", "passpass"); // SoftAp name is determined at runtime
Config.apid = ESP.hostname(); // Retrieve host name to SotAp identification
Config.apip = IPAddress(192,168,10,101); // Sets SoftAP IP address
Config.gateway = IPAddress(192,168,10,1); // Sets WLAN router IP address
Config.netmask = IPAddress(255,255,255,0); // Sets WLAN scope
Config.autoReconnect = true; // Enable auto-reconnect
Config.autoSave = AC_SAVECREDENTIAL_NEVER; // No save credential
COnfig.boundaryOffet = 64; // Reserve 64 bytes for the user data in EEPROM.
Config.homeUri = "/index.html" // Sets home path of the sketch application
Config.staip = IPAddress(192,168,10,10); // Sets static IP
Config.staGateway = IPAddress(192,168,10,1); // Sets WiFi router address
Config.staNetmask = IPAddress(255,255,255,0); // Sets WLAN scope
Config.dns1 = IPAddress(192,168,10,1); // Sets primary DNS address
Portal.config(Config); // Configure AutoConnect
Portal.begin(); // Starts and behaves captive portal
```
## <i class="fa fa-gift"></i> Something extra
The library presents two PNG icons which can be used to embed a hyperlink to the AutoConnect menu.
- Bar type <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAApklEQVRYR2NkGGDAOMD2M4w6YDQEkEMgEJggZwCxGI0T5mug+alAvBFkD7IDXtLBcpjfXgEZ4ugOeAETpHEIgIwHeVYC3QH+0CgAS9AQgCwHRcFmdAfQ0E7cRo9mw0EVAqPlAKhwEKVTVsBZDsyiQ2k4Wg6gxPKgyoZ0Sn+o1iCHQBBQaiYQi9DYJTjbAyAJWluOtz0wWg7QOOqxGz+aDUdDYMBDAACA0x4hs/MPrwAAAABJRU5ErkJggg==" title="AutoConnect menu" alt="AutoConnect menu" />
- Cog type <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAC2klEQVRIS61VvWsUQRSfmU2pon9BUIkQUaKFaCBKgooSb2d3NSSFKbQR/KrEIiIKBiGF2CgRxEpjQNHs7mwOUcghwUQ7g58IsbGxEBWsb2f8zR177s3t3S2cA8ftzPu993vzvoaSnMu2vRKlaqgKp74Q/tE8qjQPyHGcrUrRjwlWShmDbFMURd/a6TcQwNiYUmpFCPElUebcuQ2vz6aNATMVReHEPwzfSSntDcNwNo2rI+DcvQzhpAbA40VKyV0p1Q9snzBG1qYVcYufXV1sREraDcxpyHdXgkfpRBj6Uwm2RsC5dxxmZ9pdOY9cKTISRcHTCmGiUCh4fYyplTwG2mAUbtMTBMHXOgK9QfyXEZr+TkgQ1oUwDA40hEgfIAfj+HuQRaBzAs9eKyUZ5Htx+T3ZODKG8DzOJMANhmGomJVMXPll+hx9UUAlzZrJJ4QNCDG3VEfguu7mcpmcB/gkBOtShhQhchAlu5jlLUgc9ENgyP5gf9+y6LTv+58p5zySkgwzLNOIGc8sEoT1Lc53NMlbCQQuvMxeCME1NNPVVkmH/i3IzzXDtCSA0qQQwZWOCJDY50jsQRjJmkslEOxvTcDRO6zPxOh5xZglKkYLhWM9jMVnkIsTyMT6NBj7IbOCEjm6HxNVVTo2WXqEWJZ1T8rytB6GxizyDkPhWVpBqfiXUtbo/HywYJSpA9kMamNNPZ71R9Hcm+TMHHZNGw3EuraXEUldbfvw25UdOjqOt+JhMwJd7+jSTpZaEiIcaCDwPK83jtWnTkwnunFMtxeL/ge9r4XItt1RNNaj/0GAcV2bR3U5sG3nEh6M61US+Qrfd9Bs31GGulI2GOS/8dgcQZV1w+ApjIxB7TDwF9GcNzJzoA+rD0/8HvPnXQJCt2qFCwbBTfRI7UyXumWVt+HJ9NO4XI++bdsb0YyrqXmlh+AWOLHaLqS5CLQR5EggR3YlcVS9gKeH2hnX8r8Kmi1CAsl36QAAAABJRU5ErkJggg==" title="AutoConnect menu" alt="AutoConnect menu" />
To reference the icon, use the **AUTOCONNECT_LINK** macro in the sketch. It expands into the string literal as an HTML ```<a></a>``` tag with PNG embedded of the AutoConnect menu hyperlinks. Icon type is specified by the parameter of the macro.
<dl class="apidl">
<dd><span class="apidef">BAR_24</span>Bars icon, 24x24.</dd>
<dd><span class="apidef">BAR_32</span>Bars icon, 32x32.</dd>
<dd><span class="apidef">BAR_48</span>Bars icon, 48x48.</dd>
<dd><span class="apidef">COG_24</span>Cog icon, 24x24.</dd>
<dd><span class="apidef">COG_32</span>Cog icon, 32x32.</dd>
</dl>
!!! note "Usage"
```arduino
String html = "<html>";
html += AUTOCONNECT_LINK(BAR_32);
html += "</html>";
server.send(200, "text/html", html);
```

@ -0,0 +1,37 @@
## <i class="fa fa-code"></i> Constructor
### AutoConnectAux
```cpp
AutoConnectAux(const String& uri = String(""), const String& title = String(""), const bool menu = true, const AutoConnectElementVT addons = AutoConnectElementVT())
```
## <i class="fa fa-code"></i> Public member functions
### add
```cpp
void add(AutoConnectElement& addon)
```
```cpp
void add(AutoConnectElementVT addons)
```
Add an element to the auxiliary page. Add the element set to the auxiliary page.
template<typename T>
T& getElement(const String& name);
AutoConnectElement* getElement(const String& name); /**< Get registered AutoConnectElement as specified name */
void menu(const bool post) { _menu = post; } /**< Set or reset the display as menu item for this aux */
bool release(const String& name); /**< Release an AutoConnectElement */
bool setElementValue(const String& name, const String value); /**< Set value to specified element */
bool setElementValue(const String& name, std::vector<String> const& values); /**< Set values collection to specified element */
void setTitle(const String title) { _title = title; } /**< Set a title of the auxiliary page */
void on(const AuxHandlerFunctionT handler, const AutoConnectExitOrder_t order = AC_EXIT_AHEAD) { _handler = handler; _order = order; } /**< Set user handler */
bool load(const String& in); /**< Load whole elements to AutoConnectAux Page */
bool load(const __FlashStringHelper* in); /**< Load whole elements to AutoConnectAux Page */
bool load(Stream& in); /**< Load whole elements to AutoConnectAux Page */
bool loadElement(const String& in, const String& name = String("")); /**< Load specified element */
bool loadElement(const __FlashStringHelper* in, const String& name = String("")); /**< Load specified element */
bool loadElement(Stream& in, const String& name = String("")); /**< Load specified element */
size_t saveElement(Stream& out, std::vector<String> const& names = {}); /**< Write elements of AutoConnectAux to the stream */

@ -0,0 +1,241 @@
## <i class="fa fa-code"></i> Constructor
### AutoConnectConfig
```cpp
AutoConnectConfig();
```
```cpp
AutoConnectConfig(const char* ap, const char* password);
```
<dl class="apidl">
<dt>**Parameters**</dt>
<dd><span class="apidef">ap</span>SSID for SoftAP. The length should be up to 31. The default value is **esp8266ap** for ESP8266, **esp32ap** for ESP32.</dd>
<dd><span class="apidef">password</span>Password for SodtAP. The length should be from 8 to up to 63. The default value is **12345678**.</dd>
</dl>
## <i class="fa fa-code"></i> Public member variables
### apid
SoftAP's SSID.
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
### apip
Sets IP address for Soft AP in captive portal. When AutoConnect fails the initial WiFi.begin, it starts the captive portal with the IP address specified this.
<dl class="apidl">
<dt>**Type**</dt>
<dd><span class="apidef" style="width:230px;">IPAddress</span>The default value is **192.168.244.1**</dd>
</dl>
### autoReconnect
Automatically will try to reconnect with the past established access point (BSSID) when the current configured SSID in ESP8266/ESP32 could not be connected. By enabling this option, *AutoConnect::begin()* function will attempt to reconnect to a known access point using credentials stored in the EEPROM, even if the connection failed by current SSID.
If the connection fails, starts the captive portal in SoftAP + STA mode.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Reconnect automatically.</dd>
<dd><span class="apidef" style="width:230px;">false</span>Starts Captive Portal in SoftAP + STA mode without trying to reconnect. This is the default.</dd>
</dl>
When the autoReconnect option is enabled, an automatic connection will behave if the following conditions are satisfied.
- Invokes *AutoConnect::begin* without user name and password parameter as ```begin()```.
- If one of the saved BSSIDs (not the SSID) of the credentials matches the BSSID detected by the network scan.
### autoReset
Reset ESP8266 module automatically after WLAN disconnected.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Reset after WiFi disconnected automatically.</dd>
<dd><span class="apidef" style="width:230px;">false</span>No reset.</dd>
</dl>
### autoRise
Captive portal activation switch. False for disabling the captive portal. It prevents starting the captive portal even if the connection at the first *WiFi.begin* fails.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Enable the captive portal. This is the default.</dd>
<dd><span class="apidef" style="width:230px;">false</span>Disable the captive portal.</dd>
</dl>
### autoSave
The credential saved automatically at the connection establishment.
<dl class="apidl">
<dt>**Type**</dt>
<dd>AC_SAVECREDENTIAL_t</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">AC_SAVECREDENTIAL_AUTO</span>The credential saved automatically. This is the default.</dd>
<dd><span class="apidef" style="width:230px;">AC_SAVECREDENTIAL_NEVER</span>The credential no saved.</dd>
</dl>
### bootUri
Specify the location to be redirected after module reset in the AutoConnect menu. It is given as an enumeration value of **AC_ONBOOTURI_t** indicating either the AutoConnect root path or the user screen home path.
<dl class="apidl">
<dt>**Type**</dt>
<dd>AC_ONBOOTURI_t</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">AC_ONBOOTURI_ROOT</span>Resetting the module redirects it to the AutoConnect root path. The root path is assumed to be AUTOCONNECT_URI defined in AutoConnectDefs.h.</dd>
<dd><span class="apidef" style="width:230px;">AC_ONBOOTURI_HOME</span>It is redirected to the uri specified by [**AutoConnectConfig::homeUri**](api.md#homeuri).</dd>
</dl>
### boundaryOffset
Sets the offset address of the credential storage area for EEPROM. This value must be between greater than 4 and less than flash sector size. (4096 by SDK)
The default value is 0.
<dl class="apidl">
<dt>**Type**</dt>
<dd>uint16_t</dd>
</dl>
!!! warning "It will conflict with user data."
If the sketch leaves this offset at zero, it will conflict the storage area of credentials with the user sketch owned data. It needs to use the behind of credential area.
### channel
The channel number of WIFi when SoftAP starts.
<dl class="apidl">
<dt>**Type**</dt>
<dd>uint8_t</dd>
<dt>**Value**</dt>
<dd>1 ~ 14. The default value is 1.</dd>
</dl>
!!! info "How do I choose Channel"
Espressif Systems had announced the [application note](https://www.espressif.com/sites/default/files/esp8266_wi-fi_channel_selection_guidelines.pdf) about Wi-Fi channel selection.
### dns1
Set primary DNS server address when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
#### dns2
Set secondary DNS server address when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
### gateway
Sets gateway address for Soft AP in captive portal. When AutoConnect fails the initial WiFi.begin, it starts the captive portal with the IP address specified this.
<dl class="apidl">
<dt>**Type**</dt>
<dd><span class="apidef" style="width:230px;">IPAddress</span>The default value is **192.168.244.1**</dd>
</dl>
### hidden
Sets SoftAP to hidden SSID.
<dl class="apidl">
<dt>**Type**</dt>
<dd>uint8_t</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">0</span>SSID will be appeared. This is the default.</dd>
<dd><span class="apidef" style="width:230px;">1</span>SSID will be hidden.</dd>
</dl>
### homeUri
Sets the home path of user sketch. This path would be linked from 'HOME' in the AutoConnect menu. The default for homeUri is "/".
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
### hostName
Sets the station host name of ESP8266/ESP32.
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
### immediateStart
Disable the first WiFi.begin() and start the captive portal. If this option is enabled, the module will be in AP_STA mode and the captive portal will be activated regardless of [**autoRise::AutoConnectConfig**](api.md#autorise) specification.
<dl class="apidl">
<dt>**Type**</dt>
<dd>bool</dd>
<dt>**Value**</dt>
<dd><span class="apidef" style="width:230px;">true</span>Start the captive portal with [**AutoConnect::begin**](api.md#begin).</dd>
<dd><span class="apidef" style="width:230px;">false</span>Enable the first WiFi.begin() and it will start captive portal when connection failed. This is default.</dd>
</dl>
### netmask
Sets subnet mask for Soft AP in captive portal. When AutoConnect fails the initial WiFi.begin, it starts the captive portal with the IP address specified this.
<dl class="apidl">
<dt>**Type**</dt>
<dd><span class="apidef" style="width:230px;">IPAddress</span>The default value is **255.255.255.0**</dd>
</dl>
### psk
Sets password for SoftAP. The length should be from 8 to up to 63. The default value is **12345678**.
<dl class="apidl">
<dt>**Type**</dt>
<dd>String</dd>
</dl>
### staip
Set a static IP address. The IP will behave with STA mode.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
### staGateway
Set the gateway address when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
### staNetmask
Set the subnetmask when using static IP address.
<dl class="apidl">
<dt>**Type**</dt>
<dd>IPAddress</dd>
</dl>
## <i class="fa fa-code"></i> AutoConnectConfig example
```arduino
AutoConenct Portal;
AutoConenctConfig Config("", "passpass"); // SoftAp name is determined at runtime
Config.apid = ESP.hostname(); // Retrieve host name to SotAp identification
Config.apip = IPAddress(192,168,10,101); // Sets SoftAP IP address
Config.gateway = IPAddress(192,168,10,1); // Sets WLAN router IP address
Config.netmask = IPAddress(255,255,255,0); // Sets WLAN scope
Config.autoReconnect = true; // Enable auto-reconnect
Config.autoSave = AC_SAVECREDENTIAL_NEVER; // No save credential
COnfig.boundaryOffet = 64; // Reserve 64 bytes for the user data in EEPROM.
Config.homeUri = "/index.html" // Sets home path of the sketch application
Config.staip = IPAddress(192,168,10,10); // Sets static IP
Config.staGateway = IPAddress(192,168,10,1); // Sets WiFi router address
Config.staNetmask = IPAddress(255,255,255,0); // Sets WLAN scope
Config.dns1 = IPAddress(192,168,10,1); // Sets primary DNS address
Portal.config(Config); // Configure AutoConnect
Portal.begin(); // Starts and behaves captive portal
```

@ -0,0 +1,24 @@
## <i class="fa fa-gift"></i> Icons
The library presents two PNG icons which can be used to embed a hyperlink to the AutoConnect menu.
- Bar type <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAApklEQVRYR2NkGGDAOMD2M4w6YDQEkEMgEJggZwCxGI0T5mug+alAvBFkD7IDXtLBcpjfXgEZ4ugOeAETpHEIgIwHeVYC3QH+0CgAS9AQgCwHRcFmdAfQ0E7cRo9mw0EVAqPlAKhwEKVTVsBZDsyiQ2k4Wg6gxPKgyoZ0Sn+o1iCHQBBQaiYQi9DYJTjbAyAJWluOtz0wWg7QOOqxGz+aDUdDYMBDAACA0x4hs/MPrwAAAABJRU5ErkJggg==" title="AutoConnect menu" alt="AutoConnect menu" />
- Cog type <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAC2klEQVRIS61VvWsUQRSfmU2pon9BUIkQUaKFaCBKgooSb2d3NSSFKbQR/KrEIiIKBiGF2CgRxEpjQNHs7mwOUcghwUQ7g58IsbGxEBWsb2f8zR177s3t3S2cA8ftzPu993vzvoaSnMu2vRKlaqgKp74Q/tE8qjQPyHGcrUrRjwlWShmDbFMURd/a6TcQwNiYUmpFCPElUebcuQ2vz6aNATMVReHEPwzfSSntDcNwNo2rI+DcvQzhpAbA40VKyV0p1Q9snzBG1qYVcYufXV1sREraDcxpyHdXgkfpRBj6Uwm2RsC5dxxmZ9pdOY9cKTISRcHTCmGiUCh4fYyplTwG2mAUbtMTBMHXOgK9QfyXEZr+TkgQ1oUwDA40hEgfIAfj+HuQRaBzAs9eKyUZ5Htx+T3ZODKG8DzOJMANhmGomJVMXPll+hx9UUAlzZrJJ4QNCDG3VEfguu7mcpmcB/gkBOtShhQhchAlu5jlLUgc9ENgyP5gf9+y6LTv+58p5zySkgwzLNOIGc8sEoT1Lc53NMlbCQQuvMxeCME1NNPVVkmH/i3IzzXDtCSA0qQQwZWOCJDY50jsQRjJmkslEOxvTcDRO6zPxOh5xZglKkYLhWM9jMVnkIsTyMT6NBj7IbOCEjm6HxNVVTo2WXqEWJZ1T8rytB6GxizyDkPhWVpBqfiXUtbo/HywYJSpA9kMamNNPZ71R9Hcm+TMHHZNGw3EuraXEUldbfvw25UdOjqOt+JhMwJd7+jSTpZaEiIcaCDwPK83jtWnTkwnunFMtxeL/ge9r4XItt1RNNaj/0GAcV2bR3U5sG3nEh6M61US+Qrfd9Bs31GGulI2GOS/8dgcQZV1w+ApjIxB7TDwF9GcNzJzoA+rD0/8HvPnXQJCt2qFCwbBTfRI7UyXumWVt+HJ9NO4XI++bdsb0YyrqXmlh+AWOLHaLqS5CLQR5EggR3YlcVS9gKeH2hnX8r8Kmi1CAsl36QAAAABJRU5ErkJggg==" title="AutoConnect menu" alt="AutoConnect menu" />
To reference the icon, use the **AUTOCONNECT_LINK** macro in the sketch. It expands into the string literal as an HTML ```<a></a>``` tag with PNG embedded of the AutoConnect menu hyperlinks. Icon type is specified by the parameter of the macro.
<dl class="apidl">
<dd><span class="apidef">BAR_24</span>Bars icon, 24x24.</dd>
<dd><span class="apidef">BAR_32</span>Bars icon, 32x32.</dd>
<dd><span class="apidef">BAR_48</span>Bars icon, 48x48.</dd>
<dd><span class="apidef">COG_24</span>Cog icon, 24x24.</dd>
<dd><span class="apidef">COG_32</span>Cog icon, 32x32.</dd>
</dl>
!!! note "Usage"
```arduino
String html = "<html>";
html += AUTOCONNECT_LINK(BAR_32);
html += "</html>";
server.send(200, "text/html", html);
```

@ -74,7 +74,7 @@ AutoConnect internally performs *WiFi.begin* to establish a WiFi connection. The
#### 5. AutoConnect::begin with SSID and Password #### 5. AutoConnect::begin with SSID and Password
SSID and Password can also specify by [*AutoConnect::begin*](api.me#begin). ESP8266/ESP32 uses provided SSID and Password explicitly. If the connection false with specified SSID with Password then a captive portal is activated. SSID and Password are not present, ESP8266 SDK will attempt to connect using the still effectual SSID and password. Usually, it succeeds. SSID and Password can also specify by [*AutoConnect::begin*](api.md#begin). ESP8266/ESP32 uses provided SSID and Password explicitly. If the connection false with specified SSID with Password then a captive portal is activated. SSID and Password are not present, ESP8266 SDK will attempt to connect using the still effectual SSID and password. Usually, it succeeds.
#### 6. Use ESP8266WebServer::on and WebServer::on to handle URL #### 6. Use ESP8266WebServer::on and WebServer::on to handle URL

@ -1,3 +1,14 @@
### [0.9.7] Jan. 1, 2019
- Fixed crash in some environments. Thank you @ageurtse
- Supports AutoConnect menu extention by user sketch with **AutoConnectAux**.
- Supports loading and saving of user-defined parameters with JSON format.
- Improved the WiFi connection sequence at the first WiFi.begin. Even if [**AutoConnectConfig::autoReconnect**](api.md#autoreconnect) is disabled when SSID and PSK are not specified, it will use the information of the last established access point. The autoReconnect option will achieve trying the connect after a previous connection failed.
- Supports the [**AutoConnectConfig::immediateStart**](api.md#immediatestart) option and immediately starts the portal without first trying WiFi.begin. You can start the captive portal at any time in combination with the [**AutoConnectConfig::autoRise**](api.md#autorise) option.
- Improved boot uri after reset. [**AutoConnectConfig::bootUri**](api.md#booturi) can be specified either /_ac or HOME path as the uri to be accessed after invoking Reset from AutoConnect menu.
- Improved source code placement of predefined macros. Defined common macros have been moved to ```AutoConnectDefs.h```.
- Supports [**AutoConnectConfig::hostName**](api.md#hostname). It activates ```WiFi.hostname()```/```WiFi.setHostName()```.
#### [0.9.6] Sep.27, 2018. #### [0.9.6] Sep.27, 2018.
- Improvement of RSSI detection for saved SSIDs. - Improvement of RSSI detection for saved SSIDs.

@ -42,3 +42,13 @@
content: '\f044'; content: '\f044';
margin:0 0.8em 0 -1.8em; margin:0 0.8em 0 -1.8em;
} }
.horizontal-list {
list-style-type: none;
overflow: hidden;
}
.horizontal-list > li {
float: left;
display: block;
}

@ -125,5 +125,5 @@ For the client sketches, the code required to connect to WiFi is the following f
<script> <script>
window.onload = function() { window.onload = function() {
Gifffer(); Gifffer();
} };
</script> </script>

@ -68,5 +68,5 @@ The IP address of ESP8266 would be displayed on the serial monitor after connect
<script> <script>
window.onload = function() { window.onload = function() {
Gifffer(); Gifffer();
} };
</script> </script>

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="162.49986mm"
height="50.781212mm"
viewBox="0 0 162.49986 50.781212"
version="1.1"
id="svg6816"
inkscape:version="0.92.1 r15371"
sodipodi:docname="ac_auxjoin_multi.svg">
<defs
id="defs6810" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="292.19207"
inkscape:cy="131.80979"
inkscape:document-units="mm"
inkscape:current-layer="layer5"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1495"
inkscape:window-height="756"
inkscape:window-x="2593"
inkscape:window-y="280"
inkscape:window-maximized="0" />
<metadata
id="metadata6813">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="grid"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-11.759858,-8.8834486)"
sodipodi:insensitive="true">
<path
d="M 11.75987,8.8834486 V 59.664658 M 14.405703,8.8834486 V 59.664658 M 17.051536,8.8834486 V 59.664658 M 19.697369,8.8834486 V 59.664658 M 22.343203,8.8834486 V 59.664658 M 24.989036,8.8834486 V 59.664658 M 27.634869,8.8834486 V 59.664658 M 30.280702,8.8834486 V 59.664658 M 32.926536,8.8834486 V 59.664658 M 35.572369,8.8834486 V 59.664658 M 38.218202,8.8834486 V 59.664658 M 40.864035,8.8834486 V 59.664658 M 43.509868,8.8834486 V 59.664658 M 46.155702,8.8834486 V 59.664658 M 48.801535,8.8834486 V 59.664658 M 51.447368,8.8834486 V 59.664658 M 54.093201,8.8834486 V 59.664658 M 56.739034,8.8834486 V 59.664658 M 59.384868,8.8834486 V 59.664658 M 62.030701,8.8834486 V 59.664658 M 64.676534,8.8834486 V 59.664658 M 67.322367,8.8834486 V 59.664658 M 69.9682,8.8834486 V 59.664658 M 72.614034,8.8834486 V 59.664658 M 75.259867,8.8834486 V 59.664658 M 77.9057,8.8834486 V 59.664658 M 80.551533,8.8834486 V 59.664658 M 83.197366,8.8834486 V 59.664658 M 85.8432,8.8834486 V 59.664658 M 88.489033,8.8834486 V 59.664658 M 91.134866,8.8834486 V 59.664658 M 93.780699,8.8834486 V 59.664658 M 96.426532,8.8834486 V 59.664658 M 99.072366,8.8834486 V 59.664658 M 101.7182,8.8834486 V 59.664658 M 104.36403,8.8834486 V 59.664658 M 107.00986,8.8834486 V 59.664658 M 109.6557,8.8834486 V 59.664658 M 112.30153,8.8834486 V 59.664658 M 114.94736,8.8834486 V 59.664658 M 117.5932,8.8834486 V 59.664658 M 120.23903,8.8834486 V 59.664658 M 122.88486,8.8834486 V 59.664658 M 125.5307,8.8834486 V 59.664658 M 128.17653,8.8834486 V 59.664658 M 130.82236,8.8834486 V 59.664658 M 133.4682,8.8834486 V 59.664658 M 136.11403,8.8834486 V 59.664658 M 138.75986,8.8834486 V 59.664658 M 141.4057,8.8834486 V 59.664658 M 144.05153,8.8834486 V 59.664658 M 146.69736,8.8834486 V 59.664658 M 149.3432,8.8834486 V 59.664658 M 151.98903,8.8834486 V 59.664658 M 154.63486,8.8834486 V 59.664658 M 157.2807,8.8834486 V 59.664658 M 159.92653,8.8834486 V 59.664658 M 162.57236,8.8834486 V 59.664658 M 165.2182,8.8834486 V 59.664658 M 167.86403,8.8834486 V 59.664658 M 170.50986,8.8834486 V 59.664658 M 173.1557,8.8834486 V 59.664658 M 11.75987,8.8834486 H 174.25972 M 11.75987,11.529282 H 174.25972 M 11.75987,14.175115 H 174.25972 M 11.75987,16.820948 H 174.25972 M 11.75987,19.466782 H 174.25972 M 11.75987,22.112615 H 174.25972 M 11.75987,24.758448 H 174.25972 M 11.75987,27.404281 H 174.25972 M 11.75987,30.050115 H 174.25972 M 11.75987,32.695948 H 174.25972 M 11.75987,35.341781 H 174.25972 M 11.75987,37.987614 H 174.25972 M 11.75987,40.633447 H 174.25972 M 11.75987,43.279281 H 174.25972 M 11.75987,45.925114 H 174.25972 M 11.75987,48.570947 H 174.25972 M 11.75987,51.21678 H 174.25972 M 11.75987,53.862613 H 174.25972 M 11.75987,56.508447 H 174.25972 M 11.75987,59.15428 h 162.49985"
style="fill:none;stroke:#000000;stroke-width:0.0264583px"
id="path7619"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="code"
transform="translate(-11.759858,-8.8834486)"
sodipodi:insensitive="true"
style="display:inline">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458338"
x="16.588673"
y="17.167612"
id="text4512"><tspan
sodipodi:role="line"
id="tspan7470"
style="line-height:8.81856251px"
x="16.588673"
y="17.167612"><tspan
style="fill:#ff6600"
id="tspan7488">AutoConnect</tspan> portal;</tspan><tspan
sodipodi:role="line"
id="tspan7472"
style="line-height:8.81856251px"
x="16.588673"
y="25.986176"><tspan
style="fill:#ff6600"
id="tspan7490">AutoConnectAux</tspan> aux1<tspan
style="fill:#ff0000"
id="tspan7637">(</tspan><tspan
style="fill:#216778"
id="tspan7498">&quot;/mqtt_setting&quot;</tspan>, <tspan
style="fill:#216778"
id="tspan7500">&quot;MQTT Setting&quot;</tspan><tspan
style="fill:#ff0000"
id="tspan7643">)</tspan>;</tspan><tspan
sodipodi:role="line"
id="tspan7474"
style="line-height:8.81856251px"
x="16.588673"
y="34.804737"><tspan
style="fill:#ff6600"
id="tspan7492">AutoConnectAux</tspan> aux2<tspan
style="fill:#ff0000"
id="tspan7639">(</tspan><tspan
style="fill:#216778"
id="tspan7506">&quot;/mqtt_save&quot;, &quot;MQTT Setting&quot;</tspan>, <tspan
style="fill:#37abc8"
id="tspan7514">false</tspan><tspan
style="fill:#ff0000"
id="tspan7645">)</tspan>;</tspan><tspan
sodipodi:role="line"
id="tspan7476"
style="line-height:8.81856251px"
x="16.588673"
y="43.623299"><tspan
style="fill:#ff6600"
id="tspan7494">AutoConnectAux</tspan> aux3<tspan
style="fill:#ff0000"
id="tspan7647">(</tspan><tspan
style="fill:#216778"
id="tspan7512">&quot;/mqtt_start&quot;, &quot;MQTT Start&quot;</tspan><tspan
style="fill:#ff0000"
id="tspan7641">)</tspan>;</tspan><tspan
sodipodi:role="line"
id="tspan7478"
style="line-height:8.81856251px"
x="16.588673"
y="52.441864">portal.<tspan
style="fill:#ff6600"
id="tspan7496">join</tspan><tspan
style="fill:#ff0000"
id="tspan7625">(</tspan><tspan
id="tspan7633"
style="fill:#0000ff">{</tspan> aux1, aux2, aux3 <tspan
style="fill:#ff0000"
id="tspan7623"><tspan
style="fill:#0000ff"
id="tspan7635">}</tspan>)</tspan>;</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot7480"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion7482"><rect
id="rect7484"
width="222.23357"
height="51.51778"
x="221.2234"
y="103.27576" /></flowRegion><flowPara
id="flowPara7486"></flowPara></flowRoot> </g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="view"
transform="translate(-11.759858,-8.8834486)"
sodipodi:insensitive="true">
<rect
style="opacity:0.38699999;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916666, 0.52916666;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539"
width="16.395168"
height="8.6281242"
x="150.52138"
y="28.977301"
ry="2.1733632" />
<path
style="fill:none;stroke:#ff6600;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 35.246169,53.951772 H 46.738758"
id="path7543"
inkscape:connector-curvature="0" />
<rect
style="opacity:0.38699999;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539-7"
width="14.410792"
height="7.2107134"
x="85.975174"
y="47.568375"
ry="1.8163275" />
<rect
style="opacity:0.38699999;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539-7-6"
width="14.410792"
height="7.2107134"
x="69.485977"
y="47.332142"
ry="1.8163275" />
<rect
style="opacity:0.38699999;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539-7-4"
width="14.410792"
height="7.2107134"
x="52.958519"
y="47.332138"
ry="1.8163275" />
<rect
style="opacity:0.38699999;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539-7-4-4"
width="13.229617"
height="7.2107134"
x="55.538654"
y="21.157295"
ry="1.8163275" />
<rect
style="opacity:0.38699999;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539-7-4-4-5"
width="13.324111"
height="7.2107134"
x="55.538654"
y="29.955509"
ry="1.8163275" />
<rect
style="opacity:0.38699999;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1"
id="rect7539-7-4-4-9"
width="13.276864"
height="7.2107134"
x="55.538658"
y="38.753723"
ry="1.8163275" />
<rect
style="opacity:0.38699999;fill:none;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect7617"
width="162.49986"
height="50.781212"
x="11.759858"
y="8.8834486"
ry="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -0,0 +1,677 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="281.79446mm"
height="92.352806mm"
viewBox="0 0 281.79446 92.352807"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="ac_declaration.svg">
<defs
id="defs2">
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="TriangleOutM"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4735"
d="M 5.77,0 -2.88,5 V -5 Z"
style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:1.00000003pt;stroke-opacity:1"
transform="scale(0.4)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4605"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="TriangleOutM-4"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path4735-7"
d="M 5.77,0 -2.88,5 V -5 Z"
style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:1.00000003pt;stroke-opacity:1"
transform="scale(0.4)" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="TriangleOutM-4-7"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path4735-7-4"
d="M 5.77,0 -2.88,5 V -5 Z"
style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:1.00000003pt;stroke-opacity:1"
transform="scale(0.4)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="317.82963"
inkscape:cy="21.781711"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:window-width="1421"
inkscape:window-height="866"
inkscape:window-x="2921"
inkscape:window-y="160"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-global="false"
showguides="false" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="grid"
inkscape:groupmode="layer"
id="layer1"
transform="translate(3.7173959,-82.536772)"
style="display:inline"
sodipodi:insensitive="true">
<path
d="M -3.7041667,82.550001 V 174.88958 M -1.0583334,82.550001 V 174.88958 M 1.5875,82.550001 V 174.88958 M 4.2333333,82.550001 V 174.88958 M 6.8791663,82.550001 V 174.88958 M 9.5250003,82.550001 V 174.88958 M 12.170833,82.550001 V 174.88958 M 14.816666,82.550001 V 174.88958 M 17.4625,82.550001 V 174.88958 M 20.108333,82.550001 V 174.88958 M 22.754166,82.550001 V 174.88958 M 25.4,82.550001 V 174.88958 M 28.045833,82.550001 V 174.88958 M 30.691666,82.550001 V 174.88958 M 33.3375,82.550001 V 174.88958 M 35.983333,82.550001 V 174.88958 M 38.629166,82.550001 V 174.88958 M 41.275,82.550001 V 174.88958 M 43.920833,82.550001 V 174.88958 M 46.566666,82.550001 V 174.88958 M 49.2125,82.550001 V 174.88958 M 51.858333,82.550001 V 174.88958 M 54.504166,82.550001 V 174.88958 M 57.15,82.550001 V 174.88958 M 59.795833,82.550001 V 174.88958 M 62.441666,82.550001 V 174.88958 M 65.0875,82.550001 V 174.88958 M 67.733333,82.550001 V 174.88958 M 70.379166,82.550001 V 174.88958 M 73.025,82.550001 V 174.88958 M 75.670833,82.550001 V 174.88958 M 78.316666,82.550001 V 174.88958 M 80.9625,82.550001 V 174.88958 M 83.608333,82.550001 V 174.88958 M 86.254166,82.550001 V 174.88958 M 88.9,82.550001 v 92.339579 m 2.645833,-92.339579 v 92.339579 m 2.645833,-92.339579 v 92.339579 m 2.645837,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 102.12916,82.550001 V 174.88958 M 104.775,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 120.65,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 136.525,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 152.4,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 168.275,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 184.15,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 200.025,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 215.9,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 231.775,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 247.65,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M 263.525,82.550001 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64584,-92.339579 v 92.339579 m 2.64583,-92.339579 v 92.339579 m 2.64583,-92.339579 V 174.88958 M -3.7041667,82.550001 H 278.07708 M -3.7041667,85.195834 H 278.07708 M -3.7041667,87.841667 H 278.07708 M -3.7041667,90.487501 H 278.07708 M -3.7041667,93.133334 H 278.07708 M -3.7041667,95.779168 H 278.07708 M -3.7041667,98.425001 H 278.07708 M -3.7041667,101.07083 H 278.07708 M -3.7041667,103.71667 H 278.07708 M -3.7041667,106.3625 H 278.07708 M -3.7041667,109.00833 H 278.07708 M -3.7041667,111.65417 H 278.07708 M -3.7041667,114.3 H 278.07708 M -3.7041667,116.94583 H 278.07708 M -3.7041667,119.59167 H 278.07708 M -3.7041667,122.2375 H 278.07708 M -3.7041667,124.88333 H 278.07708 M -3.7041667,127.52917 H 278.07708 M -3.7041667,130.175 H 278.07708 M -3.7041667,132.82083 H 278.07708 M -3.7041667,135.46667 H 278.07708 M -3.7041667,138.1125 H 278.07708 M -3.7041667,140.75833 H 278.07708 M -3.7041667,143.40417 H 278.07708 M -3.7041667,146.05 H 278.07708 M -3.7041667,148.69583 H 278.07708 M -3.7041667,151.34167 H 278.07708 M -3.7041667,153.9875 H 278.07708 M -3.7041667,156.63333 H 278.07708 M -3.7041667,159.27917 H 278.07708 M -3.7041667,161.925 H 278.07708 M -3.7041667,164.57083 H 278.07708 M -3.7041667,167.21667 H 278.07708 M -3.7041667,169.8625 H 278.07708 M -3.7041667,172.50833 H 278.07708"
style="fill:none;stroke:#000000;stroke-width:0.0264583px"
id="path6231"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="view"
style="display:inline"
transform="translate(-0.83154762,-0.5291667)"
sodipodi:insensitive="true">
<image
y="25.031691"
x="152.64569"
id="image4500"
xlink:href="data:image/png;base64,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
AABJRU5ErkJggg==
"
preserveAspectRatio="none"
height="59.266666"
width="124.08958" />
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4584"
width="281.78125"
height="92.339584"
x="0.79375017"
y="0.72781485" />
<path
style="fill:none;stroke:#000080;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM)"
d="M 6.3169273,29.302814 H 112.84479 l 58.30755,25.135417"
id="path4586"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#000080;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-4)"
d="M 6.3212163,38.64276 H 112.84908 l 44.8138,27.384375"
id="path4586-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#000080;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.52916667, 0.52916667;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-4-7)"
d="M 6.4518573,20.602493 H 144.68958 l 5.90768,3.525536"
id="path4586-4-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="code"
style="display:inline"
transform="translate(-0.83154762,-0.5291667)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:1.25;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335"
x="6.4255972"
y="9.7992468"
id="text4512"><tspan
sodipodi:role="line"
x="6.4255972"
y="9.7992468"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4514"><tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4548"
dy="0">AutoConnect</tspan> portal;</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="18.617809"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4540"><tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4550">AutoConnectAux</tspan> aux(<tspan
style="line-height:8.81856251px;fill:#0088aa"
id="tspan4554">&quot;/mqtt_setting&quot;</tspan>, <tspan
style="line-height:8.81856251px;fill:#0088aa"
id="tspan4556">&quot;MQTT Setting&quot;</tspan>);</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="27.436373"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4516"><tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4570">ACText</tspan>(header, <tspan
style="line-height:8.81856251px;fill:#0088aa"
id="tspan4564">&quot;MQTT broker settings&quot;</tspan>);</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="36.254936"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4518"><tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4568">ACText</tspan>(caption, <tspan
style="line-height:8.81856251px;fill:#0088aa"
id="tspan4566">&quot;Publishing the WiFi...&quot;</tspan>);</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="43.751022"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4520" /><tspan
sodipodi:role="line"
x="6.4255972"
y="51.247108"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4522"><tspan
style="line-height:8.81856251px;fill:#00aad4"
id="tspan4574">void</tspan> <tspan
style="line-height:8.81856251px;fill:#666666"
id="tspan4576">setup</tspan>() {</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="60.06567"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4530"> aux.<tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4578">add</tspan>({ header, caption });</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="68.884232"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4532"> portal.<tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4580">join</tspan>(aux);</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="77.702797"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4534"> portal.<tspan
style="line-height:8.81856251px;fill:#ff6600"
id="tspan4582">begin</tspan>();</tspan><tspan
sodipodi:role="line"
x="6.4255972"
y="86.521362"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:8.81856251px;font-family:Consolas;-inkscape-font-specification:'Consolas, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335"
id="tspan4536">}</tspan></text>
<rect
style="opacity:0.34100001;fill:#000080;fill-opacity:1;stroke:none;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect6136"
width="21.702286"
height="8.2319012"
x="22.774387"
y="22.050135"
ry="4.1159506" />
<rect
style="display:inline;opacity:0.34100001;fill:#000080;fill-opacity:1;stroke:none;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect6136-3"
width="24.929565"
height="8.2319012"
x="22.774387"
y="30.936846"
ry="4.1159506" />
<rect
style="display:inline;opacity:0.34100001;fill:#000080;fill-opacity:1;stroke:none;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect6136-4"
width="21.702286"
height="8.2319012"
x="37.180214"
y="54.369694"
ry="4.1159506" />
<rect
style="display:inline;opacity:0.34100001;fill:#000080;fill-opacity:1;stroke:none;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect6136-4-0"
width="21.702286"
height="8.2319012"
x="60.005035"
y="54.369694"
ry="4.1159506" />
<rect
style="display:inline;opacity:0.34100001;fill:#800000;fill-opacity:1;stroke:none;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect6136-4-0-2"
width="12.113992"
height="8.2319012"
x="10.332994"
y="54.369694"
ry="4.1159506" />
<rect
style="display:inline;opacity:0.34100001;fill:#800000;fill-opacity:1;stroke:none;stroke-width:0.5291667;stroke-miterlimit:4;stroke-dasharray:0.52916668, 0.52916668;stroke-dashoffset:0;stroke-opacity:1"
id="rect6136-4-0-2-8"
width="12.113992"
height="8.2319012"
x="42.488857"
y="63.537045"
ry="4.1159506" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 47 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

@ -29,6 +29,13 @@ Easy implementing the Web interface constituting the WLAN for ESP8266/ESP32 WiFi
<span class="lead">The sketches which provide the web page using ESP8266WebServer there is, AutoConnect will not disturb it. AutoConnect can use an already instantiated ESP8266WebServer object, or itself can assign it.<br>This efficacy can also be applied to ESP32. The corresponding class for ESP32 will be the WebServer.</span> <span class="lead">The sketches which provide the web page using ESP8266WebServer there is, AutoConnect will not disturb it. AutoConnect can use an already instantiated ESP8266WebServer object, or itself can assign it.<br>This efficacy can also be applied to ESP32. The corresponding class for ESP32 will be the WebServer.</span>
### <i class="fa fa-arrow-circle-right" aria-hidden="true"></i> Easy to add custom web screen<sup><sub>ENHANCED w/v0.9.7</sub></sup>
<span class="lead">You can easily add your own web screen that can consist of representative HTML elements as the styled TEXT, INPUT, BUTTON, CHECKBOX, RADIO, SELECT, SUBMIT into the menu. It can be invoked from the AutoConnect menu and parameters can be passed. Custom screens can be written easily with JSON and can be loaded from PROGMEM, SPIFFS or SD.</span>
<img style="float:center;margin:0 10px 0 10px;width:380px" src="./images/aux_json.png">
<img style="float:center;margin:0 10px 0 10px;width:240px" src="./images/AutoConnectAux.gif">
## Installation ## Installation
### Requirements ### Requirements
@ -75,15 +82,15 @@ Install third-party platform using the *Boards Manager* of Arduino IDE. You can
<i class="fa fa-download"></i> <strong>Additional necessary library</strong> <i class="fa fa-download"></i> <strong>Additional necessary library</strong>
The [PageBuilder](https://github.com/Hieromon/PageBuilder) library to build HTML for ESP8266WebServer is needed. The [PageBuilder](https://github.com/Hieromon/PageBuilder) library to build HTML for ESP8266WebServer is needed.
To install the PageBuilder library into your Arduino IDE, you can use the *Library Manager*. Select the board of ESP8266 series in the Arduino IDE, open the library manager and search keyword '**PageBuilder**' with the topic '**Communication**', then you can see the *PageBuilder*. The latest version is required 1.2.0 later for ESP32.[^1] To install the PageBuilder library into your Arduino IDE, you can use the *Library Manager*. Select the board of ESP8266 series in the Arduino IDE, open the library manager and search keyword '**PageBuilder**' with the topic '**Communication**', then you can see the *PageBuilder*. The latest version is required 1.2.3 later for ESP32.[^1]
<img src="./images/lm.png" width="640"/> <img src="./images/lm.png" width="640"/>
[^1]:Since AutoConnect v0.9.7, PageBuilder v1.2.0 later is required. [^1]:Since AutoConnect v0.9.7, PageBuilder v1.2.3 later is required.
<i class="fa fa-download"></i> <strong>Optional required library</strong> <i class="fa fa-download"></i> <strong>Optional required library</strong>
The [ArduinoJson](https://github.com/bblanchon/ArduinoJson) library is necessary to be able to process AutoConnect elements with JSON description. Since AutoConnect v0.9.7, you can insert user owned screens that can consist of representative HTML elements as the styled TEXT, INPUT, BUTTON, CHECKBOX, SUBMIT to the AutoConnect menu. These HTML elements can also be programmatic added from user sketches using the AutoConnect API, but they can be easily loaded from JSON description stored in PROGMEM, SPIFFS or SD. [ArduinoJson version 5](https://arduinojson.org/v5/doc/) is required to use this function. The [ArduinoJson](https://github.com/bblanchon/ArduinoJson) library is necessary to be able to process the *AutoConnectElement* with JSON description. Since AutoConnect v0.9.7, you can insert user owned screens that can consist of representative HTML elements as the styled TEXT, INPUT, BUTTON, CHECKBOX, SELECT, SUBMIT to the AutoConnect menu. These HTML elements can also be added from user sketches using the AutoConnect API, but they can be easily loaded JSON description stored in PROGMEM, SPIFFS or SD. [ArduinoJson version 5](https://arduinojson.org/v5/doc/) is required to use this function.
!!! info "ArduinoJson version 6 is still in beta" !!! info "ArduinoJson version 6 is still in beta"
The Arduino Library Manager installs the ArduinoJson version 6 by default. Open the Arduino Library Manager and make sure that ArduinoJson version 5 is installed. The Arduino Library Manager installs the ArduinoJson version 6 by default. Open the Arduino Library Manager and make sure that ArduinoJson version 5 is installed.
@ -104,5 +111,5 @@ When you select Download, you can import it to Arduino IDE immediately. After do
<script> <script>
window.onload = function() { window.onload = function() {
Gifffer(); Gifffer();
} };
</script> </script>

Loading…
Cancel
Save