├── .gitattributes ├── .github └── workflows │ └── build.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── 404.html ├── acelements.html ├── achandling.html ├── acinteract.html ├── acintro.html ├── acjson.html ├── acupload.html ├── adauthentication.html ├── adconnection.html ├── adcpcontrol.html ├── adcredential.html ├── adexterior.html ├── adnetwork.html ├── adothers.html ├── advancedusage.html ├── api.html ├── apiaux.html ├── apiconfig.html ├── apielements.html ├── apiextra.html ├── apiupdate.html ├── assets │ ├── images │ │ └── favicon.png │ ├── javascripts │ │ ├── bundle.a00a7c5e.min.js │ │ ├── bundle.a00a7c5e.min.js.map │ │ ├── lunr │ │ │ ├── min │ │ │ │ ├── lunr.ar.min.js │ │ │ │ ├── lunr.da.min.js │ │ │ │ ├── lunr.de.min.js │ │ │ │ ├── lunr.du.min.js │ │ │ │ ├── lunr.es.min.js │ │ │ │ ├── lunr.fi.min.js │ │ │ │ ├── lunr.fr.min.js │ │ │ │ ├── lunr.hi.min.js │ │ │ │ ├── lunr.hu.min.js │ │ │ │ ├── lunr.it.min.js │ │ │ │ ├── lunr.ja.min.js │ │ │ │ ├── lunr.jp.min.js │ │ │ │ ├── lunr.ko.min.js │ │ │ │ ├── lunr.multi.min.js │ │ │ │ ├── lunr.nl.min.js │ │ │ │ ├── lunr.no.min.js │ │ │ │ ├── lunr.pt.min.js │ │ │ │ ├── lunr.ro.min.js │ │ │ │ ├── lunr.ru.min.js │ │ │ │ ├── lunr.stemmer.support.min.js │ │ │ │ ├── lunr.sv.min.js │ │ │ │ ├── lunr.ta.min.js │ │ │ │ ├── lunr.th.min.js │ │ │ │ ├── lunr.tr.min.js │ │ │ │ ├── lunr.vi.min.js │ │ │ │ └── lunr.zh.min.js │ │ │ ├── tinyseg.js │ │ │ └── wordcut.js │ │ └── workers │ │ │ ├── search.db81ec45.min.js │ │ │ └── search.db81ec45.min.js.map │ └── stylesheets │ │ ├── main.0d440cfe.min.css │ │ ├── main.0d440cfe.min.css.map │ │ ├── palette.2505c338.min.css │ │ └── palette.2505c338.min.css.map ├── basicusage.html ├── changelabel.html ├── changelog.html ├── colorized.html ├── credit.html ├── css │ ├── extra.css │ └── paragraph.css ├── datatips.html ├── esp32cam.html ├── faq.html ├── filesystem.html ├── gettingstarted.html ├── howtoembed.html ├── images │ ├── ACMenu_brown.png │ ├── ACMenu_dimgray.png │ ├── ACMenu_indigo.png │ ├── APIKeys.png │ ├── AutoConnectAux.gif │ ├── BeforeAfter.svg │ ├── ChannelID.png │ ├── ChannelStatus.png │ ├── CreateChannel.png │ ├── PageBuilder.png │ ├── USERKey.png │ ├── ac.png │ ├── ac2.gif │ ├── ac_auxjoin_multi.svg │ ├── ac_auxmenu.png │ ├── ac_auxmenu_multi.png │ ├── ac_declaration.svg │ ├── ac_json.png │ ├── ac_load_save.svg │ ├── ac_mqtt_setting.png │ ├── ac_objects.svg │ ├── ac_param_flow.svg │ ├── ac_upload_flow.svg │ ├── acbutton.png │ ├── accheckbox.png │ ├── acelement.png │ ├── acfile.png │ ├── acinput.png │ ├── acow.png │ ├── acradio.png │ ├── acrange.png │ ├── acselect.png │ ├── acsubmit.png │ ├── actext.png │ ├── adder.png │ ├── addmenu.gif │ ├── answer.png │ ├── applymenu.png │ ├── arduino-logo.svg │ ├── arrow_down.png │ ├── arrow_right.png │ ├── arrow_right.svg │ ├── aux_fsbrowser.gif │ ├── aux_json.png │ ├── aux_menu.gif │ ├── aux_ov.gif │ ├── aux_pattern.gif │ ├── aux_programing_model.svg │ ├── beforeafter.png │ ├── begin.png │ ├── broken_html.png │ ├── config_ssid.png │ ├── confignew.png │ ├── cp.gif │ ├── creditmigrate.png │ ├── declare.png │ ├── esp32-cam_structure.svg │ ├── esp32cam_view.png │ ├── espshaker.gif │ ├── established.png │ ├── export_binary.png │ ├── extswitch.png │ ├── fetch_led.gif │ ├── fsbmenu.png │ ├── fsbmenu_expand.png │ ├── fsbrowser_ba.svg │ ├── gitrepo.png │ ├── global.svg │ ├── global1.png │ ├── global2.png │ ├── handleClient.png │ ├── handleClient.svg │ ├── handlePortal.svg │ ├── heartbeat.png │ ├── hello_world.png │ ├── html5_forms_number.png │ ├── html5_forms_number_ios.png │ ├── include.png │ ├── ins_lib.png │ ├── jsmultiply.png │ ├── lm.png │ ├── localize.png │ ├── logic_sequence.svg │ ├── login.png │ ├── login_ani.gif │ ├── menu.png │ ├── menu_home.png │ ├── menu_login.png │ ├── menu_login.svg │ ├── menu_ondemand.png │ ├── menu_r.png │ ├── mqttcredential.png │ ├── mqttdevice.png │ ├── newap.png │ ├── newap_static.png │ ├── openssid.png │ ├── openssid_trash.png │ ├── otacaption.png │ ├── ov.gif │ ├── ov.png │ ├── ov.svg │ ├── partition.png │ ├── portalready_ac.png │ ├── portalready_el.png │ ├── process_begin.svg │ ├── regexp.png │ ├── reset.png │ ├── reset_r.png │ ├── resetting.png │ ├── rest_client.png │ ├── rssi_chart.png │ ├── serial.png │ ├── serverupdate.gif │ ├── stat.png │ ├── staticip.png │ ├── statistics.png │ ├── tag_ac.png │ ├── tag_accore.png │ ├── updated.png │ ├── updatelist.png │ ├── updatemenu.png │ ├── updatemodel.png │ ├── updatemodel.svg │ ├── updateserver.png │ ├── updateserver.svg │ ├── updating.png │ ├── upload.gif │ ├── vscode_clean.png │ ├── vscode_statusbar.png │ ├── webcamserver_ss1.png │ ├── webcamserver_ss2.png │ ├── webcamserver_ss3.png │ ├── webcamserver_structure.svg │ ├── webcamview_open.png │ ├── webcamview_set.png │ ├── webupdate.gif │ ├── webupdate.png │ ├── webupdate.svg │ ├── webupdatemodel.png │ └── webupdatemodel.svg ├── index.html ├── js │ └── gifffer.min.js ├── license.html ├── lsbegin.html ├── menu.html ├── menuize.html ├── otabrowser.html ├── otaserver.html ├── otaupdate.html ├── search │ └── search_index.json ├── sitemap.xml ├── sitemap.xml.gz └── wojson.html ├── examples ├── ConfigIP │ └── ConfigIP.ino ├── Credential │ └── Credential.ino ├── CreditMigrate │ ├── CreditMigrate.ino │ └── README.md ├── EEPROM │ └── EEPROM.ino ├── Elements │ └── Elements.ino ├── FSBrowser │ ├── FSBrowser.ino │ ├── LICENSE │ ├── README.md │ ├── data │ │ ├── edit │ │ │ └── index.htm │ │ ├── favicon.ico │ │ ├── index.htm │ │ └── pins.png │ └── extras │ │ ├── feathericons.png │ │ ├── index.htm.gz │ │ ├── index_htm.h │ │ └── reduce_index.sh ├── FSBrowser32 │ ├── FSBrowser32.ino │ ├── LICENSE │ ├── README.md │ └── data │ │ ├── edit.htm.gz │ │ ├── favicon.ico │ │ ├── graphs.js.gz │ │ └── index.htm ├── FetchLED │ └── FetchLED.ino ├── FileUpload │ └── FileUpload.ino ├── HandleClient │ └── HandleClient.ino ├── HandlePortal │ └── HandlePortal.ino ├── HandlePortalEX │ └── HandlePortalEX.ino ├── HelloWorld │ ├── Data │ │ ├── green.json │ │ └── tomato.json │ └── HelloWorld.ino ├── MyLabels │ └── mylabels.h ├── OTAUpdate │ └── OTAUpdate.ino ├── Simple │ └── Simple.ino ├── Update │ └── Update.ino ├── WebCamServer │ ├── ESP32Cam.cpp │ ├── ESP32Cam.h │ ├── ESP32Cam_pins.h │ ├── ESP32WebCam.cpp │ ├── ESP32WebCam.h │ ├── README.md │ ├── WebCamServer.ino │ └── data │ │ └── webcamview.html ├── WebSocketServer │ ├── MeasureRSSI.cpp │ ├── MeasureRSSI.h │ ├── WebSocketServer.ino │ └── data │ │ └── index.html ├── WebUpdate │ ├── HTTPUpdateServer.cpp │ ├── HTTPUpdateServer.h │ └── WebUpdate.ino ├── mqttRSSI │ ├── README.md │ ├── data │ │ └── param.json │ └── mqttRSSI.ino ├── mqttRSSI_FS │ ├── README.md │ ├── data │ │ ├── mqtt_clear.json │ │ ├── mqtt_setting.json │ │ ├── mqtt_start.json │ │ ├── mqtt_stop.json │ │ └── param.json │ └── mqttRSSI_FS.ino └── mqttRSSI_NA │ ├── mqttRSSI_NA.ino │ ├── param.cpp │ └── param.h ├── keywords.txt ├── library.json ├── library.properties ├── mkdocs.yml ├── mkdocs ├── acelements.md ├── achandling.md ├── acinteract.md ├── acintro.md ├── acjson.md ├── acupload.md ├── adauthentication.md ├── adconnection.md ├── adcpcontrol.md ├── adcredential.md ├── adexterior.md ├── adnetwork.md ├── adothers.md ├── advancedusage.md ├── api.md ├── apiaux.md ├── apiconfig.md ├── apielements.md ├── apiextra.md ├── apiupdate.md ├── basicusage.md ├── changelabel.md ├── changelog.md ├── colorized.md ├── credit.md ├── css │ ├── extra.css │ └── paragraph.css ├── datatips.md ├── esp32cam.md ├── faq.md ├── filesystem.md ├── gettingstarted.md ├── howtoembed.md ├── images │ ├── ACMenu_brown.png │ ├── ACMenu_dimgray.png │ ├── ACMenu_indigo.png │ ├── APIKeys.png │ ├── AutoConnectAux.gif │ ├── BeforeAfter.svg │ ├── ChannelID.png │ ├── ChannelStatus.png │ ├── CreateChannel.png │ ├── PageBuilder.png │ ├── USERKey.png │ ├── ac.png │ ├── ac2.gif │ ├── ac_auxjoin_multi.svg │ ├── ac_auxmenu.png │ ├── ac_auxmenu_multi.png │ ├── ac_declaration.svg │ ├── ac_json.png │ ├── ac_load_save.svg │ ├── ac_mqtt_setting.png │ ├── ac_objects.svg │ ├── ac_param_flow.svg │ ├── ac_upload_flow.svg │ ├── acbutton.png │ ├── accheckbox.png │ ├── acelement.png │ ├── acfile.png │ ├── acinput.png │ ├── acow.png │ ├── acradio.png │ ├── acrange.png │ ├── acselect.png │ ├── acsubmit.png │ ├── actext.png │ ├── adder.png │ ├── addmenu.gif │ ├── answer.png │ ├── applymenu.png │ ├── arduino-logo.svg │ ├── arrow_down.png │ ├── arrow_right.png │ ├── arrow_right.svg │ ├── aux_fsbrowser.gif │ ├── aux_json.png │ ├── aux_menu.gif │ ├── aux_ov.gif │ ├── aux_pattern.gif │ ├── aux_programing_model.svg │ ├── beforeafter.png │ ├── begin.png │ ├── broken_html.png │ ├── config_ssid.png │ ├── confignew.png │ ├── cp.gif │ ├── creditmigrate.png │ ├── declare.png │ ├── esp32-cam_structure.svg │ ├── esp32cam_view.png │ ├── espshaker.gif │ ├── established.png │ ├── export_binary.png │ ├── extswitch.png │ ├── fetch_led.gif │ ├── fsbmenu.png │ ├── fsbmenu_expand.png │ ├── fsbrowser_ba.svg │ ├── gitrepo.png │ ├── global.svg │ ├── global1.png │ ├── global2.png │ ├── handleClient.png │ ├── handleClient.svg │ ├── handlePortal.svg │ ├── heartbeat.png │ ├── hello_world.png │ ├── html5_forms_number.png │ ├── html5_forms_number_ios.png │ ├── include.png │ ├── ins_lib.png │ ├── jsmultiply.png │ ├── lm.png │ ├── localize.png │ ├── logic_sequence.svg │ ├── login.png │ ├── login_ani.gif │ ├── menu.png │ ├── menu_home.png │ ├── menu_login.png │ ├── menu_login.svg │ ├── menu_ondemand.png │ ├── menu_r.png │ ├── mqttcredential.png │ ├── mqttdevice.png │ ├── newap.png │ ├── newap_static.png │ ├── openssid.png │ ├── openssid_trash.png │ ├── otacaption.png │ ├── ov.gif │ ├── ov.png │ ├── ov.svg │ ├── partition.png │ ├── portalready_ac.png │ ├── portalready_el.png │ ├── process_begin.svg │ ├── regexp.png │ ├── reset.png │ ├── reset_r.png │ ├── resetting.png │ ├── rest_client.png │ ├── rssi_chart.png │ ├── serial.png │ ├── serverupdate.gif │ ├── stat.png │ ├── staticip.png │ ├── statistics.png │ ├── tag_ac.png │ ├── tag_accore.png │ ├── updated.png │ ├── updatelist.png │ ├── updatemenu.png │ ├── updatemodel.png │ ├── updatemodel.svg │ ├── updateserver.png │ ├── updateserver.svg │ ├── updating.png │ ├── upload.gif │ ├── vscode_clean.png │ ├── vscode_statusbar.png │ ├── webcamserver_ss1.png │ ├── webcamserver_ss2.png │ ├── webcamserver_ss3.png │ ├── webcamserver_structure.svg │ ├── webcamview_open.png │ ├── webcamview_set.png │ ├── webupdate.gif │ ├── webupdate.png │ ├── webupdate.svg │ ├── webupdatemodel.png │ └── webupdatemodel.svg ├── index.md ├── js │ └── gifffer.min.js ├── license.md ├── lsbegin.md ├── menu.md ├── menuize.md ├── otabrowser.md ├── otaserver.md ├── otaupdate.md └── wojson.md └── src ├── AutoConnect.h ├── AutoConnectAux.cpp ├── AutoConnectAux.h ├── AutoConnectConfigAux.cpp ├── AutoConnectConfigAux.h ├── AutoConnectConfigBase.h ├── AutoConnectConfigExt.h ├── AutoConnectCore.h ├── AutoConnectCore.hpp ├── AutoConnectCoreImpl.hpp ├── AutoConnectCredential.cpp ├── AutoConnectCredential.h ├── AutoConnectDefs.h ├── AutoConnectElement.h ├── AutoConnectElementBasis.h ├── AutoConnectElementBasisImpl.h ├── AutoConnectElementJson.h ├── AutoConnectElementJsonImpl.h ├── AutoConnectExt.hpp ├── AutoConnectExtImpl.hpp ├── AutoConnectFS.h ├── AutoConnectJsonDefs.h ├── AutoConnectLabels.h ├── AutoConnectOTA.cpp ├── AutoConnectOTA.h ├── AutoConnectOTAPage.h ├── AutoConnectPage.h ├── AutoConnectPageImpl.hpp ├── AutoConnectTicker.cpp ├── AutoConnectTicker.h ├── AutoConnectTypes.h ├── AutoConnectUpdate.cpp ├── AutoConnectUpdate.h ├── AutoConnectUpdatePage.h ├── AutoConnectUpload.h ├── AutoConnectUploadImpl.h └── updateserver ├── README.md ├── python2 └── updateserver.py └── python3 └── updateserver.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Files generated by build 2 | .vs/ 3 | .vscode/ 4 | __vm/ 5 | [Dd]ebug/ 6 | [Rr]elease/ 7 | *.[Tt][Mm][Pp] 8 | *.sln 9 | *.vcxproj* 10 | *.vcxitems 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Hieromon Ikasamo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/assets/images/favicon.png -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.da.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Danish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.hi.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.ja.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.sv.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Swedish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.ta.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.th.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.vi.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); -------------------------------------------------------------------------------- /docs/assets/javascripts/lunr/min/lunr.zh.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); -------------------------------------------------------------------------------- /docs/assets/stylesheets/palette.2505c338.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAKE,YAAA,CAGA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,gDAAA,CACA,gDAAA,CAGA,4BAAA,CACA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,iCAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,yDAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,wDAAA,CAGA,0DAAA,CAKA,8DAAA,CAKA,0DCxDF,CD6DE,kHAEE,YC3DJ,CD+DE,gHAEE,eC7DJ,CDoFE,yDACE,4BClFJ,CDiFE,2DACE,4BC/EJ,CD8EE,gEACE,4BC5EJ,CD2EE,2DACE,4BCzEJ,CDwEE,yDACE,4BCtEJ,CDqEE,0DACE,4BCnEJ,CDkEE,gEACE,4BChEJ,CD+DE,0DACE,4BC7DJ,CD4DE,2OACE,4BCjDJ,CDwDA,+FAGE,iCCtDF,CACF,CCjDE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD6CN,CCvDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoDN,CC9DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2DN,CCrEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkEN,CC5EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyEN,CCnFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgFN,CC1FE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuFN,CCjGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8FN,CCxGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqGN,CC/GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4GN,CCtHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmHN,CC7HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD6HN,CCpIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDoIN,CC3IE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2IN,CClJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkJN,CCzJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDsJN,CE3JE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwJN,CEnKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgKN,CE3KE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwKN,CEnLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgLN,CE3LE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwLN,CEnME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgMN,CE3ME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwMN,CEnNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgNN,CE3NE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwNN,CEnOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgON,CE3OE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwON,CEnPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFmPN,CE3PE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCF2PN,CEnQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFmQN,CE3QE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCF2QN,CEnRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgRN,CE3RE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwRN,CEnSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF4RN,CE5SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFqSN,CEtRE,sEACE,4BFyRJ,CE1RE,+DACE,4BF6RJ,CE9RE,iEACE,4BFiSJ,CElSE,gEACE,4BFqSJ,CEtSE,iEACE,4BFySJ,CEhSA,8BACE,0BAAA,CACA,sCAAA,CACA,qCAAA,CACA,+BAAA,CACA,sCAAA,CAGA,4BFiSF,CE9RE,yCACE,+BFgSJ,CE7RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,UFiSN,CG7MI,mCD1EA,+CACE,0BF0RJ,CEvRI,qDACE,0BFyRN,CEpRE,iEACE,eFsRJ,CACF,CGxNI,sCDvDA,uCACE,oCFkRJ,CACF,CEzQA,8BACE,0BAAA,CACA,sCAAA,CACA,gCAAA,CACA,0BAAA,CACA,sCAAA,CAGA,4BF0QF,CEvQE,yCACE,+BFyQJ,CEtQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,UF0QN,CEnQE,yCACE,qBFqQJ,CG9NI,wCDhCA,8CACE,0BFiQJ,CACF,CGtPI,mCDJA,+CACE,0BF6PJ,CE1PI,qDACE,0BF4PN,CACF,CG3OI,wCDTA,iFACE,qBFuPJ,CACF,CGnQI,sCDmBA,uCACE,qBFmPJ,CACF","file":"palette.css"} -------------------------------------------------------------------------------- /docs/css/extra.css: -------------------------------------------------------------------------------- 1 | pre { color: white !important; } 2 | 3 | .md-clipboard:before { 4 | color: rgb(100, 100, 100); 5 | } 6 | 7 | .codehilite:hover .md-clipboard:before,.md-typeset .highlight:hover .md-clipboard:before,pre:hover .md-clipboard:before { 8 | color: rgba(255, 255, 255, 0.54) !important 9 | } 10 | 11 | @media only screen and (min-width: 76.25em) { 12 | .md-main__inner { 13 | max-width: none; 14 | } 15 | .md-sidebar--primary { 16 | left: 0; 17 | } 18 | .md-sidebar--secondary { 19 | right: 0; 20 | margin-left: 0; 21 | -webkit-transform: none; 22 | transform: none; 23 | } 24 | } -------------------------------------------------------------------------------- /docs/css/paragraph.css: -------------------------------------------------------------------------------- 1 | .lead { 2 | color: gray; 3 | font-size: 15px; 4 | } 5 | 6 | .md-typeset h2 { 7 | border-bottom: solid 1px #d3d3d3; 8 | padding-bottom: 5px; 9 | } 10 | 11 | .md-typeset pre, .highlight code { 12 | background-color: #272822 !important; 13 | font-size: 12px; 14 | } 15 | 16 | .md-typeset .highlighttable .codehilitetable { 17 | margin-left:-20px; 18 | margin-right: -20px; 19 | border-radius: 0; 20 | } 21 | 22 | .md-typeset .highlighttable .codehilitetable .linenodiv { 23 | background-color: #222 !important; 24 | } 25 | 26 | .md-typeset .highlighttable .codehilitetable .linenodiv pre { 27 | background-color: #222 !important; 28 | color: #aaa; 29 | margin: 0; 30 | } 31 | 32 | .md-typeset .codehilitetable .md-clipboard:before { 33 | color: rgba(240,240,240,.8); 34 | } 35 | .md-typeset .codehilitetable .md-clipboard:hover:before { 36 | color: rgba(102,217,224,1); 37 | } 38 | 39 | .md-typeset .badge { 40 | padding: 0; 41 | margin-top: -20px; 42 | } 43 | 44 | .apidl { 45 | margin-left: 20px; 46 | } 47 | 48 | .apidef { 49 | display: block; 50 | float: left; 51 | width: 100px; 52 | } 53 | 54 | .apidesc { 55 | display: inline-block; 56 | width: calc(100% - 100px); 57 | } 58 | 59 | .horizontal-list { 60 | list-style-type: none; 61 | overflow: hidden; 62 | } 63 | 64 | .horizontal-list > li { 65 | float: left; 66 | display: block; 67 | } 68 | 69 | table.achandling { 70 | font-family: arial, sans-serif; 71 | border-collapse: collapse; 72 | width: 60%; 73 | color: black; 74 | } 75 | 76 | table.achandling th, table.achandling td { 77 | border: 1px solid #dddddd; 78 | text-align: center; 79 | padding: 8px; 80 | } 81 | 82 | table.achandling tr:nth-child(even) { 83 | background-color: #dddddd; 84 | } 85 | -------------------------------------------------------------------------------- /docs/images/ACMenu_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ACMenu_brown.png -------------------------------------------------------------------------------- /docs/images/ACMenu_dimgray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ACMenu_dimgray.png -------------------------------------------------------------------------------- /docs/images/ACMenu_indigo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ACMenu_indigo.png -------------------------------------------------------------------------------- /docs/images/APIKeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/APIKeys.png -------------------------------------------------------------------------------- /docs/images/AutoConnectAux.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/AutoConnectAux.gif -------------------------------------------------------------------------------- /docs/images/ChannelID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ChannelID.png -------------------------------------------------------------------------------- /docs/images/ChannelStatus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ChannelStatus.png -------------------------------------------------------------------------------- /docs/images/CreateChannel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/CreateChannel.png -------------------------------------------------------------------------------- /docs/images/PageBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/PageBuilder.png -------------------------------------------------------------------------------- /docs/images/USERKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/USERKey.png -------------------------------------------------------------------------------- /docs/images/ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ac.png -------------------------------------------------------------------------------- /docs/images/ac2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ac2.gif -------------------------------------------------------------------------------- /docs/images/ac_auxmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ac_auxmenu.png -------------------------------------------------------------------------------- /docs/images/ac_auxmenu_multi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ac_auxmenu_multi.png -------------------------------------------------------------------------------- /docs/images/ac_json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ac_json.png -------------------------------------------------------------------------------- /docs/images/ac_mqtt_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ac_mqtt_setting.png -------------------------------------------------------------------------------- /docs/images/acbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acbutton.png -------------------------------------------------------------------------------- /docs/images/accheckbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/accheckbox.png -------------------------------------------------------------------------------- /docs/images/acelement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acelement.png -------------------------------------------------------------------------------- /docs/images/acfile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acfile.png -------------------------------------------------------------------------------- /docs/images/acinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acinput.png -------------------------------------------------------------------------------- /docs/images/acow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acow.png -------------------------------------------------------------------------------- /docs/images/acradio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acradio.png -------------------------------------------------------------------------------- /docs/images/acrange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acrange.png -------------------------------------------------------------------------------- /docs/images/acselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acselect.png -------------------------------------------------------------------------------- /docs/images/acsubmit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/acsubmit.png -------------------------------------------------------------------------------- /docs/images/actext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/actext.png -------------------------------------------------------------------------------- /docs/images/adder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/adder.png -------------------------------------------------------------------------------- /docs/images/addmenu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/addmenu.gif -------------------------------------------------------------------------------- /docs/images/answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/answer.png -------------------------------------------------------------------------------- /docs/images/applymenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/applymenu.png -------------------------------------------------------------------------------- /docs/images/arduino-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 29 | 33 | 37 | 38 | 43 | 46 | 50 | 51 | 57 | 58 | 59 | 60 | 65 | 68 | 72 | 73 | 74 | 79 | 83 | 87 | 88 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /docs/images/arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/arrow_down.png -------------------------------------------------------------------------------- /docs/images/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/arrow_right.png -------------------------------------------------------------------------------- /docs/images/arrow_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 39 | 41 | 42 | 44 | image/svg+xml 45 | 47 | 48 | 49 | 50 | 51 | 55 | 59 | 62 | 68 | 69 | 70 | 71 | 76 | 77 | -------------------------------------------------------------------------------- /docs/images/aux_fsbrowser.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/aux_fsbrowser.gif -------------------------------------------------------------------------------- /docs/images/aux_json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/aux_json.png -------------------------------------------------------------------------------- /docs/images/aux_menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/aux_menu.gif -------------------------------------------------------------------------------- /docs/images/aux_ov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/aux_ov.gif -------------------------------------------------------------------------------- /docs/images/aux_pattern.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/aux_pattern.gif -------------------------------------------------------------------------------- /docs/images/beforeafter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/beforeafter.png -------------------------------------------------------------------------------- /docs/images/begin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/begin.png -------------------------------------------------------------------------------- /docs/images/broken_html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/broken_html.png -------------------------------------------------------------------------------- /docs/images/config_ssid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/config_ssid.png -------------------------------------------------------------------------------- /docs/images/confignew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/confignew.png -------------------------------------------------------------------------------- /docs/images/cp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/cp.gif -------------------------------------------------------------------------------- /docs/images/creditmigrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/creditmigrate.png -------------------------------------------------------------------------------- /docs/images/declare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/declare.png -------------------------------------------------------------------------------- /docs/images/esp32cam_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/esp32cam_view.png -------------------------------------------------------------------------------- /docs/images/espshaker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/espshaker.gif -------------------------------------------------------------------------------- /docs/images/established.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/established.png -------------------------------------------------------------------------------- /docs/images/export_binary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/export_binary.png -------------------------------------------------------------------------------- /docs/images/extswitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/extswitch.png -------------------------------------------------------------------------------- /docs/images/fetch_led.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/fetch_led.gif -------------------------------------------------------------------------------- /docs/images/fsbmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/fsbmenu.png -------------------------------------------------------------------------------- /docs/images/fsbmenu_expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/fsbmenu_expand.png -------------------------------------------------------------------------------- /docs/images/gitrepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/gitrepo.png -------------------------------------------------------------------------------- /docs/images/global1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/global1.png -------------------------------------------------------------------------------- /docs/images/global2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/global2.png -------------------------------------------------------------------------------- /docs/images/handleClient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/handleClient.png -------------------------------------------------------------------------------- /docs/images/heartbeat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/heartbeat.png -------------------------------------------------------------------------------- /docs/images/hello_world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/hello_world.png -------------------------------------------------------------------------------- /docs/images/html5_forms_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/html5_forms_number.png -------------------------------------------------------------------------------- /docs/images/html5_forms_number_ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/html5_forms_number_ios.png -------------------------------------------------------------------------------- /docs/images/include.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/include.png -------------------------------------------------------------------------------- /docs/images/ins_lib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ins_lib.png -------------------------------------------------------------------------------- /docs/images/jsmultiply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/jsmultiply.png -------------------------------------------------------------------------------- /docs/images/lm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/lm.png -------------------------------------------------------------------------------- /docs/images/localize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/localize.png -------------------------------------------------------------------------------- /docs/images/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/login.png -------------------------------------------------------------------------------- /docs/images/login_ani.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/login_ani.gif -------------------------------------------------------------------------------- /docs/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/menu.png -------------------------------------------------------------------------------- /docs/images/menu_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/menu_home.png -------------------------------------------------------------------------------- /docs/images/menu_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/menu_login.png -------------------------------------------------------------------------------- /docs/images/menu_ondemand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/menu_ondemand.png -------------------------------------------------------------------------------- /docs/images/menu_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/menu_r.png -------------------------------------------------------------------------------- /docs/images/mqttcredential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/mqttcredential.png -------------------------------------------------------------------------------- /docs/images/mqttdevice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/mqttdevice.png -------------------------------------------------------------------------------- /docs/images/newap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/newap.png -------------------------------------------------------------------------------- /docs/images/newap_static.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/newap_static.png -------------------------------------------------------------------------------- /docs/images/openssid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/openssid.png -------------------------------------------------------------------------------- /docs/images/openssid_trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/openssid_trash.png -------------------------------------------------------------------------------- /docs/images/otacaption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/otacaption.png -------------------------------------------------------------------------------- /docs/images/ov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ov.gif -------------------------------------------------------------------------------- /docs/images/ov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/ov.png -------------------------------------------------------------------------------- /docs/images/partition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/partition.png -------------------------------------------------------------------------------- /docs/images/portalready_ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/portalready_ac.png -------------------------------------------------------------------------------- /docs/images/portalready_el.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/portalready_el.png -------------------------------------------------------------------------------- /docs/images/regexp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/regexp.png -------------------------------------------------------------------------------- /docs/images/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/reset.png -------------------------------------------------------------------------------- /docs/images/reset_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/reset_r.png -------------------------------------------------------------------------------- /docs/images/resetting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/resetting.png -------------------------------------------------------------------------------- /docs/images/rest_client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/rest_client.png -------------------------------------------------------------------------------- /docs/images/rssi_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/rssi_chart.png -------------------------------------------------------------------------------- /docs/images/serial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/serial.png -------------------------------------------------------------------------------- /docs/images/serverupdate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/serverupdate.gif -------------------------------------------------------------------------------- /docs/images/stat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/stat.png -------------------------------------------------------------------------------- /docs/images/staticip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/staticip.png -------------------------------------------------------------------------------- /docs/images/statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/statistics.png -------------------------------------------------------------------------------- /docs/images/tag_ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/tag_ac.png -------------------------------------------------------------------------------- /docs/images/tag_accore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/tag_accore.png -------------------------------------------------------------------------------- /docs/images/updated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/updated.png -------------------------------------------------------------------------------- /docs/images/updatelist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/updatelist.png -------------------------------------------------------------------------------- /docs/images/updatemenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/updatemenu.png -------------------------------------------------------------------------------- /docs/images/updatemodel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/updatemodel.png -------------------------------------------------------------------------------- /docs/images/updateserver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/updateserver.png -------------------------------------------------------------------------------- /docs/images/updating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/updating.png -------------------------------------------------------------------------------- /docs/images/upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/upload.gif -------------------------------------------------------------------------------- /docs/images/vscode_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/vscode_clean.png -------------------------------------------------------------------------------- /docs/images/vscode_statusbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/vscode_statusbar.png -------------------------------------------------------------------------------- /docs/images/webcamserver_ss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webcamserver_ss1.png -------------------------------------------------------------------------------- /docs/images/webcamserver_ss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webcamserver_ss2.png -------------------------------------------------------------------------------- /docs/images/webcamserver_ss3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webcamserver_ss3.png -------------------------------------------------------------------------------- /docs/images/webcamview_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webcamview_open.png -------------------------------------------------------------------------------- /docs/images/webcamview_set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webcamview_set.png -------------------------------------------------------------------------------- /docs/images/webupdate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webupdate.gif -------------------------------------------------------------------------------- /docs/images/webupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webupdate.png -------------------------------------------------------------------------------- /docs/images/webupdatemodel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/images/webupdatemodel.png -------------------------------------------------------------------------------- /docs/js/gifffer.min.js: -------------------------------------------------------------------------------- 1 | (function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define("Gifffer",[],factory);else if(typeof exports==="object")exports["Gifffer"]=factory();else root["Gifffer"]=factory()})(this,function(){if(typeof window==="undefined"||typeof document==="undefined"){return}var d=document;var playSize=60;var Gifffer=function(options){var images,i=0,gifs=[];images=d.querySelectorAll("[data-gifffer]");for(;i0?"":"px")}function parseStyles(styles){var stylesStr="";for(prop in styles)stylesStr+=prop+":"+styles[prop]+";";return stylesStr}function createContainer(w,h,el,altText,opts){var alt;var con=d.createElement("BUTTON");var cls=el.getAttribute("class");var id=el.getAttribute("id");var playButtonStyles=opts&&opts.playButtonStyles?parseStyles(opts.playButtonStyles):["width:"+playSize+"px","height:"+playSize+"px","border-radius:"+playSize/2+"px","background:rgba(0, 0, 0, 0.3)","position:absolute","top:50%","left:50%","margin:-"+playSize/2+"px"].join(";");var playButtonIconStyles=opts&&opts.playButtonIconStyles?parseStyles(opts.playButtonIconStyles):["width: 0","height: 0","border-top: 14px solid transparent","border-bottom: 14px solid transparent","border-left: 14px solid rgba(0, 0, 0, 0.5)","position: absolute","left: 26px","top: 16px"].join(";");cls?con.setAttribute("class",el.getAttribute("class")):null;id?con.setAttribute("id",el.getAttribute("id")):null;con.setAttribute("style","position:relative;cursor:pointer;background:none;border:none;padding:0;");con.setAttribute("aria-hidden","true");var play=d.createElement("DIV");play.setAttribute("class","gifffer-play-button");play.setAttribute("style",playButtonStyles);var trngl=d.createElement("DIV");trngl.setAttribute("style",playButtonIconStyles);play.appendChild(trngl);if(altText){alt=d.createElement("p");alt.setAttribute("class","gifffer-alt");alt.setAttribute("style","border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px;");alt.innerText=altText+", image"}con.appendChild(play);el.parentNode.replaceChild(con,el);altText?con.parentNode.insertBefore(alt,con.nextSibling):null;return{c:con,p:play}}function calculatePercentageDim(el,w,h,wOrig,hOrig){var parentDimW=el.parentNode.offsetWidth;var parentDimH=el.parentNode.offsetHeight;var ratio=wOrig/hOrig;if(w.toString().indexOf("%")>0){w=parseInt(w.toString().replace("%",""));w=w/100*parentDimW;h=w/ratio}else if(h.toString().indexOf("%")>0){h=parseInt(h.toString().replace("%",""));h=h/100*parentDimW;w=h*ratio}return{w:w,h:h}}function process(el,gifs,options){var url,con,c,w,h,duration,play,gif,playing=false,cc,isC,durationTimeout,dims,altText;url=el.getAttribute("data-gifffer");w=el.getAttribute("data-gifffer-width");h=el.getAttribute("data-gifffer-height");duration=el.getAttribute("data-gifffer-duration");altText=el.getAttribute("data-gifffer-alt");el.style.display="block";c=document.createElement("canvas");isC=!!(c.getContext&&c.getContext("2d"));if(w&&h&&isC)cc=createContainer(w,h,el,altText,options);el.onload=function(){if(!isC)return;w=w||el.width;h=h||el.height;if(!cc)cc=createContainer(w,h,el,altText,options);con=cc.c;play=cc.p;dims=calculatePercentageDim(con,w,h,el.width,el.height);gifs.push(con);con.addEventListener("click",function(){clearTimeout(durationTimeout);if(!playing){playing=true;gif=document.createElement("IMG");gif.setAttribute("style","width:100%;height:100%;");gif.setAttribute("data-uri",Math.floor(Math.random()*1e5)+1);setTimeout(function(){gif.src=url},0);con.removeChild(play);con.removeChild(c);con.appendChild(gif);if(parseInt(duration)>0){durationTimeout=setTimeout(function(){playing=false;con.appendChild(play);con.removeChild(gif);con.appendChild(c);gif=null},duration)}}else{playing=false;con.appendChild(play);con.removeChild(gif);con.appendChild(c);gif=null}});c.width=dims.w;c.height=dims.h;c.getContext("2d").drawImage(el,0,0,dims.w,dims.h);con.appendChild(c);con.setAttribute("style","position:relative;cursor:pointer;width:"+dims.w+"px;height:"+dims.h+"px;background:none;border:none;padding:0;");c.style.width="100%";c.style.height="100%";if(w.toString().indexOf("%")>0&&h.toString().indexOf("%")>0){con.style.width=w;con.style.height=h}else if(w.toString().indexOf("%")>0){con.style.width=w;con.style.height="inherit"}else if(h.toString().indexOf("%")>0){con.style.width="inherit";con.style.height=h}else{con.style.width=dims.w+"px";con.style.height=dims.h+"px"}};el.src=url}return Gifffer}); -------------------------------------------------------------------------------- /docs/sitemap.xml.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/docs/sitemap.xml.gz -------------------------------------------------------------------------------- /examples/CreditMigrate/CreditMigrate.ino: -------------------------------------------------------------------------------- 1 | /* 2 | CreditMigrate.ino 3 | Copyright (c) 2019, Hieromon Ikasamo 4 | https://github.com/Hieromon/AutoConnect 5 | This software is released under the MIT License. 6 | https://opensource.org/licenses/MIT 7 | This sketch migrates the credentials past saved to EEPROM in ESP32 to 8 | Preferences. 9 | */ 10 | 11 | #ifndef ARDUINO_ARCH_ESP32 12 | #error This sketch should be compiled with the board of ESP32. 13 | #endif 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | /** 22 | * Retrieve saved credentials from eeprom partition. 23 | * @param size Returns a size of the eeprom partition 24 | * @return Retrieved data buffered pointer 25 | */ 26 | uint8_t* retrievePartition(const char* name, size_t *size) { 27 | const esp_partition_t* eeprom = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, name); 28 | 29 | if (!eeprom) { 30 | Serial.printf("%s partition not found\n", name); 31 | return nullptr; 32 | } 33 | uint8_t* pBuf = (uint8_t*)malloc(eeprom->size); 34 | if (!pBuf) { 35 | Serial.printf("Insufficient memory to retrieve %s partition\n", name); 36 | return nullptr; 37 | } 38 | if (esp_partition_read(eeprom, 0, (void*)pBuf, eeprom->size) != ESP_OK) { 39 | Serial.printf("Unable to read %s partition\n", name); 40 | free(pBuf); 41 | return nullptr; 42 | } 43 | *size = eeprom->size; 44 | return pBuf; 45 | } 46 | 47 | /** 48 | * Write credentials in retrieved buffer to Preferences. 49 | * @param eeprom Retrieved data buffered pointer 50 | * @param size Retrieved data size 51 | */ 52 | void convert(const uint8_t* eeprom, const size_t size) { 53 | uint8_t* ac_credt = (uint8_t*)strstr((const char*)eeprom, "AC_CREDT"); 54 | if (!ac_credt) 55 | Serial.println("AC_CREDT identifier not found in the partition."); 56 | else { 57 | AutoConnectCredential credential; 58 | uint8_t* bp = ac_credt + sizeof("AC_CREDT") - sizeof('\0'); 59 | uint8_t* dp = bp; 60 | uint8_t entries = *dp++; 61 | size_t dpSize = *dp++; 62 | dpSize += *dp++ << 8; 63 | Serial.printf("%d stored credential(s),size:%d\n", (int)entries, dpSize); 64 | 65 | // Start EEPROM to Preferences migration 66 | uint8_t* ep = dp + dpSize - 1; 67 | for (int ec = 1; dp <= ep; ec++) { 68 | 69 | // Skip erased entry 70 | while (*dp == 0xff) { 71 | if (++dp > ep) 72 | break; 73 | } 74 | if (dp > ep) // It reached at the end of the credential region. 75 | break; 76 | 77 | // Obtain each entry and store to Preferences 78 | station_config_t config; 79 | Serial.printf("[%d] ", ec); 80 | uint8_t ei = 0; 81 | do { 82 | config.ssid[ei++] = *dp; 83 | } while (*dp++); 84 | Serial.print((char*)config.ssid); 85 | ei = 0; 86 | do { 87 | config.password[ei++] = *dp; 88 | } while (*dp++); 89 | Serial.printf("(%s)", config.password); 90 | for (ei = 0; ei < sizeof(config.bssid); ei++) { 91 | config.bssid[ei] = *dp++; 92 | Serial.printf(":%02x", config.bssid[ei]); 93 | } 94 | config.dhcp = *dp++; 95 | if (config.dhcp == STA_STATIC) { 96 | for (uint8_t e = 0; e < sizeof(station_config_t::_config::addr) / sizeof(uint32_t); e++) { 97 | uint32_t* ip = &config.config.addr[e]; 98 | *ip = 0; 99 | for (uint8_t b = 0; b < sizeof(uint32_t); b++) { 100 | *ip <<= 8; 101 | *ip += *dp++; 102 | } 103 | } 104 | } 105 | bool rc = credential.save(&config); 106 | Serial.println(rc ? " transferred" : " failed to save Preferences"); 107 | } 108 | } 109 | } 110 | 111 | void setup() { 112 | delay(1000); 113 | Serial.begin(115200); 114 | Serial.println(); 115 | 116 | size_t eepromSize; 117 | uint8_t* eepromData = retrievePartition("eeprom", &eepromSize); 118 | if (eepromData) { 119 | Serial.println("Start migration to Preferences"); 120 | convert(eepromData, eepromSize); 121 | Serial.println("Transfer ended"); 122 | free(eepromData); 123 | } 124 | } 125 | 126 | void loop() {} 127 | -------------------------------------------------------------------------------- /examples/CreditMigrate/README.md: -------------------------------------------------------------------------------- 1 | ## CreditMigrate.ino - A migration tool for the saved credentials 2 | 3 | ### Description 4 | 5 | Since AutoConnect v1.0.0 for ESP32, the storage location in the flash of established credentials has moved from EEPROM to Preferences. After You update AutoConnect to v1.0.0, past credentials saved by v0.9.12 earlier will *not be accessible* from the AutoConnect menu - **Open SSIDs**. You need to transfer once the stored credentials from the EEPROM area to the Preferences area. 6 | 7 | **CreditMigrate.ino** transports the credentials stored in EEPROM to the Preferences area to inherit them for AutoConnect v1.0.0 or later. 8 | 9 | ### Restrictions 10 | 11 | - CreditMigrate.ino is only applicable to ESP32 boards. It cannot be executed with a compile error on the ESP8266 boards. (ESP8266 does not require credential migration.) 12 | - CreditMigrate.ino will work properly with the installed ESP32 core version is 1.0.2 or earlier. (In ESP32 core 1.0.3, EEPROM area has moved from partition to the nvs. CreditMigrate.ino will not work properly with ESP32 core 1.0.3. ESP32 core 1.0.2 is recommended) 13 | 14 | ### Saved credentials migration procedure on your ESP32 board 15 | 16 | 1. Connect your host PC and ESP32 module with serial and start Arduino IDE. 17 | 2. Confirm that the version of the ESP32 core currently installed via the board manager of ArduinoIDE is 1.0.2 or earlier. 18 | 3. Open **CreditMigrate.ino** as a sketch in the examples of the AutoConnect library folder. 19 | 4. From the Arduino IDE menu: **Tools > Board:** to select the one that matches your ESP32 board and set it up. 20 | 5. Open the serial monitor of Arduino IDE. 21 | 6. From the Arduino IDE menu: **Sketch > Upload** to compile and upload the sketch. 22 | 7. It will transport the past credentials that had been stored in EEPROM to Preferences. You can confirm the result on the serial monitor. 23 | 24 | 25 | -------------------------------------------------------------------------------- /examples/FSBrowser/data/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser/data/favicon.ico -------------------------------------------------------------------------------- /examples/FSBrowser/data/index.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ESP Index 6 | 12 | 17 | 18 | 19 |

ESP8266 Pin Functions

20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/FSBrowser/data/pins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser/data/pins.png -------------------------------------------------------------------------------- /examples/FSBrowser/extras/feathericons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser/extras/feathericons.png -------------------------------------------------------------------------------- /examples/FSBrowser/extras/index.htm.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser/extras/index.htm.gz -------------------------------------------------------------------------------- /examples/FSBrowser/extras/reduce_index.sh: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | # Processing script to optionally reduce filesystem use by miniying, gzipping and preparing index.htm for embedding in code. 4 | # Please see readme.md for more information. 5 | 6 | # Requires xdd which is part of the VIM package 7 | # Requires npm 8 | # sudo apt install npm 9 | # ln -s /usr/bin/nodejs /usr/bin/node 10 | # Requires html-minifier 11 | # sudo npm install html-minifier -g 12 | 13 | html-minifier \ 14 | --case-sensitive \ 15 | --collapse-boolean-attributes \ 16 | --collapse-whitespace \ 17 | --minify-css true \ 18 | --minify-js true \ 19 | --process-conditional-comments \ 20 | --remove-attribute-quotes \ 21 | --remove-comments \ 22 | --remove-empty-attributes \ 23 | --remove-optional-tags \ 24 | --remove-redundant-attributes \ 25 | --remove-script-type-attributes \ 26 | --remove-style-link-type-attributes \ 27 | -o index.htm \ 28 | ../data/edit/index.htm 29 | 30 | if [ $? -ne 0 ] 31 | then 32 | echo "Error minifying index.htm" 33 | exit -1 34 | fi 35 | 36 | if [ -e index.htm.gz ] 37 | then 38 | rm index.htm.gz 39 | fi 40 | 41 | gzip index.htm 42 | if [ $? -ne 0 ] 43 | then 44 | echo "Error gzipping minified index.htm" 45 | exit -1 46 | fi 47 | 48 | echo '// WARNING: Auto-generated file. Please do not modify by hand.' > index_htm.h 49 | echo '// This file is an embeddable version of the gzipped index.htm file.' >> index_htm.h 50 | echo '// To update it, please rerun the `reduce_index.sh` script located in the `extras` subfolder' >> index_htm.h 51 | echo '// then recompile the sketch after each change to the `index.html` file.' >> index_htm.h 52 | xxd -i index.htm.gz >> index_htm.h 53 | if [ $? -ne 0 ] 54 | then 55 | echo "Error creating include file from index.htm.gz" 56 | exit -1 57 | fi 58 | 59 | echo Reduce complete. 60 | 61 | -------------------------------------------------------------------------------- /examples/FSBrowser32/data/edit.htm.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser32/data/edit.htm.gz -------------------------------------------------------------------------------- /examples/FSBrowser32/data/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser32/data/favicon.ico -------------------------------------------------------------------------------- /examples/FSBrowser32/data/graphs.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/examples/FSBrowser32/data/graphs.js.gz -------------------------------------------------------------------------------- /examples/FSBrowser32/data/index.htm: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | ESP Monitor 23 | 24 | 85 | 86 | 87 |
88 | 89 | 90 | 91 | 92 |
93 |
94 |
95 |
96 | 97 | -------------------------------------------------------------------------------- /examples/HandleClient/HandleClient.ino: -------------------------------------------------------------------------------- 1 | /* 2 | HandleCline.ino, Example for the AutoConnect library. 3 | Copyright (c) 2018, Hieromon Ikasamo 4 | https://github.com/Hieromon/AutoConnect 5 | 6 | This software is released under the MIT License. 7 | https://opensource.org/licenses/MIT 8 | */ 9 | 10 | #if defined(ARDUINO_ARCH_ESP8266) 11 | #include 12 | #include 13 | using WebServer = ESP8266WebServer; 14 | #elif defined(ARDUINO_ARCH_ESP32) 15 | #include 16 | #include 17 | #endif 18 | #include 19 | 20 | #ifndef BUILTIN_LED 21 | #define BUILTIN_LED 2 // backward compatibility 22 | #endif 23 | 24 | WebServer server; 25 | AutoConnect portal(server); 26 | 27 | void handleRoot() { 28 | String page = PSTR( 29 | "" 30 | "" 31 | "" 32 | "" 56 | "" 57 | "" 58 | "
" AUTOCONNECT_LINK(BAR_24) "
" 59 | "BUILT-IN LED
" 60 | "GPIO("); 61 | page += String(BUILTIN_LED); 62 | page += String(F(") : HIGH") : String("SlateBlue\">LOW"); 64 | page += String(F("")); 65 | page += String(F("

lowhigh

")); 66 | page += String(F("")); 67 | server.send(200, "text/html", page); 68 | } 69 | 70 | void sendRedirect(String uri) { 71 | server.sendHeader("Location", uri, true); 72 | server.send(302, "text/plain", ""); 73 | server.client().stop(); 74 | } 75 | 76 | void handleGPIO() { 77 | if (server.arg("v") == "low") 78 | digitalWrite(BUILTIN_LED, LOW); 79 | else if (server.arg("v") == "high") 80 | digitalWrite(BUILTIN_LED, HIGH); 81 | sendRedirect("/"); 82 | } 83 | 84 | bool atDetect(IPAddress& softapIP) { 85 | Serial.println("Captive portal started, SoftAP IP:" + softapIP.toString()); 86 | return true; 87 | } 88 | 89 | void setup() { 90 | delay(1000); 91 | Serial.begin(115200); 92 | Serial.println(); 93 | pinMode(BUILTIN_LED, OUTPUT); 94 | 95 | // Put the home location of the web site. 96 | // But in usually, setting the home uri is not needed cause default location is "/". 97 | //portal.home("/"); 98 | 99 | server.on("/", handleRoot); 100 | server.on("/io", handleGPIO); 101 | 102 | // Starts user web site included the AutoConnect portal. 103 | portal.onDetect(atDetect); 104 | if (portal.begin()) { 105 | Serial.println("Started, IP:" + WiFi.localIP().toString()); 106 | } 107 | else { 108 | Serial.println("Connection failed."); 109 | while (true) { yield(); } 110 | } 111 | } 112 | 113 | void loop() { 114 | server.handleClient(); 115 | portal.handleRequest(); // Need to handle AutoConnect menu. 116 | if (WiFi.status() == WL_IDLE_STATUS) { 117 | #if defined(ARDUINO_ARCH_ESP8266) 118 | ESP.reset(); 119 | #elif defined(ARDUINO_ARCH_ESP32) 120 | ESP.restart(); 121 | #endif 122 | delay(1000); 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /examples/HandlePortal/HandlePortal.ino: -------------------------------------------------------------------------------- 1 | /* 2 | HandlePortal.ino, Example for the AutoConnect library. 3 | Copyright (c) 2018, Hieromon Ikasamo 4 | https://github.com/Hieromon/AutoConnect 5 | 6 | This software is released under the MIT License. 7 | https://opensource.org/licenses/MIT 8 | */ 9 | /* 10 | This is a way of not explicitly declaring ESP8266WebServer. It uses 11 | the ESP8266WebServer function without its declaration. 12 | I recommend that you consider this example compared to HandlePortalEX.ino. 13 | https://github.com/Hieromon/AutoConnect/blob/master/examples/HandlePortalEX/HandlePortalEX.ino 14 | It will help you understand AutoConnect usage. 15 | */ 16 | 17 | #if defined(ARDUINO_ARCH_ESP8266) 18 | #include 19 | #include 20 | using WebServer = ESP8266WebServer; 21 | #elif defined(ARDUINO_ARCH_ESP32) 22 | #include 23 | #include 24 | #endif 25 | #include 26 | 27 | #ifndef BUILTIN_LED 28 | #define BUILTIN_LED 2 // backward compatibility 29 | #endif 30 | 31 | AutoConnect portal; 32 | 33 | void handleRoot() { 34 | String page = PSTR( 35 | "" 36 | "" 37 | "" 38 | "" 62 | "" 63 | "" 64 | "
" AUTOCONNECT_LINK(BAR_32) "
" 65 | "BUILT-IN LED
" 66 | "GPIO("); 67 | page += String(BUILTIN_LED); 68 | page += String(F(") : HIGH") : String("SlateBlue\">LOW"); 70 | page += String(F("")); 71 | page += String(F("

lowhigh

")); 72 | page += String(F("")); 73 | portal.host().send(200, "text/html", page); 74 | } 75 | 76 | void sendRedirect(String uri) { 77 | WebServer& server = portal.host(); 78 | server.sendHeader("Location", uri, true); 79 | server.send(302, "text/plain", ""); 80 | server.client().stop(); 81 | } 82 | 83 | void handleGPIO() { 84 | WebServer& server = portal.host(); 85 | if (server.arg("v") == "low") 86 | digitalWrite(BUILTIN_LED, LOW); 87 | else if (server.arg("v") == "high") 88 | digitalWrite(BUILTIN_LED, HIGH); 89 | sendRedirect("/"); 90 | } 91 | 92 | bool atDetect(IPAddress& softapIP) { 93 | Serial.println("Captive portal started, SoftAP IP:" + softapIP.toString()); 94 | return true; 95 | } 96 | 97 | void setup() { 98 | delay(1000); 99 | Serial.begin(115200); 100 | Serial.println(); 101 | pinMode(BUILTIN_LED, OUTPUT); 102 | 103 | // Put the home location of the web site. 104 | // But in usually, setting the home uri is not needed cause default location is "/". 105 | //portal.home("/"); 106 | 107 | // Starts user web site included the AutoConnect portal. 108 | portal.onDetect(atDetect); 109 | if (portal.begin()) { 110 | WebServer& server = portal.host(); 111 | server.on("/", handleRoot); 112 | server.on("/io", handleGPIO); 113 | Serial.println("Started, IP:" + WiFi.localIP().toString()); 114 | } 115 | else { 116 | Serial.println("Connection failed."); 117 | while (true) { yield(); } 118 | } 119 | } 120 | 121 | void loop() { 122 | portal.handleClient(); 123 | if (WiFi.status() == WL_IDLE_STATUS) { 124 | #if defined(ARDUINO_ARCH_ESP8266) 125 | ESP.reset(); 126 | #elif defined(ARDUINO_ARCH_ESP32) 127 | ESP.restart(); 128 | #endif 129 | delay(1000); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /examples/HelloWorld/Data/green.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Caption", 3 | "type": "ACText", 4 | "style": "text-align:center;font-size:24px;font-family:'Helvetica Neue',Arial,'Hiragino Kaku Gothic ProN','Hiragino Sans',Meiryo,sans-serif;color:DarkGreen;background-color:lightgrey" 5 | } 6 | -------------------------------------------------------------------------------- /examples/HelloWorld/Data/tomato.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Caption", 3 | "type": "ACText", 4 | "style": "text-align:center;font-size:24px;font-family:'Helvetica Neue',Arial,'Hiragino Kaku Gothic ProN','Hiragino Sans',Meiryo,sans-serif;color:tomato;" 5 | } 6 | -------------------------------------------------------------------------------- /examples/OTAUpdate/OTAUpdate.ino: -------------------------------------------------------------------------------- 1 | /* 2 | OTAUpdate.ino, Example for the AutoConnect library. 3 | Copyright (c) 2020, Hieromon Ikasamo 4 | https://github.com/Hieromon/AutoConnect 5 | This example is an implementation of a lightweight update feature 6 | that updates the ESP8266's firmware from your web browser. 7 | You need a compiled sketch binary file to the actual update and can 8 | retrieve it using Arduino-IDE menu: [Sketch] -> [Export compiled binary]. 9 | Then you will find the .bin file in your sketch folder. Select the.bin 10 | file on the update UI page to update the firmware. 11 | 12 | Notes: 13 | If you receive a following error, you need reset the module before sketch running. 14 | Update error: ERROR[11]: Invalid bootstrapping state, reset ESP8266 before updating. 15 | Refer to https://hieromon.github.io/AutoConnect/faq.html#hang-up-after-reset for details. 16 | 17 | This software is released under the MIT License. 18 | https://opensource.org/licenses/MIT 19 | */ 20 | 21 | #if defined(ARDUINO_ARCH_ESP8266) 22 | #include 23 | #include 24 | typedef ESP8266WebServer WiFiWebServer; 25 | #elif defined(ARDUINO_ARCH_ESP32) 26 | #include 27 | #include 28 | typedef WebServer WiFiWebServer; 29 | #endif 30 | #include 31 | 32 | WiFiWebServer server; 33 | AutoConnect portal(server); 34 | AutoConnectConfig config; 35 | 36 | void exitOTAStart() { 37 | Serial.println("OTA started"); 38 | } 39 | 40 | void exitOTAProgress(unsigned int amount, unsigned int sz) { 41 | Serial.printf("OTA in progress: received %d bytes, total %d bytes\n", sz, amount); 42 | } 43 | 44 | void exitOTAEnd() { 45 | Serial.println("OTA ended"); 46 | } 47 | 48 | void exitOTAError(uint8_t err) { 49 | Serial.printf("OTA error occurred %d\n", err); 50 | } 51 | 52 | void setup() { 53 | delay(1000); 54 | Serial.begin(115200); 55 | Serial.println(); 56 | 57 | // Responder of root page and apply page handled directly from WebServer class. 58 | server.on("/", []() { 59 | String content = R"( 60 | 61 | 62 | 63 | 64 | 65 | 66 | Place the root page with the sketch application.  67 | __AC_LINK__ 68 | 69 | 70 | )"; 71 | content.replace("__AC_LINK__", String(AUTOCONNECT_LINK(COG_16))); 72 | server.send(200, "text/html", content); 73 | }); 74 | 75 | config.ota = AC_OTA_BUILTIN; 76 | portal.config(config); 77 | portal.onOTAStart(exitOTAStart); 78 | portal.onOTAEnd(exitOTAEnd); 79 | portal.onOTAProgress(exitOTAProgress); 80 | portal.onOTAError(exitOTAError); 81 | portal.begin(); 82 | } 83 | 84 | void loop() { 85 | portal.handleClient(); 86 | } 87 | -------------------------------------------------------------------------------- /examples/WebSocketServer/MeasureRSSI.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #if defined(ARDUINO_ARCH_ESP8266) 3 | #include 4 | #elif defined(ARDUINO_ARCH_ESP32) 5 | #include 6 | #endif 7 | #include "MeasureRSSI.h" 8 | 9 | MeasureRSSI::MeasureRSSI(const unsigned long period, const unsigned int cycle, const uint8_t points) : 10 | period(period), 11 | points(points), 12 | _cycle(cycle) 13 | { 14 | _n = 0; 15 | _tm = millis(); 16 | _tmCycle = _tm; 17 | } 18 | 19 | MeasureRSSI::~MeasureRSSI() { 20 | if (_rssi) 21 | delete[] _rssi; 22 | } 23 | 24 | /** 25 | * If the real-time measurement is required, the MeasreRSSI::measure function 26 | * should always be called within the loop function. A sketch does not have to 27 | * intentionally create a measurement period. In particular, don't use delay. 28 | * It just adds unnecessary delays. 29 | * @return true The measurement is completed. MeasureRSSI::rssi has the 30 | * average value of RSSI measured for the specified number of times. 31 | * @return false Measurement in progress. 32 | */ 33 | bool MeasureRSSI::measure(void) { 34 | unsigned long ct = millis(); 35 | 36 | if (ct - _tm < period) 37 | return false; 38 | 39 | if (ct - _tmCycle < _cycle) 40 | return false; 41 | 42 | _tmCycle = ct; 43 | 44 | if (!_rssi) 45 | _rssi = new int8_t[points]; 46 | 47 | _rssi[_n++] = WiFi.RSSI(); 48 | 49 | if (_n >= points) { 50 | rssi = 0; 51 | do { 52 | rssi += _rssi[--_n]; 53 | } while (_n); 54 | rssi = rssi / points; 55 | delete[] _rssi; 56 | _rssi = nullptr; 57 | _tm = _tmCycle; 58 | return true; 59 | } 60 | 61 | return false; 62 | } 63 | -------------------------------------------------------------------------------- /examples/WebSocketServer/MeasureRSSI.h: -------------------------------------------------------------------------------- 1 | #ifndef __MEASURERSSI_H_ 2 | #define __MEASURERSSI_H_ 3 | 4 | // RSSI measurement class 5 | class MeasureRSSI { 6 | public: 7 | explicit MeasureRSSI(const unsigned long period = 30000, const unsigned int cycle = 20, const uint8_t points = 7); 8 | ~MeasureRSSI(); 9 | 10 | bool measure(void); 11 | 12 | unsigned long period; 13 | uint8_t points; 14 | int rssi = 0; 15 | 16 | private: 17 | unsigned int _cycle; 18 | unsigned long _tm; 19 | unsigned long _tmCycle; 20 | uint8_t _n; 21 | int8_t* _rssi = nullptr; 22 | }; 23 | 24 | #endif // !__MEASURERSSI_H_ 25 | -------------------------------------------------------------------------------- /examples/WebUpdate/HTTPUpdateServer.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Ported the ESP8266HTTPUpdateServer published by Arduino-core to 3 | * provide the web browser based OTA update on the ESP32 platform. 4 | * @file HTTPUpdateServer.h 5 | * @author hieromon@gmail.com 6 | * @version 0.9.10 7 | * @date 2019-06-06 8 | * @copyright MIT license. 9 | */ 10 | 11 | #ifndef __HTTP_UPDATE_SERVER_H 12 | #define __HTTP_UPDATE_SERVER_H 13 | 14 | #ifdef ARDUINO_ARCH_ESP32 15 | // This class will available only EPS32 actually. 16 | 17 | class WebServer; 18 | 19 | class HTTPUpdateServer { 20 | public: 21 | explicit HTTPUpdateServer(bool serial_debug = false) : _serial_output(serial_debug), _server(nullptr), _username(_emptyString), _password(_emptyString), _authenticated(false) {} 22 | ~HTTPUpdateServer() {} 23 | void setup(WebServer* server) { setup(server, _emptyString, _emptyString); } 24 | void setup(WebServer* server, const String& path) { setup(server, path, _emptyString, _emptyString); } 25 | void setup(WebServer* server, const String& username, const String& password) { setup(server, "/update", username, password); } 26 | void setup(WebServer* server, const String& path, const String& username, const String& password); 27 | void updateCredentials(const String& username, const String& password) { _username = username; _password = password; } 28 | 29 | protected: 30 | void _setUpdaterError(); 31 | 32 | private: 33 | bool _serial_output; 34 | WebServer* _server; 35 | String _username; 36 | String _password; 37 | bool _authenticated; 38 | String _updaterError; 39 | static const String _emptyString; 40 | }; 41 | 42 | #endif // !ARDUINO_ARCH_ESP32 43 | #endif // !__HTTP_UPDATE_SERVER_H 44 | -------------------------------------------------------------------------------- /examples/mqttRSSI/data/param.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "mqttserver", 4 | "type": "ACInput", 5 | "value": "mqtt3.thingspeak.com" 6 | }, 7 | { 8 | "name": "apikey", 9 | "type": "ACInput", 10 | "value": "NRTFYGJ6TJFGX4RC" 11 | }, 12 | { 13 | "name": "channelid", 14 | "type": "ACInput", 15 | "value": "454951" 16 | }, 17 | { 18 | "name": "writekey", 19 | "type": "ACInput", 20 | "value": "HBVQ2XV6VYBI4582" 21 | }, 22 | { 23 | "name": "clientid", 24 | "type": "ACInput", 25 | "value": "DS8KNQQqJQscMAE3Fwc1PAc" 26 | }, 27 | { 28 | "name": "username", 29 | "type": "ACInput", 30 | "value": "DS8KNQQqJQscMAE3Fwc1PAc" 31 | }, 32 | { 33 | "name": "password", 34 | "type": "ACInput", 35 | "value": "AgCbClLitxmgK39ApBfUuVxY" 36 | }, 37 | { 38 | "name": "period", 39 | "type": "ACRadio", 40 | "checked": 1 41 | } 42 | ] 43 | -------------------------------------------------------------------------------- /examples/mqttRSSI_FS/README.md: -------------------------------------------------------------------------------- 1 | # mqttRSSI_FS.ino 2 | 3 | Sketch experience with JSON for custom web pages and MQTT broker settings placed in the ESP file system. 4 | 5 | This sketch presents an implementation example to place the custom web page JSON and MQTT broker settings into the file system of the ESP module. It is based on [mqttRSSI.ino](../../mqttRSSI), which demonstrates publishing the WiFi signal strength of the ESP module via MQTT. 6 | 7 | To get the experience of this sketch correctly, you need to upload the files contained in the data folder to the file system of the ESP module in advance. 8 | 9 | ### Upload the custom web page JSON descriptions and pre-defined parameters 10 | 11 | At the first, it is important to erase your ESP module before starting the project. Erasing the ESP module ensures that the files required by the sketch are mounted on the file system. 12 | 13 | Then open Arduino IDE and load mqttRSSI_FS sketch from the menu using **File > Examples > AutoConnect > mqttRSSI_FS**. 14 | The data folder under the mqttRSSI_FS holds the following three files: 15 | 16 | - `mqtt_setting.json`: JSON description of custom web page that should be assigned to the uri: `/mqtt_setting`. 17 | - `mqtt_start.json`: JSON description of custom web page that should be assigned to uri:`/mqtt_start`. 18 | - `mqtt_stop.json`: JSON description of custom web page that should be assigned to uri:`/mqtt_stop`. 19 | - `mqtt_clear.json`: JSON description of custom web page that should be assigned to uri:`/mqtt_clear`. 20 | - `param.json`: The default values for the public channel settings on Thingspeak.com. This file keeps the values you will set. 21 | 22 | To upload these files, choose Data Upload from Arduino IDE menu via **Tools > ESP8266 LittleFS Data Upload** or **one of the Upload** that fits your module. 23 | 24 | ### Build the sketch and start project 25 | 26 | Run the build in the Arduino IDE. Arduino IDE will compile the sketch successfully and uploads it to the ESP module. You can open the serial monitor in advance to monitor the execution status of the sketch. Set the baud rate of the serial monitor to 115200 bps. 27 | 28 | The first time you execute mqttRSSI_FS, the captive portal will launch due to cannot connect to the Internet, and you will see the WiFi Access Point as `ESP-XXXXXX` or `esp8266ap`, `esp32ap` via your cellphone. Connect to it and use [Configure new AP](https://hieromon.github.io/AutoConnect/menu.html#configure-new-ap) from the [AutoConnect menu](https://hieromon.github.io/AutoConnect/menu.html) will allow the ESP module to connect to WiFi Access Point to reach the Internet. 29 | Also, while the ESP module is in the captive portal state, you can open the MQTT Setting menu and set the access parameters to a public channel you have created on Thingspeak.com. 30 | 31 | The web pages you will see at this time are custom web pages created by AutoConnect based on `mqtt_setting.json` and `mqtt_save.json`. 32 | 33 | ### Monitoring the WiFi signal strength as RSSI 34 | 35 | Once the ESP module is restarted using [Reset](https://hieromon.github.io/AutoConnect/menu.html#reset) from the AutoConnect menu after a successful connection to the Internet, publishing RSSI values will begin. You can see the RSSI fluctuations from the client browser. 36 | 37 | ![rssi_chart](../../mkdocs/images/rssi_chart.png) -------------------------------------------------------------------------------- /examples/mqttRSSI_FS/data/mqtt_clear.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "MQTT Setting", 3 | "uri": "/mqtt_clear", 4 | "menu": false, 5 | "response": false 6 | } -------------------------------------------------------------------------------- /examples/mqttRSSI_FS/data/mqtt_setting.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "MQTT Setting", 3 | "uri": "/mqtt_setting", 4 | "menu": true, 5 | "element": [ 6 | { 7 | "name": "style", 8 | "type": "ACStyle", 9 | "value": "label+input,label+select{position:sticky;left:140px;width:204px!important;box-sizing:border-box;}" 10 | }, 11 | { 12 | "name": "header", 13 | "type": "ACElement", 14 | "value": "

MQTT Broker settings

" 15 | }, 16 | { 17 | "name": "caption", 18 | "type": "ACText", 19 | "value": "Publish WiFi signal strength via MQTT, publishing the RSSI value of the ESP module to the ThingSpeak public channel.", 20 | "style": "font-family:serif;color:#053d76", 21 | "posterior": "par" 22 | }, 23 | { 24 | "name": "mqttserver", 25 | "type": "ACInput", 26 | "label": "Server", 27 | "pattern": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$", 28 | "placeholder": "MQTT broker server", 29 | "global": true 30 | }, 31 | { 32 | "name": "apikey", 33 | "type": "ACInput", 34 | "label": "User API Key", 35 | "global": true 36 | }, 37 | { 38 | "name": "channelid", 39 | "type": "ACInput", 40 | "label": "Channel ID", 41 | "pattern": "^[0-9]{6}$", 42 | "global": true 43 | }, 44 | { 45 | "name": "writekey", 46 | "type": "ACInput", 47 | "label": "Write API Key", 48 | "global": true 49 | }, 50 | { 51 | "name": "nl1", 52 | "type": "ACElement", 53 | "value": "
" 54 | }, 55 | { 56 | "name": "credential", 57 | "type": "ACText", 58 | "value": "MQTT Device Credentials", 59 | "style": "font-weight:bold;color:#1e81b0", 60 | "posterior": "div" 61 | }, 62 | { 63 | "name": "clientid", 64 | "type": "ACInput", 65 | "label": "Client ID", 66 | "global": true 67 | }, 68 | { 69 | "name": "username", 70 | "type": "ACInput", 71 | "label": "Username", 72 | "global": true 73 | }, 74 | { 75 | "name": "password", 76 | "type": "ACInput", 77 | "label": "Password", 78 | "apply": "password", 79 | "global": true 80 | }, 81 | { 82 | "name": "nl2", 83 | "type": "ACElement", 84 | "value": "
" 85 | }, 86 | { 87 | "name": "period", 88 | "type": "ACRadio", 89 | "value": [ 90 | "30 sec.", 91 | "60 sec.", 92 | "180 sec." 93 | ], 94 | "label": "Update period", 95 | "arrange": "vertical", 96 | "global": true 97 | }, 98 | { 99 | "name": "hostname", 100 | "type": "ACInput", 101 | "value": "", 102 | "label": "ESP host name", 103 | "pattern": "^([a-zA-Z0-9]([a-zA-Z0-9-])*[a-zA-Z0-9]){1,24}$", 104 | "global": true 105 | }, 106 | { 107 | "name": "save", 108 | "type": "ACSubmit", 109 | "value": "Save&Start", 110 | "uri": "/mqtt_start" 111 | }, 112 | { 113 | "name": "discard", 114 | "type": "ACSubmit", 115 | "value": "Discard", 116 | "uri": "/" 117 | }, 118 | { 119 | "name": "stop", 120 | "type": "ACSubmit", 121 | "value": "Stop publishing", 122 | "uri": "/mqtt_stop" 123 | } 124 | ] 125 | } 126 | -------------------------------------------------------------------------------- /examples/mqttRSSI_FS/data/mqtt_start.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "MQTT Setting", 3 | "uri": "/mqtt_start", 4 | "menu": false, 5 | "element": [ 6 | { 7 | "name": "c1", 8 | "type": "ACText", 9 | "value": "

MQTT publishing has started.

", 10 | "style": "text-align:center;color:#2f4f4f;padding:5px;" 11 | }, 12 | { 13 | "name": "c2", 14 | "type": "ACText", 15 | "value": "

Parameters saved as:

", 16 | "style": "text-align:center;color:#2f4f4f;padding:5px;" 17 | }, 18 | { 19 | "name": "mqttserver", 20 | "type": "ACText", 21 | "format": "Server: %s", 22 | "posterior": "br", 23 | "global": true 24 | }, 25 | { 26 | "name": "apikey", 27 | "type": "ACText", 28 | "format": "User API Key: %s", 29 | "posterior": "br", 30 | "global": true 31 | }, 32 | { 33 | "name": "channelid", 34 | "type": "ACText", 35 | "format": "Channel ID: %s", 36 | "posterior": "br", 37 | "global": true 38 | }, 39 | { 40 | "name": "writekey", 41 | "type": "ACText", 42 | "format": "Write API Key: %s", 43 | "posterior": "br", 44 | "global": true 45 | }, 46 | { 47 | "name": "clientid", 48 | "type": "ACText", 49 | "format": "Client ID: %s", 50 | "posterior": "br", 51 | "global": true 52 | }, 53 | { 54 | "name": "username", 55 | "type": "ACText", 56 | "format": "Username: %s", 57 | "posterior": "br", 58 | "global": true 59 | }, 60 | { 61 | "name": "password", 62 | "type": "ACText", 63 | "format": "Password: %s", 64 | "posterior": "br", 65 | "global": true 66 | }, 67 | { 68 | "name": "hostname", 69 | "type": "ACText", 70 | "format": "ESP host: %s", 71 | "posterior": "br", 72 | "global": true 73 | }, 74 | { 75 | "name": "period", 76 | "type": "ACText", 77 | "format": "Update period: %s", 78 | "posterior": "br", 79 | "global": true 80 | }, 81 | { 82 | "name": "clear", 83 | "type": "ACSubmit", 84 | "value": "Clear channel", 85 | "uri": "/mqtt_clear" 86 | } 87 | ] 88 | } -------------------------------------------------------------------------------- /examples/mqttRSSI_FS/data/mqtt_stop.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "MQTT Setting", 3 | "uri": "/mqtt_stop", 4 | "menu": false, 5 | "response": false 6 | } 7 | -------------------------------------------------------------------------------- /examples/mqttRSSI_FS/data/param.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "mqttserver", 4 | "type": "ACInput", 5 | "value": "mqtt3.thingspeak.com" 6 | }, 7 | { 8 | "name": "apikey", 9 | "type": "ACInput", 10 | "value": "NRTFYGJ6TJFGX4RC" 11 | }, 12 | { 13 | "name": "channelid", 14 | "type": "ACInput", 15 | "value": "454951" 16 | }, 17 | { 18 | "name": "writekey", 19 | "type": "ACInput", 20 | "value": "HBVQ2XV6VYBI4582" 21 | }, 22 | { 23 | "name": "clientid", 24 | "type": "ACInput", 25 | "value": "DS8KNQQqJQscMAE3Fwc1PAc" 26 | }, 27 | { 28 | "name": "username", 29 | "type": "ACInput", 30 | "value": "DS8KNQQqJQscMAE3Fwc1PAc" 31 | }, 32 | { 33 | "name": "password", 34 | "type": "ACInput", 35 | "value": "AgCbClLitxmgK39ApBfUuVxY" 36 | }, 37 | { 38 | "name": "period", 39 | "type": "ACRadio", 40 | "checked": 1 41 | } 42 | ] 43 | -------------------------------------------------------------------------------- /examples/mqttRSSI_NA/param.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Persist the Thingspeak channel configuration that should be configured in 3 | the mqttRSSI_NA.ino sketch. These functions adapt the MQTT broker 4 | configuration settings persistence to either ESP8266 or ESP32 platforms. 5 | These functions save the settings in the EEPROM for ESP8266 and in the 6 | Preferences area for ESP32. 7 | 8 | Copyright (c) 2022 Hieromon Ikasamo. 9 | This software is released under the MIT License. 10 | https://opensource.org/licenses/MIT 11 | */ 12 | #include 13 | #include "param.h" 14 | 15 | #if defined(ARDUINO_ARCH_ESP8266) 16 | #include 17 | #include 18 | 19 | extern AutoConnect portal; 20 | const char* _mqtt_param_id = MQTT_PARAM_ID; 21 | const uint16_t CREDENTIAL_OFFSET = sizeof(mqtt_param_t); 22 | 23 | void getParams(mqtt_param_t& param) { 24 | // It is important to use getEEPROMUsedSize when the user sketch 25 | // allocates its own EEPROM area on the ESP8266. It avoids that area 26 | // colliding with the area where AutoConnect stores credentials. 27 | // Note that the return value of AutoConnect::getEEPROMUsedSize takes 28 | // effect after giving the boundaryOffset via AutoConnectConfig. 29 | EEPROM.begin(portal.getEEPROMUsedSize()); 30 | EEPROM.get(0, param); 31 | EEPROM.end(); 32 | 33 | // If the area read from the EEPROM does not contain MQTT_PARAM_ID, 34 | // that area is before it is initialized with the sketch-owned area. 35 | if (strcmp(param.id, _mqtt_param_id) != 0) 36 | memset(¶m, 0x00, sizeof(mqtt_param_t)); 37 | } 38 | 39 | void putParams(const mqtt_param_t& param) { 40 | strcpy(const_cast(param.id), _mqtt_param_id); 41 | EEPROM.begin(portal.getEEPROMUsedSize()); 42 | EEPROM.put(0, param); 43 | EEPROM.end(); 44 | } 45 | 46 | #elif defined(ARDUINO_ARCH_ESP32) 47 | #include 48 | // The Preferences allows your sketch-owned area to separate from the 49 | // AutoConnect credentials storage area by namespace and key. 50 | // If the sketch begins the Preferences before the namespace and key 51 | // exist, you will get an unallocated error in the core, but you don't 52 | // have to worry about that. The area is automatically allocated by 53 | // Preferences::putBytes. 54 | const char* PREFS_NAMESPACE = MQTT_PARAM_ID; 55 | const char* PREFS_KEY = MQTT_PARAM_ID; 56 | const uint16_t CREDENTIAL_OFFSET = 0; 57 | Preferences prefs; 58 | 59 | void getParams(mqtt_param_t ¶m) { 60 | memset(¶m, 0x00, sizeof(mqtt_param_t)); 61 | if (prefs.begin(PREFS_NAMESPACE, true)) { 62 | prefs.getBytes(PREFS_KEY, ¶m, sizeof(mqtt_param_t)); 63 | prefs.end(); 64 | } 65 | } 66 | 67 | void putParams(const mqtt_param_t& param) { 68 | prefs.begin(PREFS_NAMESPACE); 69 | prefs.putBytes(PREFS_KEY, ¶m, sizeof(mqtt_param_t)); 70 | prefs.end(); 71 | } 72 | 73 | #endif 74 | -------------------------------------------------------------------------------- /examples/mqttRSSI_NA/param.h: -------------------------------------------------------------------------------- 1 | #ifndef _PARAM_H_ 2 | #define _PARAM_H_ 3 | 4 | // Identifier for persisting the parameter settings for mqttRSSI. 5 | // For the ESP8266, it is the EEPROM area identifier, and for the ESP32, it is 6 | // the Preference's key. 7 | #define MQTT_PARAM_ID "mqttRSSI" 8 | 9 | // MQTT broker connection paramaters 10 | typedef struct { 11 | char id[sizeof(MQTT_PARAM_ID)]; 12 | char mqttServer[33]; 13 | char apikey[17]; 14 | char channelId[9]; 15 | char writekey[17]; 16 | char clientId[25]; 17 | char username[25]; 18 | char password[25]; 19 | char hostname[25]; 20 | unsigned long publishInterval; 21 | } mqtt_param_t; 22 | 23 | void getParams(mqtt_param_t& param); 24 | void putParams(const mqtt_param_t& param); 25 | 26 | extern const uint16_t CREDENTIAL_OFFSET; 27 | 28 | #endif // !_PARAM_H_ 29 | -------------------------------------------------------------------------------- /keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Datatypes (KEYWORD1) 3 | ####################################### 4 | AutoConnect KEYWORD1 5 | AutoConnectConfig KEYWORD1 6 | AutoConnectCredential KEYWORD1 7 | AutoConnectAux KEYWORD1 8 | AutoConnectButton KEYWORD1 9 | AutoConnectCheckbox KEYWORD1 10 | AutoConnectElement KEYWORD1 11 | AutoConnectFile KEYWORD1 12 | AutoConnectInput KEYWORD1 13 | AutoConnectOTA KEYWORD1 14 | AutoConnectRadio KEYWORD1 15 | AutoConnectRange KEYWORD1 16 | AutoConnectSelect KEYWORD1 17 | AutoConnectStyle KEYWORD1 18 | AutoConnectSubmit KEYWORD1 19 | AutoConnectText KEYWORD1 20 | AutoConnectUpdate KEYWORD1 21 | 22 | ####################################### 23 | # Methods and Functions (KEYWORD2) 24 | ####################################### 25 | add KEYWORD2 26 | append KEYWORD2 27 | as KEYWORD2 28 | at KEYWORD2 29 | attach KEYWORD2 30 | aux KEYWORD2 31 | config KEYWORD2 32 | content KEYWORD2 33 | begin KEYWORD2 34 | detach KEYWORD2 35 | disable KEYWORD2 36 | disableMenu KEYWORD2 37 | del KEYWORD2 38 | end KEYWORD2 39 | enable KEYWORD2 40 | enableMenu KEYWORD2 41 | entries KEYWORD2 42 | fetchElement KEYWORD2 43 | getElement KEYWORD2 44 | getElements KEYWORD2 45 | handleClient KEYWORD2 46 | handleRequest KEYWORD2 47 | home KEYWORD2 48 | host KEYWORD2 49 | isEnabled KEYWORD2 50 | isMenu KEYWORD2 51 | isValid KEYWORD2 52 | join KEYWORD2 53 | load KEYWORD2 54 | loadElement KEYWORD2 55 | menu KEYWORD2 56 | name KEYWORD2 57 | on KEYWORD2 58 | onDetect KEYWORD2 59 | onNotFound KEYWORD2 60 | onOTAEnd KEYWORD2 61 | onOTAError KEYWORD2 62 | onOTAProgress KEYWORD2 63 | onOTAStart KEYWORD2 64 | onUpload KEYWORD2 65 | reconnectInterval KEYWORD2 66 | redirect KEYWORD2 67 | referer KEYWORD2 68 | release KEYWORD2 69 | restoreCredential KEYWORD2 70 | save KEYWORD2 71 | saveCredential KEYWORD2 72 | saveElement KEYWORD2 73 | select KEYWORD2 74 | setElementValue KEYWORD2 75 | setTitle KEYWORD2 76 | toHTML KEYWORD2 77 | typeOf KEYWORD2 78 | value KEYWORD2 79 | where KEYWORD2 80 | whileCaptivePortal KEYWORD2 81 | 82 | ####################################### 83 | # Literals (KEYWORD3) 84 | ####################################### 85 | AC_Behind LITERAL1 86 | AC_EXIT_AHEAD LITERAL1 87 | AC_EXIT_LATER LITERAL1 88 | AC_EXIT_BOTH LITERAL1 89 | AC_MENUITEM_NONE LITERAL1 90 | AC_MENUITEM_CONFIGNEW LITERAL1 91 | AC_MENUITEM_OPENSSIDS LITERAL1 92 | AC_MENUITEM_DISCONNECT LITERAL1 93 | AC_MENUITEM_RESET LITERAL1 94 | AC_MENUITEM_HOME LITERAL1 95 | AC_MENUITEM_UPDATE LITERAL1 96 | AC_MENUITEM_DEVINFO LITERAL1 97 | AC_ONBOOTURI_ROOT LITERAL1 98 | AC_ONBOOTURI_HOME LITERAL1 99 | AC_OTA_BUILTIN LITERAL1 100 | AC_OTA_EXTRA LITERAL1 101 | AC_SAVECREDENTIAL_NEVER LITERAL1 102 | AC_SAVECREDENTIAL_AUTO LITERAL1 103 | AC_Behind LITERAL1 104 | AC_Button LITERAL1 105 | AC_Checkbox LITERAL1 106 | AC_Element LITERAL1 107 | AC_File LITERAL1 108 | AC_File_FS LITERAL1 109 | AC_File_SD LITERAL1 110 | AC_File_Extern LITERAL1 111 | AC_Horizontal LITERAL1 112 | AC_Infront LITERAL1 113 | AC_Input LITERAL1 114 | AC_Radio LITERAL1 115 | AC_Range LITERAL1 116 | AC_Select LITERAL1 117 | AC_Submit LITERAL1 118 | AC_Style LITERAL1 119 | AC_Tag_None LITERAL1 120 | AC_Tag_BR LITERAL1 121 | AC_Tag_P LITERAL1 122 | AC_Tag_DIV LITERAL1 123 | AC_Text LITERAL1 124 | AC_Vertical LITERAL1 125 | AC_Void LITERAL1 126 | 127 | ####################################### 128 | # PREPROCESSOR (KEYWORD3) 129 | ####################################### 130 | ACButton PREPROCESSOR 131 | ACCheckbox PREPROCESSOR 132 | ACElement PREPROCESSOR 133 | ACFile PREPROCESSOR 134 | ACInput PREPROCESSOR 135 | ACRadio PREPROCESSOR 136 | ACRange PREPROCESSOR 137 | ACSelect PREPROCESSOR 138 | ACSubmit PREPROCESSOR 139 | ACStyle PREPROCESSOR 140 | ACText PREPROCESSOR 141 | AUTOCONNECT_GLYPH_COG_16 PREPROCESSOR 142 | AUTOCONNECT_GLYPH_COG_24 PREPROCESSOR 143 | AUTOCONNECT_GLYPH_COG_32 PREPROCESSOR 144 | AUTOCONNECT_GLYPH_BAR_24 PREPROCESSOR 145 | AUTOCONNECT_GLYPH_BAR_32 PREPROCESSOR 146 | AUTOCONNECT_GLYPH_BAR_48 PREPROCESSOR 147 | -------------------------------------------------------------------------------- /library.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AutoConnect", 3 | "keywords": "communication, http, server, web, wifi, wi-fi", 4 | "description": "ESP8266/ESP32 WLAN configuration at runtime with web interface.", 5 | "homepage": "https://hieromon.github.io/AutoConnect", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/Hieromon/AutoConnect.git" 9 | }, 10 | "dependencies": [ 11 | { 12 | "name": "PageBuilder", 13 | "version": ">=1.5.6" 14 | }, 15 | { 16 | "name": "ArduinoJson", 17 | "version": ">=5.13.3" 18 | } 19 | ], 20 | "frameworks": "arduino", 21 | "platforms": [ 22 | "espressif8266", 23 | "espressif32" 24 | ], 25 | "version": "1.4.2", 26 | "license": "MIT", 27 | "headers": [ 28 | "AutoConnect.h", 29 | "AutoConnectCore.h" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=AutoConnect 2 | version=1.4.2 3 | author=Hieromon Ikasamo 4 | maintainer=Hieromon Ikasamo 5 | sentence=ESP8266/ESP32 WLAN configuration at runtime with web interface. 6 | paragraph=A library for easy implementing the Web interface constituting the WLAN for ESP8266 WiFi connection. With this library to make a sketch which connects from ESP8266 to the access point at runtime by the web interface without hardcoded SSID and password. 7 | category=Communication 8 | url=https://github.com/Hieromon/AutoConnect.git 9 | architectures=esp8266, esp32 10 | includes=AutoConnect.h 11 | depends=ArduinoJson, PageBuilder 12 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | # Project information 2 | site_name: 'AutoConnect for ESP8266/ESP32' 3 | site_description: 'ESP8266/ESP32 WLAN configuration at run time with web interface' 4 | site_author: 'Hieromon Ikasamo' 5 | site_url: 'https://Hieromon.github.io/AutoConnect/' 6 | 7 | # Docs 8 | docs_dir: 'mkdocs' 9 | 10 | # Pages 11 | nav: 12 | - 'Overview' : index.md 13 | - 'Getting started' : gettingstarted.md 14 | - 'AutoConnect menu' : menu.md 15 | - 'Basic usage' : basicusage.md 16 | - 'Advanced usage' : 17 | - 'Advanced usage' : advancedusage.md 18 | - 'AutoConnect WiFi connection control' : adconnection.md 19 | - 'Captive portal control' : adcpcontrol.md 20 | - 'Settings and controls for network and WiFi' : adnetwork.md 21 | - 'Authentication settings' : adauthentication.md 22 | - 'Credential accesses' : adcredential.md 23 | - 'Customizing page appearance' : adexterior.md 24 | - 'Other operation settings and controls' : adothers.md 25 | - 'Custom Web pages' : 26 | - 'Custom Web pages with AutoConnect' : acintro.md 27 | - 'AutoConnectElements' : acelements.md 28 | - 'Custom Web pages with JSON' : acjson.md 29 | - 'Handling the custom Web pages' : achandling.md 30 | - 'Interact between Sketch and AutoConnectElements' : acinteract.md 31 | - 'OTA Updates' : 32 | - 'OTA Updates' : otaupdate.md 33 | - 'OTA via Web Browser' : otabrowser.md 34 | - 'OTA using Update Server' : otaserver.md 35 | - 'Using Filesystem' : filesystem.md 36 | - 'Library APIs' : 37 | - 'AutoConnect API': api.md 38 | - 'AutoConnectAux API': apiaux.md 39 | - 'AutoConnectConfig API': apiconfig.md 40 | - 'AutoConnectElements API': apielements.md 41 | - 'AutoConnectUpdate API' : apiupdate.md 42 | - 'Something extra': apiextra.md 43 | - 'Examples' : 44 | - 'How to embed': howtoembed.md 45 | - 'Tips for data conversion': datatips.md 46 | - 'Attach the menus': menuize.md 47 | - 'Custom Web pages w/o JSON': wojson.md 48 | - 'Works with ESP32-CAM': esp32cam.md 49 | - 'Appendix': 50 | - 'Inside AutoConnect::begin': lsbegin.md 51 | - 'Saved credentials access': credit.md 52 | - 'File upload handler': acupload.md 53 | - 'Custom colorized': colorized.md 54 | - 'Change label text': changelabel.md 55 | - 'FAQ' : faq.md 56 | - 'Change log' : changelog.md 57 | - 'License' : license.md 58 | 59 | # Repository 60 | repo_name: Hieromon/AutoConnect 61 | repo_url: https://github.com/Hieromon/AutoConnect 62 | edit_uri: "" 63 | 64 | # Copyright 65 | copyright: Copyright © 2018-2023 Hieromon Ikasamo 66 | 67 | # Configuration 68 | use_directory_urls: false 69 | theme: 70 | name: material 71 | language: en 72 | logo: images/arduino-logo.svg 73 | icon: 74 | logo: logo 75 | palette: 76 | primary: indigo 77 | accent: indigo 78 | font: 79 | text: Roboto 80 | code: Roboto Mono 81 | features: 82 | - navigation.top 83 | 84 | # Customization 85 | extra_css: 86 | - css/paragraph.css 87 | - css/extra.css 88 | - https://use.fontawesome.com/releases/v5.14.0/css/all.css 89 | extra_javascript: 90 | - js/gifffer.min.js 91 | extra: 92 | social: 93 | - icon: fontawesome/brands/github 94 | link: https://github.com/Hieromon 95 | - icon: fontawesome/brands/twitter 96 | link: https://twitter.com/hieromon 97 | analytics: 98 | provider: google 99 | property: !!python/object/apply:os.getenv ["GOOGLE_ANALYTICS_KEY"] 100 | 101 | # Extensions 102 | markdown_extensions: 103 | - admonition 104 | - attr_list 105 | - def_list 106 | - fontawesome_markdown 107 | - footnotes 108 | - pymdownx.betterem: 109 | smart_enable: all 110 | - pymdownx.caret 111 | - pymdownx.critic 112 | - pymdownx.details 113 | - pymdownx.emoji: 114 | emoji_index: !!python/name:materialx.emoji.twemoji 115 | emoji_generator: !!python/name:materialx.emoji.to_svg 116 | - pymdownx.highlight: 117 | guess_lang: false 118 | linenums: none 119 | use_pygments: true 120 | noclasses: true 121 | pygments_style: monokai 122 | - pymdownx.inlinehilite 123 | - pymdownx.magiclink: 124 | repo_url_shorthand: true 125 | user: Hieromon 126 | repo: AutoConnect 127 | - pymdownx.mark 128 | - pymdownx.smartsymbols 129 | - pymdownx.superfences 130 | - pymdownx.tasklist 131 | - toc: 132 | permalink: true 133 | -------------------------------------------------------------------------------- /mkdocs/advancedusage.md: -------------------------------------------------------------------------------- 1 | ## Summary 2 | 3 | To make sketches work as you intended with AutoConnect, make sure you understand the implications of the setting parameters and configure AutoConnect. [AutoConnectConfig](apiconfig.md) allows you to incorporate settings into AutoConnect that coordinate control over WiFi connectivity and captive portal behavior. 4 | For advanced usages, the configuration settings and the Sketch examples are followings: 5 | 6 | - [AutoConnect WiFi connection control](adconnection.md) 7 | - [Captive portal control](adcpcontrol.md) 8 | - [Authentication settings](adauthentication.md) 9 | - [Credential accesses](adcredential.md) 10 | - [Settings for customizing the page exterior](adexterior.md) 11 | - [Settings and controls for network and WiFi](adnetwork.md) 12 | - [Other operation settings and controls](adothers.md) 13 | 14 | !!! note "Don't forget [**AutoConnect::config**](api.md#config)" 15 | The configuration cannot be reflected by only changing the member variables of [AutoConnectConfig](apiconfig.md) settings. It will be reflected in the actual ones by [AutoConnect::config](api.md#config) function. Don't forget to run the [AutoConnect::config](api.md#config) after changing the AutoConnectConfig member variables. 16 | 17 | ```cpp hl_lines="6" 18 | AutoConnect portal; 19 | AutoConnectConfig config; 20 | 21 | void setup() { 22 | config.autoReconnect = true; 23 | portal.config(config); // Don't forget. 24 | portal.begin(); 25 | } 26 | ``` 27 | -------------------------------------------------------------------------------- /mkdocs/apiextra.md: -------------------------------------------------------------------------------- 1 | ## Icons 2 | 3 | The library presents two PNG icons which can be used to embed a hyperlink to the AutoConnect menu. 4 | 5 | - Bar type AutoConnect menu 6 | - Cog type AutoConnect menu 7 | 8 | To reference the icon, use the **AUTOCONNECT_LINK** macro in the Sketch. It expands into the string literal as an HTML `````` tag with PNG embedded of the AutoConnect menu hyperlinks. Icon type is specified by the parameter of the macro. 9 | 10 |
11 |
BAR_24Bars icon, 24x24.
12 |
BAR_32Bars icon, 32x32.
13 |
BAR_48Bars icon, 48x48.
14 |
COG_16Cog icon, 16x16.
15 |
COG_24Cog icon, 24x24.
16 |
COG_32Cog icon, 32x32.
17 |
18 | 19 | !!! note "Usage" 20 | ```cpp 21 | String html = ""; 22 | html += AUTOCONNECT_LINK(BAR_32); 23 | html += ""; 24 | server.send(200, "text/html", html); 25 | ``` 26 | ## Captive Portal Availability Identification 27 | 28 | A check mark icon can be displayed adjacent to the [AutoConnect menu](menu.md) title to indicate that a captive portal is available. This check mark indicates that the ESP module is not connected to any access point, SoftAP is enabled, and DNS lookup spoofing is working through the AutoConnect-initiated DNS server. 29 | 30 | 31 | 32 | 33 | This setting is enabled by turning on the **AC_SHOW_PORTALIDENTIFIER** macro defined in [AutoConnectDefs.h](https://github.com/Hieromon/AutoConnect/blob/master/src/AutoConnectDefs.h) header file. 34 | 35 | ```cpp 36 | #define AC_SHOW_PORTALIDENTIFIER 37 | ``` 38 | 39 | Using the [PlatformIO](https://registry.platformio.org/platforms/platformio/espressif32) as a build environment, you can enable it in the [`build_flags`](https://docs.platformio.org/en/latest/projectconf/section_env_build.html#build-flags) setting without modifying the library's AutoConnectDefs.h source file. 40 | 41 | ```ini 42 | platform = espressif32 43 | framework = arduino 44 | build_flags = -DAC_SHOW_PORTALIDENTIFIER 45 | ``` 46 | -------------------------------------------------------------------------------- /mkdocs/colorized.md: -------------------------------------------------------------------------------- 1 | ## AutoConnect menu colorizing ## 2 | 3 | You can easily change the color of the AutoConnect menu. Menu colors can be changed statically by the AutoConnect menu color definition determined at compile time. You cannot change the color while the Sketch is running. 4 | 5 | The menu color scheme has been separated to `AutoConnectLabels.h` placed the AutoConnect library folder.[^1] You can change the color scheme of the menu with the following three color codes. The color code also accepts CSS standard color names.[^2] 6 | 7 | [^1]: Usually, it will locate to the Arduino/libraries/AutoConnect/src folder of user documents. 8 | 9 | [^2]: The W3C HTML and CSS standards have listed only 16 valid color names: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow. Major browsers can accept more color names, but they are not web safe in typically. 10 | 11 | In `AutoConnectLabels.h` you can find three definition macros for menu colors: 12 | 13 | - \#define AUTOCONNECT_MENUCOLOR_TEXT 14 | Defines the menu text color. 15 | 16 | - \#define AUTOCONNECT_MENUCOLOR_BACKGROUND 17 | Defines the menu background color. 18 | 19 | - \#define AUTOCONNECT_MENUCOLOR_ACTIVE 20 | Defines the active menu item background color. 21 | 22 | ## Typical color schemes 23 | 24 | Here are some color schemes picked up. 25 | 26 | ### Indigo 27 | 28 | ```cpp 29 | #define AUTOCONNECT_MENUCOLOR_TEXT "#ffa500" 30 | #define AUTOCONNECT_MENUCOLOR_BACKGROUND "#1a237e" 31 | #define AUTOCONNECT_MENUCOLOR_ACTIVE "#283593" 32 | ``` 33 | 34 | 35 | 36 | ### Dim-gray 37 | 38 | ```cpp 39 | #define AUTOCONNECT_MENUCOLOR_TEXT "#fffacd" 40 | #define AUTOCONNECT_MENUCOLOR_BACKGROUND "#696969" 41 | #define AUTOCONNECT_MENUCOLOR_ACTIVE "#808080" 42 | ``` 43 | 44 | 45 | 46 | ### Brown 47 | 48 | ```cpp 49 | #define AUTOCONNECT_MENUCOLOR_TEXT "#e6e6fa" 50 | #define AUTOCONNECT_MENUCOLOR_BACKGROUND "#3e2723" 51 | #define AUTOCONNECT_MENUCOLOR_ACTIVE "#4e342e" 52 | ``` 53 | 54 | 55 | -------------------------------------------------------------------------------- /mkdocs/css/extra.css: -------------------------------------------------------------------------------- 1 | pre { color: white !important; } 2 | 3 | .md-clipboard:before { 4 | color: rgb(100, 100, 100); 5 | } 6 | 7 | .codehilite:hover .md-clipboard:before,.md-typeset .highlight:hover .md-clipboard:before,pre:hover .md-clipboard:before { 8 | color: rgba(255, 255, 255, 0.54) !important 9 | } 10 | 11 | @media only screen and (min-width: 76.25em) { 12 | .md-main__inner { 13 | max-width: none; 14 | } 15 | .md-sidebar--primary { 16 | left: 0; 17 | } 18 | .md-sidebar--secondary { 19 | right: 0; 20 | margin-left: 0; 21 | -webkit-transform: none; 22 | transform: none; 23 | } 24 | } -------------------------------------------------------------------------------- /mkdocs/css/paragraph.css: -------------------------------------------------------------------------------- 1 | .lead { 2 | color: gray; 3 | font-size: 15px; 4 | } 5 | 6 | .md-typeset h2 { 7 | border-bottom: solid 1px #d3d3d3; 8 | padding-bottom: 5px; 9 | } 10 | 11 | .md-typeset pre, .highlight code { 12 | background-color: #272822 !important; 13 | font-size: 12px; 14 | } 15 | 16 | .md-typeset .highlighttable .codehilitetable { 17 | margin-left:-20px; 18 | margin-right: -20px; 19 | border-radius: 0; 20 | } 21 | 22 | .md-typeset .highlighttable .codehilitetable .linenodiv { 23 | background-color: #222 !important; 24 | } 25 | 26 | .md-typeset .highlighttable .codehilitetable .linenodiv pre { 27 | background-color: #222 !important; 28 | color: #aaa; 29 | margin: 0; 30 | } 31 | 32 | .md-typeset .codehilitetable .md-clipboard:before { 33 | color: rgba(240,240,240,.8); 34 | } 35 | .md-typeset .codehilitetable .md-clipboard:hover:before { 36 | color: rgba(102,217,224,1); 37 | } 38 | 39 | .md-typeset .badge { 40 | padding: 0; 41 | margin-top: -20px; 42 | } 43 | 44 | .apidl { 45 | margin-left: 20px; 46 | } 47 | 48 | .apidef { 49 | display: block; 50 | float: left; 51 | width: 100px; 52 | } 53 | 54 | .apidesc { 55 | display: inline-block; 56 | width: calc(100% - 100px); 57 | } 58 | 59 | .horizontal-list { 60 | list-style-type: none; 61 | overflow: hidden; 62 | } 63 | 64 | .horizontal-list > li { 65 | float: left; 66 | display: block; 67 | } 68 | 69 | table.achandling { 70 | font-family: arial, sans-serif; 71 | border-collapse: collapse; 72 | width: 60%; 73 | color: black; 74 | } 75 | 76 | table.achandling th, table.achandling td { 77 | border: 1px solid #dddddd; 78 | text-align: center; 79 | padding: 8px; 80 | } 81 | 82 | table.achandling tr:nth-child(even) { 83 | background-color: #dddddd; 84 | } 85 | -------------------------------------------------------------------------------- /mkdocs/images/ACMenu_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ACMenu_brown.png -------------------------------------------------------------------------------- /mkdocs/images/ACMenu_dimgray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ACMenu_dimgray.png -------------------------------------------------------------------------------- /mkdocs/images/ACMenu_indigo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ACMenu_indigo.png -------------------------------------------------------------------------------- /mkdocs/images/APIKeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/APIKeys.png -------------------------------------------------------------------------------- /mkdocs/images/AutoConnectAux.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/AutoConnectAux.gif -------------------------------------------------------------------------------- /mkdocs/images/ChannelID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ChannelID.png -------------------------------------------------------------------------------- /mkdocs/images/ChannelStatus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ChannelStatus.png -------------------------------------------------------------------------------- /mkdocs/images/CreateChannel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/CreateChannel.png -------------------------------------------------------------------------------- /mkdocs/images/PageBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/PageBuilder.png -------------------------------------------------------------------------------- /mkdocs/images/USERKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/USERKey.png -------------------------------------------------------------------------------- /mkdocs/images/ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ac.png -------------------------------------------------------------------------------- /mkdocs/images/ac2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ac2.gif -------------------------------------------------------------------------------- /mkdocs/images/ac_auxmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ac_auxmenu.png -------------------------------------------------------------------------------- /mkdocs/images/ac_auxmenu_multi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ac_auxmenu_multi.png -------------------------------------------------------------------------------- /mkdocs/images/ac_json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ac_json.png -------------------------------------------------------------------------------- /mkdocs/images/ac_mqtt_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ac_mqtt_setting.png -------------------------------------------------------------------------------- /mkdocs/images/acbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acbutton.png -------------------------------------------------------------------------------- /mkdocs/images/accheckbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/accheckbox.png -------------------------------------------------------------------------------- /mkdocs/images/acelement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acelement.png -------------------------------------------------------------------------------- /mkdocs/images/acfile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acfile.png -------------------------------------------------------------------------------- /mkdocs/images/acinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acinput.png -------------------------------------------------------------------------------- /mkdocs/images/acow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acow.png -------------------------------------------------------------------------------- /mkdocs/images/acradio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acradio.png -------------------------------------------------------------------------------- /mkdocs/images/acrange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acrange.png -------------------------------------------------------------------------------- /mkdocs/images/acselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acselect.png -------------------------------------------------------------------------------- /mkdocs/images/acsubmit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/acsubmit.png -------------------------------------------------------------------------------- /mkdocs/images/actext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/actext.png -------------------------------------------------------------------------------- /mkdocs/images/adder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/adder.png -------------------------------------------------------------------------------- /mkdocs/images/addmenu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/addmenu.gif -------------------------------------------------------------------------------- /mkdocs/images/answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/answer.png -------------------------------------------------------------------------------- /mkdocs/images/applymenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/applymenu.png -------------------------------------------------------------------------------- /mkdocs/images/arduino-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 29 | 33 | 37 | 38 | 43 | 46 | 50 | 51 | 57 | 58 | 59 | 60 | 65 | 68 | 72 | 73 | 74 | 79 | 83 | 87 | 88 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /mkdocs/images/arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/arrow_down.png -------------------------------------------------------------------------------- /mkdocs/images/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/arrow_right.png -------------------------------------------------------------------------------- /mkdocs/images/arrow_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 39 | 41 | 42 | 44 | image/svg+xml 45 | 47 | 48 | 49 | 50 | 51 | 55 | 59 | 62 | 68 | 69 | 70 | 71 | 76 | 77 | -------------------------------------------------------------------------------- /mkdocs/images/aux_fsbrowser.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/aux_fsbrowser.gif -------------------------------------------------------------------------------- /mkdocs/images/aux_json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/aux_json.png -------------------------------------------------------------------------------- /mkdocs/images/aux_menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/aux_menu.gif -------------------------------------------------------------------------------- /mkdocs/images/aux_ov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/aux_ov.gif -------------------------------------------------------------------------------- /mkdocs/images/aux_pattern.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/aux_pattern.gif -------------------------------------------------------------------------------- /mkdocs/images/beforeafter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/beforeafter.png -------------------------------------------------------------------------------- /mkdocs/images/begin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/begin.png -------------------------------------------------------------------------------- /mkdocs/images/broken_html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/broken_html.png -------------------------------------------------------------------------------- /mkdocs/images/config_ssid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/config_ssid.png -------------------------------------------------------------------------------- /mkdocs/images/confignew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/confignew.png -------------------------------------------------------------------------------- /mkdocs/images/cp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/cp.gif -------------------------------------------------------------------------------- /mkdocs/images/creditmigrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/creditmigrate.png -------------------------------------------------------------------------------- /mkdocs/images/declare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/declare.png -------------------------------------------------------------------------------- /mkdocs/images/esp32cam_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/esp32cam_view.png -------------------------------------------------------------------------------- /mkdocs/images/espshaker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/espshaker.gif -------------------------------------------------------------------------------- /mkdocs/images/established.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/established.png -------------------------------------------------------------------------------- /mkdocs/images/export_binary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/export_binary.png -------------------------------------------------------------------------------- /mkdocs/images/extswitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/extswitch.png -------------------------------------------------------------------------------- /mkdocs/images/fetch_led.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/fetch_led.gif -------------------------------------------------------------------------------- /mkdocs/images/fsbmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/fsbmenu.png -------------------------------------------------------------------------------- /mkdocs/images/fsbmenu_expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/fsbmenu_expand.png -------------------------------------------------------------------------------- /mkdocs/images/gitrepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/gitrepo.png -------------------------------------------------------------------------------- /mkdocs/images/global1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/global1.png -------------------------------------------------------------------------------- /mkdocs/images/global2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/global2.png -------------------------------------------------------------------------------- /mkdocs/images/handleClient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/handleClient.png -------------------------------------------------------------------------------- /mkdocs/images/heartbeat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/heartbeat.png -------------------------------------------------------------------------------- /mkdocs/images/hello_world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/hello_world.png -------------------------------------------------------------------------------- /mkdocs/images/html5_forms_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/html5_forms_number.png -------------------------------------------------------------------------------- /mkdocs/images/html5_forms_number_ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/html5_forms_number_ios.png -------------------------------------------------------------------------------- /mkdocs/images/include.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/include.png -------------------------------------------------------------------------------- /mkdocs/images/ins_lib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ins_lib.png -------------------------------------------------------------------------------- /mkdocs/images/jsmultiply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/jsmultiply.png -------------------------------------------------------------------------------- /mkdocs/images/lm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/lm.png -------------------------------------------------------------------------------- /mkdocs/images/localize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/localize.png -------------------------------------------------------------------------------- /mkdocs/images/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/login.png -------------------------------------------------------------------------------- /mkdocs/images/login_ani.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/login_ani.gif -------------------------------------------------------------------------------- /mkdocs/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/menu.png -------------------------------------------------------------------------------- /mkdocs/images/menu_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/menu_home.png -------------------------------------------------------------------------------- /mkdocs/images/menu_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/menu_login.png -------------------------------------------------------------------------------- /mkdocs/images/menu_ondemand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/menu_ondemand.png -------------------------------------------------------------------------------- /mkdocs/images/menu_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/menu_r.png -------------------------------------------------------------------------------- /mkdocs/images/mqttcredential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/mqttcredential.png -------------------------------------------------------------------------------- /mkdocs/images/mqttdevice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/mqttdevice.png -------------------------------------------------------------------------------- /mkdocs/images/newap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/newap.png -------------------------------------------------------------------------------- /mkdocs/images/newap_static.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/newap_static.png -------------------------------------------------------------------------------- /mkdocs/images/openssid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/openssid.png -------------------------------------------------------------------------------- /mkdocs/images/openssid_trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/openssid_trash.png -------------------------------------------------------------------------------- /mkdocs/images/otacaption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/otacaption.png -------------------------------------------------------------------------------- /mkdocs/images/ov.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ov.gif -------------------------------------------------------------------------------- /mkdocs/images/ov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/ov.png -------------------------------------------------------------------------------- /mkdocs/images/partition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/partition.png -------------------------------------------------------------------------------- /mkdocs/images/portalready_ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/portalready_ac.png -------------------------------------------------------------------------------- /mkdocs/images/portalready_el.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/portalready_el.png -------------------------------------------------------------------------------- /mkdocs/images/regexp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/regexp.png -------------------------------------------------------------------------------- /mkdocs/images/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/reset.png -------------------------------------------------------------------------------- /mkdocs/images/reset_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/reset_r.png -------------------------------------------------------------------------------- /mkdocs/images/resetting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/resetting.png -------------------------------------------------------------------------------- /mkdocs/images/rest_client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/rest_client.png -------------------------------------------------------------------------------- /mkdocs/images/rssi_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/rssi_chart.png -------------------------------------------------------------------------------- /mkdocs/images/serial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/serial.png -------------------------------------------------------------------------------- /mkdocs/images/serverupdate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/serverupdate.gif -------------------------------------------------------------------------------- /mkdocs/images/stat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/stat.png -------------------------------------------------------------------------------- /mkdocs/images/staticip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/staticip.png -------------------------------------------------------------------------------- /mkdocs/images/statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/statistics.png -------------------------------------------------------------------------------- /mkdocs/images/tag_ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/tag_ac.png -------------------------------------------------------------------------------- /mkdocs/images/tag_accore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/tag_accore.png -------------------------------------------------------------------------------- /mkdocs/images/updated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/updated.png -------------------------------------------------------------------------------- /mkdocs/images/updatelist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/updatelist.png -------------------------------------------------------------------------------- /mkdocs/images/updatemenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/updatemenu.png -------------------------------------------------------------------------------- /mkdocs/images/updatemodel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/updatemodel.png -------------------------------------------------------------------------------- /mkdocs/images/updateserver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/updateserver.png -------------------------------------------------------------------------------- /mkdocs/images/updating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/updating.png -------------------------------------------------------------------------------- /mkdocs/images/upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/upload.gif -------------------------------------------------------------------------------- /mkdocs/images/vscode_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/vscode_clean.png -------------------------------------------------------------------------------- /mkdocs/images/vscode_statusbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/vscode_statusbar.png -------------------------------------------------------------------------------- /mkdocs/images/webcamserver_ss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webcamserver_ss1.png -------------------------------------------------------------------------------- /mkdocs/images/webcamserver_ss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webcamserver_ss2.png -------------------------------------------------------------------------------- /mkdocs/images/webcamserver_ss3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webcamserver_ss3.png -------------------------------------------------------------------------------- /mkdocs/images/webcamview_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webcamview_open.png -------------------------------------------------------------------------------- /mkdocs/images/webcamview_set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webcamview_set.png -------------------------------------------------------------------------------- /mkdocs/images/webupdate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webupdate.gif -------------------------------------------------------------------------------- /mkdocs/images/webupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webupdate.png -------------------------------------------------------------------------------- /mkdocs/images/webupdatemodel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hieromon/AutoConnect/f21f57d4b909a4540bea06655aef9b88e5d1b992/mkdocs/images/webupdatemodel.png -------------------------------------------------------------------------------- /mkdocs/license.md: -------------------------------------------------------------------------------- 1 | **MIT License** 2 | 3 | Copyright © 2018-2023 Hieromon Ikasamo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 10 | IN THE SOFTWARE. 11 | 12 | **Acknowledgments** 13 | 14 | Each of the following libraries used by AutoConnect is under its license: 15 | 16 | - The **Luxbar** is licensed under the MIT License. https://github.com/balzss/luxbar 17 | - **ArduinoJson** is licensed under the MIT License. https://arduinojson.org/ 18 | -------------------------------------------------------------------------------- /mkdocs/lsbegin.md: -------------------------------------------------------------------------------- 1 | ## AutoConnect::begin logic sequence 2 | 3 | The following parameters of [AutoConnectConfig](apiconfig.md) affect the behavior and control a logic sequence of [AutoConnect::begin](api.md#begin) function. These parameters are evaluated on a case-by-case basis and may not be valid in all situations. The Sketch must consider the role of these parameters and the conditions under which they will work as intended. You need to understand what happens when using these parameters in combination. 4 | 5 | - [autoReconnect](apiconfig.md#autoreconnect) : Attempts re-connect with past SSID by saved credential. 6 | - [autoRise](apiconfig.md#autorise) : Controls starting the captive portal. 7 | - [immediateStart](apiconfig.md#immediatestart) : Starts the captive portal immediately, without the 1st-WiFi.begin. 8 | - [portalTimeout](apiconfig.md#portaltimeout) : Time out limit for the portal. 9 | - [retainPortal](apiconfig.md#retainportal) : Keep DNS server functioning for the captive portal. 10 | 11 | The following chart shows the AutoConnect::begin logic sequence that contains the control flow with each parameter takes effect. 12 | 13 | 14 | 15 | For example, [AutoConnect::begin](api.md#begin) will not end without the [**portalTimeout**](apiconfig.md#portaltimeout) while the connection not establishes, but WebServer will start to work. Also, the DNS server will start to make a series of the captive portal operation on the client device. The custom web pages now respond correctly by the two internally launched servers, and the Sketch looks like working. But AutoConnect::begin does not end yet. Especially when invoking AutoConnect::begin in the **setup()**, control flow does not pass to the **loop()**. 16 | 17 | However, [**portalTimeout**](apiconfig.md#portaltimeout) can be used effectively in various scenes in combination with [**immediateStart**](apiconfig.md#immediatestart). Its combination is useful for implementing Sketches that can work in situations where WiFi is not always available. Namely, Sketch will support a running mode with both offline and online. 18 | If AutoConnect staying in the captive portal exceeds the time limit, Sketch can switch a process-mode to offline according to WiFi signal detection. Conversely, it can start a captive portal immediately with intentional control to shift the process-mode to online from offline. Especially, You can activate the process-mode shift manually by trigger via external switches. 19 | 20 | The [**retainPortal**](apiconfig.md#retainportal) option allows continuing the captive portal operation even after exiting from AutoConnect::begin. This option allows the use of the automatic portal pop-ups on the smartphone devices etc. even after the ESP module has established a connection with some access point in STA mode. (Excepts blocking a series of portal processes via intentionally accessing a URL outside the scope of **/_ac**. eg., if you try to communicate with the mqtt server without connecting to the access point, its access will be redirected to **/_ac** caused by the trap of the captive portal detection) 21 | 22 | !!! info "The AutoConnect::begin 3rd parameter" 23 | Another parameter as the [3rd parameter](api.md#begin) of AutoConnect::begin related to timeout constrains the connection wait time after WiFi.begin. It is the **CONNECTED** judgment of the above chart that it has an effect. 24 | -------------------------------------------------------------------------------- /mkdocs/otaupdate.md: -------------------------------------------------------------------------------- 1 | !!! info "Only for AutoConnect" 2 | AutoConnect OTA features are valid only for AutoConnect; they are not available for [AutoConnectCore](basicusage.md#basicusage.md#reducing-binary-size). 3 | 4 | ## OTA Updates with AutoConnect 5 | 6 | AutoConnect provides **two type platforms** for updating the binary sketch in the ESP8266 or ESP32 module via OTA. They correspond to the [Web Browser Update](https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html#web-browser) and [HTTP Server Update](https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html#http-server) whiches mentioned in the [ESP8266 Arduino Core documentation](https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html#ota-updates). 7 | 8 | [**The update behavior using a web browser**](otabrowser.md) as the client that supplies the binary sketch file for update follows the scenario assumed by the ESP8266 Arduino core. Therefore, the user sketch must meet the requirements described in the ESP8266 Arduino Core documentation, but you can easily embed the OTA update feature that able to operate via the web browser by AutoConnect menu. All you need to do is that specify [AutoConnectConfig](apiconfig.md#ota). 9 | 10 | 11 | 12 | !!! caution "It is for the only the same network" 13 | This method can apply only if the client browser and the ESP module belong to the same network segment. It cannot work correctly across networks. 14 | 15 | [**Another update method using an update server**](otaserver.md) can be applied more broadly than using a web browser. This method can also update the ESP module over the Internet if you can secure the correct route and transparency between the ESP module and the update server. To configure this platform, you need to have an [update server](otaserver.md#update-server-for-the-autoconnectupdate-class) along with using the [AutoConnectUpdate](apiupdate.md) class in your sketch. 16 | 17 | 18 | 19 | !!! info "Security Disclaimer" 20 | The security level of the OTA update platform provided by AutoConnect is very weak. No guarantees as to the level of security for your application by the AutoConnect OTA Update is implied. 21 | -------------------------------------------------------------------------------- /src/AutoConnect.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Declares the full AutoConnect component class, including the 3 | * AutoConnectAux structure. The AutoConnect.h ensures backward 4 | * compatibility of full AutoConnect components for sketches. 5 | * @file AutoConnectCore.h 6 | * @author hieromon@gmail.com 7 | * @version 1.4.0 8 | * @date 2022-07-14 9 | * @copyright MIT license. 10 | */ 11 | 12 | #ifndef _AUTOCONNECT_H_ 13 | #define _AUTOCONNECT_H_ 14 | 15 | #include "AutoConnectExtImpl.hpp" 16 | 17 | using AutoConnectConfig = AutoConnectConfigExt; 18 | using AutoConnect = AutoConnectExt; 19 | 20 | #endif // !_AUTOCONNECT_H_ 21 | -------------------------------------------------------------------------------- /src/AutoConnectConfigExt.h: -------------------------------------------------------------------------------- 1 | /** 2 | * AutoConnect configuration settings extended structure. It has the 3 | * necessary configuration settings for all AutoConnect components. 4 | * @file AutoConnectConfigExt.h 5 | * @author hieromon@gmail.com 6 | * @version 1.4.1 7 | * @date 2023-01-05 8 | * @copyright MIT license. 9 | */ 10 | 11 | #ifndef _AUTOCONNECTCONFIGEXT_H_ 12 | #define _AUTOCONNECTCONFIGEXT_H_ 13 | 14 | #include "AutoConnectConfigBase.h" 15 | 16 | class AutoConnectConfigExt : public AutoConnectConfigBase { 17 | public: 18 | using AutoConnectConfigBase::AutoConnectConfigBase; 19 | explicit AutoConnectConfigExt() : 20 | AutoConnectConfigBase(), 21 | ota(AC_OTA_EXTRA), 22 | otaExtraCaption(nullptr) { 23 | menuItems |= AC_MENUITEM_UPDATE; 24 | } 25 | 26 | explicit AutoConnectConfigExt(const char* ap, const char* password, const unsigned long portalTimeout = 0, const uint8_t channel = AUTOCONNECT_AP_CH) : 27 | AutoConnectConfigBase(ap, password, portalTimeout, channel), 28 | ota(AC_OTA_EXTRA), 29 | otaExtraCaption(nullptr) { 30 | menuItems |= AC_MENUITEM_UPDATE; 31 | } 32 | 33 | ~AutoConnectConfigExt() {} 34 | 35 | AutoConnectConfigExt& operator=(const AutoConnectConfigExt& o) { 36 | AutoConnectConfigBase::operator=(o); 37 | ota = o.ota; 38 | otaExtraCaption = o.otaExtraCaption; 39 | return *this; 40 | } 41 | 42 | AC_OTA_t ota; /**< Attach built-in OTA */ 43 | const char* otaExtraCaption; /**< Extra caption of OTA Updating Firmware screen */ 44 | }; 45 | 46 | #endif // !_AUTOCONNECTCONFIGEXT_H_ 47 | -------------------------------------------------------------------------------- /src/AutoConnectCore.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Define a core component of AutoConnect that implements the minimum 3 | * functionality of a decoupled AutoConnectAux structure. 4 | * @file AutoConnectCore.h 5 | * @author hieromon@gmail.com 6 | * @version 1.4.0 7 | * @date 2022-07-14 8 | * @copyright MIT license. 9 | */ 10 | 11 | #ifndef _AUTOCONNECTCORE_H_ 12 | #define _AUTOCONNECTCORE_H_ 13 | 14 | #include "AutoConnectCoreImpl.hpp" 15 | 16 | using AutoConnectConfig = AutoConnectConfigBase; 17 | using AutoConnect = AutoConnectCore; 18 | 19 | #endif // !_AUTOCONNECTCORE_H_ 20 | -------------------------------------------------------------------------------- /src/AutoConnectElement.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Alias declarations for an accessible the AutoConnectElement class. 3 | * @file AutoConnectElement.h 4 | * @author hieromon@gmail.com 5 | * @version 1.4.1 6 | * @date 2022-12-23 7 | * @copyright MIT license. 8 | */ 9 | 10 | #ifndef _AUTOCONNECTELEMENT_H_ 11 | #define _AUTOCONNECTELEMENT_H_ 12 | 13 | #include "AutoConnectElementBasis.h" 14 | #ifdef AUTOCONNECT_USE_JSON 15 | #include 16 | #include "AutoConnectElementJson.h" 17 | using AutoConnectElement = AutoConnectElementJson; 18 | using AutoConnectButton = AutoConnectButtonJson; 19 | using AutoConnectCheckbox = AutoConnectCheckboxJson; 20 | using AutoConnectFile = AutoConnectFileJson; 21 | using AutoConnectInput = AutoConnectInputJson; 22 | using AutoConnectRadio = AutoConnectRadioJson; 23 | using AutoConnectRange = AutoConnectRangeJson; 24 | using AutoConnectSelect = AutoConnectSelectJson; 25 | using AutoConnectStyle = AutoConnectStyleJson; 26 | using AutoConnectSubmit = AutoConnectSubmitJson; 27 | using AutoConnectText = AutoConnectTextJson; 28 | #define AUTOCONNECT_JSON_BUFFER_SIZE 256 29 | #else 30 | using AutoConnectElement = AutoConnectElementBasis; 31 | using AutoConnectButton = AutoConnectButtonBasis; 32 | using AutoConnectCheckbox = AutoConnectCheckboxBasis; 33 | using AutoConnectFile = AutoConnectFileBasis; 34 | using AutoConnectInput = AutoConnectInputBasis; 35 | using AutoConnectRadio = AutoConnectRadioBasis; 36 | using AutoConnectRange = AutoConnectRangeBasis; 37 | using AutoConnectSelect = AutoConnectSelectBasis; 38 | using AutoConnectStyle = AutoConnectStyleBasis; 39 | using AutoConnectSubmit = AutoConnectSubmitBasis; 40 | using AutoConnectText = AutoConnectTextBasis; 41 | #endif // !AUTOCONNECT_USE_JSON 42 | 43 | /** 44 | * Support declare the AutoConnectElement variable with reducing the 45 | * arguments. These macros declare the AutoConnectElement variable 46 | * with the same name as a "name" argument. 47 | */ 48 | #define ACElement(n, ...) AutoConnectElement n(#n, ##__VA_ARGS__) 49 | #define ACButton(n, ...) AutoConnectButton n(#n, ##__VA_ARGS__) 50 | #define ACCheckbox(n, ...) AutoConnectCheckbox n(#n, ##__VA_ARGS__) 51 | #define ACFile(n, ...) AutoConnectFile n(#n, ##__VA_ARGS__) 52 | #define ACInput(n, ...) AutoConnectInput n(#n, ##__VA_ARGS__) 53 | #define ACRadio(n, ...) AutoConnectRadio n(#n, ##__VA_ARGS__) 54 | #define ACRange(n, ...) AutoConnectRange n(#n, ##__VA_ARGS__) 55 | #define ACSelect(n, ...) AutoConnectSelect n(#n, ##__VA_ARGS__) 56 | #define ACSubmit(n, ...) AutoConnectSubmit n(#n, ##__VA_ARGS__) 57 | #define ACStyle(n, ...) AutoConnectStyle n(#n, ##__VA_ARGS__) 58 | #define ACText(n, ...) AutoConnectText n(#n, ##__VA_ARGS__) 59 | 60 | #endif // _AUTOCONNECTELEMENT_H_ 61 | -------------------------------------------------------------------------------- /src/AutoConnectFS.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Predefined file system applied for AutoConnect usage. 3 | * @file AutoConnectFS.h 4 | * @author hieromon@gmail.com 5 | * @version 1.4.0 6 | * @date 2022-09-20 7 | * @copyright MIT license. 8 | */ 9 | 10 | #ifndef _AUTOCONNECTFS_H_ 11 | #define _AUTOCONNECTFS_H_ 12 | 13 | // Globally deploy the applicable file system classes and instances. 14 | // The type of the applicable file system to be used is switched 15 | // according to the AC_USE_SPIFFS and AC_USE_LITTLEFS definition. 16 | // The file system indicator to apply is expanded by the macro definition, 17 | // AUTOCONNECT_APPLIED_FILECLASS is assigned the class name, 18 | // and AUTOCONNECT_APPLIED_FILESYSTEM is assigned the global instance name. 19 | #if defined(ARDUINO_ARCH_ESP8266) 20 | #define AC_DEFAULT_FILESYSTEM 2 21 | #define AUTOCONNECT_FS_INITIALIZATION 22 | #elif defined(ARDUINO_ARCH_ESP32) 23 | #define AC_DEFAULT_FILESYSTEM 1 24 | #define AUTOCONNECT_FS_INITIALIZATION true 25 | #endif 26 | 27 | #if !defined(AC_USE_SPIFFS) && !defined(AC_USE_LITTLEFS) 28 | #define AC_USE_FILESYSTEM AC_DEFAULT_FILESYSTEM 29 | #elif defined(AC_USE_SPIFFS) 30 | #define AC_USE_FILESYSTEM 1 31 | #elif defined(AC_USE_LITTLEFS) 32 | #define AC_USE_FILESYSTEM 2 33 | #endif 34 | 35 | // Note: If LittleFS.h becomes Not Found in PlatformIO, try specifying 36 | // lib_ldf_mode=deep with platformio.ini. Due to the deep nesting by 37 | // preprocessor instructions, the include file cannot be detected by the 38 | // chain mode (nested include search) of PlatformIO's dependent library 39 | // search. 40 | #ifdef ARDUINO_ARCH_ESP8266 41 | #define AUTOCONNECT_APPLIED_FILECLASS fs::FS 42 | #endif 43 | #if AC_USE_FILESYSTEM == 1 44 | #include 45 | #define AUTOCONNECT_APPLIED_FILESYSTEM SPIFFS 46 | #ifdef ARDUINO_ARCH_ESP32 47 | #include 48 | #define AUTOCONNECT_APPLIED_FILECLASS fs::SPIFFSFS 49 | extern "C" { 50 | #include 51 | } 52 | #endif 53 | #elif AC_USE_FILESYSTEM == 2 54 | #include 55 | #define AUTOCONNECT_APPLIED_FILESYSTEM LittleFS 56 | #ifdef ARDUINO_ARCH_ESP32 57 | extern "C" { 58 | #include 59 | } 60 | #define AUTOCONNECT_APPLIED_FILECLASS fs::LittleFSFS 61 | 62 | // With ESP32 platform core version less 2.0, reverts the LittleFS class and 63 | // the exported instance to the ordinary LittleFS_esp32 library owns. 64 | #if !defined(ESP_ARDUINO_VERSION_MAJOR) && ESP_ARDUINO_VERSION_MAJOR<2 65 | #undef AUTOCONNECT_APPLIED_FILESYSTEM 66 | #define AUTOCONNECT_APPLIED_FILESYSTEM LITTLEFS 67 | #undef AUTOCONNECT_APPLIED_FILECLASS 68 | #define AUTOCONNECT_APPLIED_FILECLASS fs::LITTLEFSFS 69 | #endif 70 | #endif 71 | #endif 72 | 73 | // Deploy the file class for the AutoConnect scope. 74 | namespace AutoConnectFS { 75 | // Types branching to be code commonly for the file system classes with 76 | // ESP8266 and ESP32. 77 | #if defined(ARDUINO_ARCH_ESP8266) 78 | using SDClassT = SDClass; // SD:File system class 79 | using SDFileT = File; // SD:File class 80 | #elif defined(ARDUINO_ARCH_ESP32) 81 | using SDClassT = fs::SDFS; 82 | using SDFileT = SDFile; 83 | #endif 84 | 85 | using FS = AUTOCONNECT_APPLIED_FILECLASS; 86 | inline bool _isMounted(AutoConnectFS::FS* filesystem) { 87 | #if defined(ARDUINO_ARCH_ESP8266) 88 | FSInfo info; 89 | return filesystem->info(info); 90 | #elif defined( ARDUINO_ARCH_ESP32) 91 | (void)(filesystem); 92 | #if AC_USE_FILESYSTEM == 1 93 | return esp_spiffs_mounted(NULL); 94 | #elif AC_USE_FILESYSTEM == 2 95 | return esp_littlefs_mounted(NULL); 96 | #endif 97 | #endif 98 | } 99 | }; 100 | 101 | // Export an actual file system indicator 102 | #if AC_USE_FILESYSTEM == 1 103 | #define AUTOCONNECT_USE_SPIFFS 104 | #elif AC_USE_FILESYSTEM == 2 105 | #define AUTOCONNECT_USE_LITTLEFS 106 | #endif 107 | 108 | #endif // !_AUTOCONNECTFS_H_ 109 | -------------------------------------------------------------------------------- /src/AutoConnectJsonDefs.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Wrapping definition to ensure version compatibility of ArduinoJson. 3 | * @file AutoConnectJsonDefs.h 4 | * @author hieromon@gmail.com 5 | * @version 1.3.1 6 | * @date 2021-10-03 7 | * @copyright MIT license. 8 | */ 9 | 10 | #ifndef _AUTOCONNECTJSONDEFS_H_ 11 | #define _AUTOCONNECTJSONDEFS_H_ 12 | 13 | #include 14 | 15 | /** 16 | * Make the Json types and functions consistent with the ArduinoJson 17 | * version. These declarations share the following type definitions: 18 | * - Difference between reference and proxy of JsonObject and JsonArray. 19 | * - Difference of check whether the parsing succeeded or not. 20 | * - The print function name difference. 21 | * - The buffer class difference. 22 | * - When PSRAM present, enables the buffer allocation it with ESP32 and 23 | * supported version. 24 | */ 25 | #if ARDUINOJSON_VERSION_MAJOR<=5 26 | #define ArduinoJsonStaticBuffer StaticJsonBuffer 27 | #define ARDUINOJSON_CREATEOBJECT(doc) doc.createObject() 28 | #define ARDUINOJSON_CREATEARRAY(doc) doc.createArray() 29 | #define ARDUINOJSON_PRETTYPRINT(doc, out) ({ size_t s = doc.prettyPrintTo(out); s; }) 30 | #define ARDUINOJSON_PRINT(doc, out) ({ size_t s = doc.printTo(out); s; }) 31 | #define ARDUINOJSON_OBJECT_REFMODIFY 32 | using ArduinoJsonObject = JsonObject&; 33 | using ArduinoJsonArray = JsonArray&; 34 | using ArduinoJsonBuffer = DynamicJsonBuffer; 35 | #define AUTOCONNECT_JSONBUFFER_PRIMITIVE_SIZE AUTOCONNECT_JSONBUFFER_SIZE 36 | #else 37 | #define ArduinoJsonStaticBuffer StaticJsonDocument 38 | #define ARDUINOJSON_CREATEOBJECT(doc) doc.to() 39 | #define ARDUINOJSON_CREATEARRAY(doc) doc.to() 40 | #define ARDUINOJSON_PRETTYPRINT(doc, out) ({ size_t s = serializeJsonPretty(doc, out); s; }) 41 | #define ARDUINOJSON_PRINT(doc, out) ({ size_t s = serializeJson(doc, out); s; }) 42 | #define ARDUINOJSON_OBJECT_REFMODIFY const 43 | using ArduinoJsonObject = JsonObject; 44 | using ArduinoJsonArray = JsonArray; 45 | #if defined(BOARD_HAS_PSRAM) && ((ARDUINOJSON_VERSION_MAJOR==6 && ARDUINOJSON_VERSION_MINOR>=10) || ARDUINOJSON_VERSION_MAJOR>6) 46 | // JsonDocument is assigned to PSRAM by ArduinoJson's custom allocator. 47 | struct SpiRamAllocatorST { 48 | void* allocate(size_t size) { 49 | uint32_t caps; 50 | if (psramFound()) 51 | caps = MALLOC_CAP_SPIRAM; 52 | else { 53 | caps = MALLOC_CAP_8BIT; 54 | AC_DBG("PSRAM not found, JSON buffer allocates to the heap.\n"); 55 | } 56 | return heap_caps_malloc(size, caps); 57 | } 58 | void deallocate(void* pointer) { 59 | heap_caps_free(pointer); 60 | } 61 | }; 62 | #define AUTOCONNECT_JSONBUFFER_PRIMITIVE_SIZE AUTOCONNECT_JSONPSRAM_SIZE 63 | using ArduinoJsonBuffer = BasicJsonDocument; 64 | #else 65 | #define AUTOCONNECT_JSONBUFFER_PRIMITIVE_SIZE AUTOCONNECT_JSONDOCUMENT_SIZE 66 | using ArduinoJsonBuffer = DynamicJsonDocument; 67 | #endif 68 | #endif 69 | 70 | #endif // _AUTOCONNECTJSONDEFS_H_ 71 | -------------------------------------------------------------------------------- /src/AutoConnectOTA.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Declaration of AutoConnectOTA class. 3 | * The AutoConnecOTA class is a class for web updating a Sketch binary 4 | * via OTA and implements with an AutoConnectAux page handler that 5 | * inherits from AutoConnectUploadHandler. 6 | * By overriding the _write function of AutoConnectUploadHandler to 7 | * write the executable binary using the Update class, it can update 8 | * the module firmware in synchronization with the upload of the sketch 9 | * binary file. 10 | * @file AutoConnectOTA.h 11 | * @author hieromon@gmail.com 12 | * @version 1.4.0 13 | * @date 2022-07-13 14 | * @copyright MIT license. 15 | */ 16 | 17 | #ifndef _AUTOCONNECTOTA_H_ 18 | #define _AUTOCONNECTOTA_H_ 19 | 20 | #include 21 | #include 22 | #include "AutoConnectAux.h" 23 | #include "AutoConnectUpload.h" 24 | #include "AutoConnectFS.h" 25 | 26 | class AutoConnectOTA : public AutoConnectUploadHandler { 27 | public: 28 | // Updating process status 29 | typedef enum { 30 | AC_OTA_IDLE, /**< Update process has not started */ 31 | AC_OTA_START, /**< Update process has started */ 32 | AC_OTA_PROGRESS, /**< Update process in progress */ 33 | AC_OTA_SUCCESS, /**< A binary updater has uploaded fine */ 34 | AC_OTA_RIP, /**< Ready for module restart */ 35 | AC_OTA_FAIL /**< Failed to save binary updater by Update class */ 36 | } AC_OTAStatus_t; 37 | 38 | // The treating destination of OTA transferred data 39 | typedef enum { 40 | OTA_DEST_FILE, /**< To be upload the file */ 41 | OTA_DEST_FIRM /**< To update the firmware */ 42 | } AC_OTADest_t; 43 | 44 | AutoConnectOTA() : extraCaption(nullptr), _dest(OTA_DEST_FIRM), _otaStatus(AC_OTA_IDLE), _tickerPort(-1), _tickerOn(LOW), _fs(nullptr) {}; 45 | ~AutoConnectOTA(); 46 | void attach(AutoConnectExt& portal); /**< Attach itself to AutoConnect */ 47 | void authentication(const AC_AUTH_t auth); /**< Set certain page authentication */ 48 | String error(void) const { return _err; } /**< Returns current error string */ 49 | void menu(const bool post) { _auxUpdate->menu(post); } /**< Enabel or disable arranging a created AutoConnectOTA page in the menu. */ 50 | void reset(void) { _otaStatus = AC_OTA_IDLE; } /**< Reset the status */ 51 | AC_OTAStatus_t status(void) const { return _otaStatus; } /**< Return a current error status of the Update class */ 52 | AC_OTADest_t dest(void) const { return _dest; } /**< Return a current uploading destination */ 53 | void setTicker(int8_t pin, uint8_t on) { _tickerPort = pin, _tickerOn = on; } /**< Set ticker LED port */ 54 | const char* extraCaption; /**< Updating firmware extra caption */ 55 | 56 | protected: 57 | template constexpr size_t lengthOf(T (&)[N]) noexcept { return N; } 58 | void _buildAux(AutoConnectAux* aux, const AutoConnectAux::ACPage_t* page, const size_t elementNum); 59 | bool _open(const char* filename, const char* mode) override; 60 | size_t _write(const uint8_t *buf, const size_t size) override; 61 | void _close(const HTTPUploadStatus status) override; 62 | String _updated(AutoConnectAux& result, PageArgument& args); 63 | void _setError(const char* err) override; 64 | 65 | std::unique_ptr _auxUpdate; /**< An update operation page */ 66 | std::unique_ptr _auxResult; /**< An update result page */ 67 | 68 | private: 69 | void _setError(void); 70 | 71 | AC_OTADest_t _dest; /**< Destination of OTA transferred data */ 72 | AC_OTAStatus_t _otaStatus; /**< Status for update progress */ 73 | int8_t _tickerPort; /**< GPIO for flicker */ 74 | uint8_t _tickerOn; /**< A signal for flicker turn on */ 75 | String _binName; /**< An updater file name */ 76 | 77 | AutoConnectFS::FS* _fs; /**< Filesystem for the native file uploading */ 78 | fs::File _file; /**< File handler for the native file uploading */ 79 | 80 | static const AutoConnectAux::ACPage_t _pageUpdate PROGMEM; 81 | static const AutoConnectAux::ACElementProp_t _elmUpdate[] PROGMEM; 82 | static const AutoConnectAux::ACPage_t _pageResult PROGMEM; 83 | static const AutoConnectAux::ACElementProp_t _elmResult[] PROGMEM; 84 | }; 85 | 86 | #endif // !_AUTOCONNECTOTA_H_ 87 | -------------------------------------------------------------------------------- /src/AutoConnectOTAPage.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Define pages to operate updates using the AutoConnectUpdate class. 3 | * @file AutoConnectOTAPage.h 4 | * @author hieromon@gmail.com 5 | * @version 1.4.0 6 | * @date 2022-07-13 7 | * @copyright MIT license. 8 | */ 9 | 10 | #ifndef _AUTOCONNECTOTAPAGE_H_ 11 | #define _AUTOCONNECTOTAPAGE_H_ 12 | 13 | #include "AutoConnectLabels.h" 14 | 15 | const AutoConnectAux::ACElementProp_t AutoConnectOTA::_elmUpdate[] PROGMEM = { 16 | { AC_Style, "s_cap", ".s_cap{display:block;text-align:right;font-size:small}", nullptr}, 17 | { AC_Text, "cap", AUTOCONNECT_TEXT_UPDATINGFIRMWARE, "display:block;margin:1.0em auto;font-size:1.17em;font-weight:bold" }, 18 | { AC_File, "bin", nullptr, AUTOCONNECT_TEXT_SELECTFIRMWARE }, 19 | { AC_Button, "update", AUTOCONNECT_BUTTONLABEL_UPDATE, "_upd(this,'bin','" AUTOCONNECT_URI_UPDATE_ACT "')" }, 20 | { AC_Element, "js", "", nullptr } 21 | }; 22 | 23 | // The definition of the OTA update operation page, which will be located to AUTOCONNECT_URI_UPDATE. 24 | const AutoConnectAux::ACPage_t AutoConnectOTA::_pageUpdate PROGMEM = { 25 | AUTOCONNECT_URI_UPDATE, AUTOCONNECT_MENULABEL_UPDATE, true, AutoConnectOTA::_elmUpdate 26 | }; 27 | 28 | const AutoConnectAux::ACElementProp_t AutoConnectOTA::_elmResult[] PROGMEM = { 29 | { AC_Text, "bin", nullptr, "margin-bottom:0.5em;font-size:1.2em;font-weight:bold;color:#" }, 30 | { AC_Text, "result", nullptr, nullptr }, 31 | { AC_Text, "rc", nullptr, "display:none" } 32 | }; 33 | 34 | // The definition of the OTA update result display page. 35 | // This page is assigned to AUTOCONNECT_URI_UPDATE_ACT, but the actual 36 | // HTML document is dynamically rewritten on AUTOCONNECT_URI_UPDATE page 37 | // by the JavaScript function included in the _pageUpdate AutoConnectAux. 38 | const AutoConnectAux::ACPage_t AutoConnectOTA::_pageResult PROGMEM = { 39 | AUTOCONNECT_URI_UPDATE_ACT, AUTOCONNECT_MENULABEL_UPDATE, false, AutoConnectOTA::_elmResult 40 | }; 41 | #endif // !_AUTOCONNECTOTAPAGE_H_ 42 | -------------------------------------------------------------------------------- /src/AutoConnectTicker.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * AutoConnectTicker class implementation. 3 | * Provides a service that shows the flicker signal according to WiFi 4 | * connection status. 5 | * @file AutoConnectTicker.cpp 6 | * @author hieromon@gmail.com 7 | * @version 1.4.2 8 | * @date 2023-01-23 9 | * @copyright MIT license. 10 | */ 11 | 12 | #include "AutoConnectTicker.h" 13 | 14 | // Support for Ticker Longer delays with ESP8266. 15 | // Details for https://github.com/esp8266/Arduino/pull/8625 16 | #define AC_TICKER_CALLBACK_ARG_T 17 | #if defined(ARDUINO_ESP8266_MAJOR) && defined(ARDUINO_ESP8266_MINOR) && defined(ARDUINO_ESP8266_REVISION) 18 | #if ARDUINO_ESP8266_MAJOR >= 3 && ARDUINO_ESP8266_MINOR >= 1 && ARDUINO_ESP8266_REVISION >= 0 19 | #define AC_TICKER_LONGER_DELAY 20 | #undef AC_TICKER_CALLBACK_ARG_T 21 | #define AC_TICKER_CALLBACK_ARG_T 22 | #endif 23 | #endif 24 | 25 | /** 26 | * Start ticker cycle 27 | * @param cycle Cycle time in [ms] 28 | * @param duty Duty cycle in [ms] 29 | */ 30 | void AutoConnectTicker::start(const uint32_t cycle, const uint32_t duty) { 31 | _cycle = cycle; 32 | if (duty <= _cycle) 33 | _duty = duty; 34 | start(); 35 | } 36 | 37 | /** 38 | * Start ticker cycle 39 | */ 40 | void AutoConnectTicker::start(void) { 41 | pinMode(_port, OUTPUT); 42 | _pulse.detach(); 43 | _period.attach_ms AC_TICKER_CALLBACK_ARG_T(_cycle, AutoConnectTicker::_onPeriod, this); 44 | } 45 | 46 | /** 47 | * Turn on the flicker signal and reserves a ticker to turn off the 48 | * signal. This behavior will perform every cycle to generate the 49 | * pseudo-PWM signal. 50 | * If the function is registered, call the callback function at the 51 | * end of one cycle. 52 | * @param t Its own address 53 | */ 54 | void AutoConnectTicker::_onPeriod(AutoConnectTicker* t) { 55 | digitalWrite(t->_port, t->_turnOn); 56 | t->_pulse.once_ms AC_TICKER_CALLBACK_ARG_T(t->_duty, AutoConnectTicker::_onPulse, t); 57 | if (t->_callback) 58 | t->_callback(); 59 | } 60 | 61 | /** 62 | * Turn off the flicker signal 63 | * @param t Its own address 64 | */ 65 | void AutoConnectTicker::_onPulse(AutoConnectTicker* t) { 66 | digitalWrite(t->_port, !(t->_turnOn)); 67 | } 68 | -------------------------------------------------------------------------------- /src/AutoConnectTicker.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Declaration of AutoConnectTicker class. 3 | * @file AutoConnectTicker.h 4 | * @author hieromon@gmail.com 5 | * @version 1.4.2 6 | * @date 2023-01-23 7 | * @copyright MIT license. 8 | */ 9 | 10 | #ifndef _AUTOCONNECTTICKER_H_ 11 | #define _AUTOCONNECTTICKER_H_ 12 | 13 | #include 14 | #if defined(ARDUINO_ARCH_ESP8266) 15 | #include 16 | #include 17 | #elif defined(ARDUINO_ARCH_ESP32) 18 | #include 19 | #endif 20 | #include 21 | #include "AutoConnectDefs.h" 22 | 23 | class AutoConnectTicker { 24 | public: 25 | explicit AutoConnectTicker(const uint8_t port = AUTOCONNECT_TICKER_PORT, const uint8_t active = LOW, const uint32_t cycle = 0, uint32_t duty = 0) : _cycle(cycle), _duty(duty), _port(port), _turnOn(active), _callback(nullptr) { 26 | if (_duty > _cycle) 27 | _duty = _cycle; 28 | } 29 | ~AutoConnectTicker() { stop(); } 30 | 31 | typedef std::function Callback_ft; 32 | void setCycle(const uint32_t cycle) { _cycle = cycle; } 33 | void setDuty(const uint32_t duty) { _duty = duty <= _cycle ? duty : _duty; } 34 | void start(const uint32_t cycle, const uint32_t duty); 35 | void start(const uint32_t cycle, const uint8_t width) { start(cycle, (uint32_t)((cycle * width) >> 8)); } 36 | void start(void); 37 | void stop(void) { _period.detach(); _pulse.detach(); digitalWrite(_port, !_turnOn); _cycle = 0; _duty = 0; } 38 | void onPeriod(Callback_ft cb) { _callback = cb ;} 39 | uint32_t getCycle(void) const { return _cycle; } 40 | uint32_t getDuty(void) const { return _duty; } 41 | 42 | protected: 43 | Ticker _period; /**< Ticker for flicking cycle */ 44 | Ticker _pulse; /**< Ticker for pulse width generating */ 45 | uint32_t _cycle; /**< Cycle time in [ms] */ 46 | uint32_t _duty; /**< Pulse width in [ms] */ 47 | 48 | private: 49 | static void _onPeriod(AutoConnectTicker* t); 50 | static void _onPulse(AutoConnectTicker* t); 51 | uint8_t _port; /**< Port to output signal */ 52 | uint8_t _turnOn; /**< Signal to turn on */ 53 | Callback_ft _callback; /**< An exit by every cycle */ 54 | }; 55 | 56 | #endif // !_AUTOCONNECTTICKER_H_ 57 | -------------------------------------------------------------------------------- /src/AutoConnectTypes.h: -------------------------------------------------------------------------------- 1 | /** 2 | * AutoConnect quoted type declarations. 3 | * @file AutoConnectTypes.h 4 | * @author hieromon@gmail.com 5 | * @version 1.3.4 6 | * @date 2022-02-09 7 | * @copyright MIT license. 8 | */ 9 | 10 | #ifndef _AUTOCONNECTTYPES_H_ 11 | #define _AUTOCONNECTTYPES_H_ 12 | 13 | /**< A type to save established credential at WiFi.begin automatically. */ 14 | typedef enum AC_SAVECREDENTIAL { 15 | AC_SAVECREDENTIAL_NEVER, 16 | AC_SAVECREDENTIAL_AUTO, 17 | AC_SAVECREDENTIAL_ALWAYS 18 | } AC_SAVECREDENTIAL_t; 19 | 20 | /**< URI that can be specified to AutoConnectConfig::bootUri. */ 21 | typedef enum AC_ONBOOTURI { 22 | AC_ONBOOTURI_ROOT, 23 | AC_ONBOOTURI_HOME 24 | } AC_ONBOOTURI_t; 25 | 26 | /** WiFi connection principle, it specifies the order of WiFi connecting with saved credentials. */ 27 | typedef enum AC_PRINCIPLE { 28 | AC_PRINCIPLE_RECENT, 29 | AC_PRINCIPLE_RSSI 30 | } AC_PRINCIPLE_t; 31 | 32 | /**< An enumerated type of the designated menu items. */ 33 | typedef enum AC_MENUITEM { 34 | AC_MENUITEM_NONE = 0x0000, 35 | AC_MENUITEM_CONFIGNEW = 0x0001, 36 | AC_MENUITEM_OPENSSIDS = 0x0002, 37 | AC_MENUITEM_DISCONNECT = 0x0004, 38 | AC_MENUITEM_RESET = 0x0008, 39 | AC_MENUITEM_HOME = 0x0010, 40 | AC_MENUITEM_UPDATE = 0x0020, 41 | AC_MENUITEM_DEVINFO = 0x0040, 42 | AC_MENUITEM_DELETESSID = 0x0080 43 | } AC_MENUITEM_t; 44 | 45 | /**< Specifier for using built-in OTA */ 46 | typedef enum AC_OTA { 47 | AC_OTA_EXTRA, 48 | AC_OTA_BUILTIN 49 | } AC_OTA_t; 50 | 51 | /**< Scope of certification influence */ 52 | typedef enum AC_AUTHSCOPE { 53 | AC_AUTHSCOPE_PARTIAL = 0x0001, // Available for particular AUX-pages. 54 | AC_AUTHSCOPE_AUX = 0x0002, // All AUX-pages are affected by an authentication. 55 | AC_AUTHSCOPE_AC = 0x0004, // Allow authentication to AutoConnect pages. 56 | AC_AUTHSCOPE_PORTAL = AC_AUTHSCOPE_AC | AC_AUTHSCOPE_AUX, // All AutoConnect pages are affected by an authentication. 57 | AC_AUTHSCOPE_WITHCP = 0x8000 // Allows authenticating in the standalone state. 58 | } AC_AUTHSCOPE_t; 59 | 60 | /**< A type to enable authentication. */ 61 | typedef enum AC_AUTH { 62 | AC_AUTH_NONE, 63 | AC_AUTH_DIGEST, 64 | AC_AUTH_BASIC 65 | } AC_AUTH_t; 66 | 67 | #endif // !_AUTOCONNECTTYPES_H_ 68 | -------------------------------------------------------------------------------- /src/AutoConnectUpload.h: -------------------------------------------------------------------------------- 1 | /** 2 | * The upload wrapper base class definition and the default up-loader 3 | * class declarations. 4 | * @file AutoConnectUpload.h 5 | * @author hieromon@gmail.com 6 | * @version 1.3.5 7 | * @date 2022-03-28 8 | * @copyright MIT license. 9 | */ 10 | 11 | #ifndef _AUTOCONNECTUPLOAD_H_ 12 | #define _AUTOCONNECTUPLOAD_H_ 13 | 14 | #include 15 | #if defined(ARDUINO_ARCH_ESP8266) 16 | #include 17 | #include 18 | #elif defined(ARDUINO_ARCH_ESP32) 19 | #include 20 | #include 21 | #endif 22 | 23 | /** 24 | * Uploader base class. This class is a wrapper for the AutoConnectUpload 25 | * class, and only the upload member function is implemented. 26 | */ 27 | class AutoConnectUploadHandler { 28 | public: 29 | // Uploading progress status 30 | typedef enum { 31 | AC_UPLOAD_IDLE, 32 | AC_UPLOAD_END, 33 | AC_UPLOAD_ABORTED, 34 | AC_UPLOAD_ERROR_OPEN, 35 | AC_UPLOAD_ERROR_WRITE 36 | } AC_UPLOADStatus_t; 37 | 38 | // Callback functions to notify the upload status 39 | typedef std::function StartExit_ft; 40 | typedef std::function EndExit_ft; 41 | typedef std::function ErrorExit_ft; 42 | typedef std::function ProgressExit_ft; 43 | 44 | explicit AutoConnectUploadHandler() : _cbStart(NULL), _cbEnd(NULL), _cbError(NULL), _cbProgress(NULL), _status(AC_UPLOAD_IDLE), _ulAmount(0) {} 45 | virtual ~AutoConnectUploadHandler() {} 46 | AutoConnectUploadHandler& onStart(StartExit_ft fn) { _cbStart = fn; return *this; }; /**< Register a callback for OTA start */ 47 | AutoConnectUploadHandler& onEnd(EndExit_ft fn) { _cbEnd = fn; return *this; }; /**< Register a callback for OTA end */ 48 | AutoConnectUploadHandler& onError(ErrorExit_ft fn) { _cbError = fn; return *this; }; /**< Register a callback for OTA error */ 49 | AutoConnectUploadHandler& onProgress(ProgressExit_ft fn) { _cbProgress = fn; return *this; } /**< Register a callback for OTA in progress */ 50 | virtual void upload(const String& requestUri, const HTTPUpload& upload); 51 | AC_UPLOADStatus_t status(void) { return _status; } 52 | 53 | protected: 54 | virtual bool _open(const char* filename, const char* mode) = 0; 55 | virtual size_t _write(const uint8_t *buf, const size_t size) = 0; 56 | virtual void _close(const HTTPUploadStatus status) = 0; 57 | virtual void _setError(const char* err); 58 | 59 | // Callback functions to notify the upload status 60 | StartExit_ft _cbStart; 61 | EndExit_ft _cbEnd; 62 | ErrorExit_ft _cbError; 63 | ProgressExit_ft _cbProgress; 64 | 65 | AC_UPLOADStatus_t _status; 66 | size_t _ulAmount; /**< Cumulative amount uploaded */ 67 | String _err; /**< Occurred error stamp */ 68 | }; 69 | 70 | #endif // !_AUTOCONNECTUPLOAD_H_ 71 | -------------------------------------------------------------------------------- /src/updateserver/README.md: -------------------------------------------------------------------------------- 1 | ## OTA Updates with AutoConnect using an updateserver.py 2 | 3 | Since AutoConnect v1.0.0 release provides a new function for updating the sketch firmware of ESP8266 or ESP32 module via OTA assisted with AutoConnectUpdate class. The [AutoConnectUpdate](https://hieromon.github.io/AutoConnect/apiupdate.html) class is an implementation of the binary sketch updater using the HTTP server mentioned in the OTA Updates of the [ESP8266 Arduino Core documentation](https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html#ota-updates), which inherits from the ESP8266 HTTPUpdate class (HTTPUpdate class in the case of ESP32). It acts as a client agent for a series of update operations. 4 | 5 | 6 | 7 | ## A simple update server for the AutoConnectUpdate class 8 | 9 | The [updateserver.py](https://hieromon.github.io/AutoConnect/otaserver.html#update-server-for-the-autoconnectupdate-class) script is a simple server implemented in Python for OTA updates communicated with the AutoConnectUpdate class and can serve in Python 2 or 3 environment. 10 | 11 | ### Supported Python environment 12 | 13 | * Python 2.7 for [python2/updateserver.py](./python2/updateserver.py) 14 | * Python 3.6 or higher for [python3/updateserver.py](./python3/updateserver.py) 15 | 16 | ### updateserver.py command line options 17 | 18 | ```bash 19 | updateserver.py [-h] [--port PORT] [--bind IP_ADDRESS] [--catalog CATALOG] [--log LOG_LEVEL] 20 | ``` 21 |
22 |
--help | -h
23 |
Show help message and exit.
24 |
--port | -p
Specifies **PORT** number (Default: 8000)
25 |
--bind | -b
Specifies the IP address to which the update server binds. Usually, it is the host address of the update server. When multiple NICs configured, specify one of the IP addresses. (Default: HOST IP or 127.0.0.0)
26 |
--catalog | -d
27 |
Specifies the directory path on the update server that contains the binary sketch files. (Default: The current directory)
28 |
--log | -l
29 |
Specifies the level of logging output. It accepts the Logging Levels specified in the Python logging module.
30 |
31 | 32 | ### Usage updateserver.py 33 | 34 | 1. Python 35 | First, prepare a Python environment. It is also possible with a tiny single-board computer like the [raspberry pi](https://www.raspberrypi.org/). Popular distributions such as Ubuntu for Linux include Python. You can easily set up a Python 2 or 3 environment. If you are using a Mac, you already have the Python 2 environment. macOS is equipped with Python 2.7 by default. In the case of Windows OS, it is necessary to install the Python environment intentionally. Please refer to the [Python official page](https://wiki.python.org/moin/BeginnersGuide/Download) to install Python in your environment. 36 | 37 | 2. Deploy the binary sketch files 38 | Use the Arduino IDE to output a binary file of sketches and deploy it under the update server. The path which specifies for the **--catalog** option of updateServer.py is the path of the binary sketch files you deployed. 39 | 40 | 3. Start updateserver.py 41 | For example, to start the update server on the host with IP address 172.16.1.10 using 8080 port, execute the following command: 42 | ```bash 43 | python updateserver.py --port 8080 --bind 172.16.1.10 --catalog bin --log debug 44 | ``` 45 | In this example assumes that the binary sketch files are deployed under the path `bin` from the current directory. 46 | 47 | Details for the [AutoConnect documentation](https://hieromon.github.io/AutoConnect/otaserver.html). 48 | --------------------------------------------------------------------------------