<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://leo.leung.xyz/wiki/index.php?action=history&amp;feed=atom&amp;title=WiFiManager</id>
	<title>WiFiManager - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://leo.leung.xyz/wiki/index.php?action=history&amp;feed=atom&amp;title=WiFiManager"/>
	<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=WiFiManager&amp;action=history"/>
	<updated>2026-11-10T22:22:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=WiFiManager&amp;diff=5305&amp;oldid=prev</id>
		<title>Leo at 22:46, 26 July 2020</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=WiFiManager&amp;diff=5305&amp;oldid=prev"/>
		<updated>2020-07-26T22:46:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:46, 26 July 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l145&quot;&gt;Line 145:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 145:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Project Website: https://github.com/tzapu/WiFiManager&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Project Website: https://github.com/tzapu/WiFiManager&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Navbox Tinkering}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Tinkering]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-5290:rev-5305:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=WiFiManager&amp;diff=5290&amp;oldid=prev</id>
		<title>Leo: Created page with &quot;WiFiManager is a ESP8266 connection manager that connects the ESP to an access point, or if that fails, turns the ESP into an access point with a web configuration portal to a...&quot;</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=WiFiManager&amp;diff=5290&amp;oldid=prev"/>
		<updated>2020-07-26T17:49:47Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;WiFiManager is a ESP8266 connection manager that connects the ESP to an access point, or if that fails, turns the ESP into an access point with a web configuration portal to a...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;WiFiManager is a ESP8266 connection manager that connects the ESP to an access point, or if that fails, turns the ESP into an access point with a web configuration portal to allow changes to the WiFi configuration.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Refer to the example code available at [https://github.com/tzapu/WiFiManager/blob/master/examples/AutoConnectWithFSParameters/AutoConnectWithFSParameters.ino https://github.com/tzapu/WiFiManager/blob/master/examples/]&lt;br /&gt;
&lt;br /&gt;
WiFi Manager is capable of handling custom parameters in addition to the WiFi SSID and password. The example code below includes custom parameters that are handled by WiFi Manager and are saved as a JSON file on SPIFFS.&lt;br /&gt;
{{Highlight&lt;br /&gt;
| code = #define LED_BUILTIN 2&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;FS.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ArduinoJson.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ESP8266WiFi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;DNSServer.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ESP8266WebServer.h&amp;gt;&lt;br /&gt;
#include &amp;lt;WiFiManager.h&amp;gt;&lt;br /&gt;
WiFiClient espClient;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Ticker.h&amp;gt;&lt;br /&gt;
Ticker ticker;&lt;br /&gt;
&lt;br /&gt;
bool shouldSaveConfig = false;&lt;br /&gt;
char mqtt_server[40] = &amp;quot;mqtt&amp;quot;;&lt;br /&gt;
char mqtt_port[6] = &amp;quot;1883&amp;quot;;&lt;br /&gt;
char mqtt_topic[40] = &amp;quot;sensors/esp-sensor&amp;quot;;&lt;br /&gt;
char poll_interval[6] = &amp;quot;5&amp;quot;;&lt;br /&gt;
char sensor_name[40] = &amp;quot;sensorA&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
	// Setup serial as 8E1 to communicate with sound meter&lt;br /&gt;
	Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
	// set led pin as output and blink 0.5s interval until connected&lt;br /&gt;
	pinMode(LED_BUILTIN, OUTPUT);&lt;br /&gt;
	ticker.attach(0.5, led_tick);&lt;br /&gt;
	&lt;br /&gt;
	load_settings();&lt;br /&gt;
	&lt;br /&gt;
	// WiFiManager&lt;br /&gt;
	// Local intialization. Once its business is done, there is no need to keep it around&lt;br /&gt;
	WiFiManager wifiManager;&lt;br /&gt;
	wifiManager.setAPCallback(configModeCallback);&lt;br /&gt;
	wifiManager.setSaveConfigCallback(saveConfigCallback);&lt;br /&gt;
	&lt;br /&gt;
	// custom parameters&lt;br /&gt;
	WiFiManagerParameter custom_mqtt_server(&amp;quot;server&amp;quot;, &amp;quot;mqtt server&amp;quot;, mqtt_server, 40);&lt;br /&gt;
	wifiManager.addParameter(&amp;amp;custom_mqtt_server);&lt;br /&gt;
	WiFiManagerParameter custom_mqtt_port(&amp;quot;port&amp;quot;, &amp;quot;mqtt port&amp;quot;, mqtt_port, 6);&lt;br /&gt;
	wifiManager.addParameter(&amp;amp;custom_mqtt_port);&lt;br /&gt;
	WiFiManagerParameter custom_mqtt_topic(&amp;quot;topic&amp;quot;, &amp;quot;mqtt topic&amp;quot;, mqtt_topic, 40);&lt;br /&gt;
	wifiManager.addParameter(&amp;amp;custom_mqtt_topic);&lt;br /&gt;
	&lt;br /&gt;
	WiFiManagerParameter custom_poll_interval(&amp;quot;interval&amp;quot;, &amp;quot;poll interval&amp;quot;, poll_interval, 6);&lt;br /&gt;
	wifiManager.addParameter(&amp;amp;custom_poll_interval);&lt;br /&gt;
	WiFiManagerParameter custom_sensor_name(&amp;quot;sensor name&amp;quot;, &amp;quot;sensor name&amp;quot;, sensor_name, 40);&lt;br /&gt;
	wifiManager.addParameter(&amp;amp;custom_sensor_name);&lt;br /&gt;
		&lt;br /&gt;
	// try to connect or fallback to ESP+ChipID AP config mode.&lt;br /&gt;
	if ( ! wifiManager.autoConnect()) {&lt;br /&gt;
		// reset and try again, or maybe put it to deep sleep&lt;br /&gt;
		ESP.reset();&lt;br /&gt;
		delay(1000);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// read paramters&lt;br /&gt;
	strcpy(mqtt_server, custom_mqtt_server.getValue());&lt;br /&gt;
	strcpy(mqtt_port, custom_mqtt_port.getValue());&lt;br /&gt;
	strcpy(mqtt_topic, custom_mqtt_topic.getValue());&lt;br /&gt;
	strcpy(poll_interval, custom_poll_interval.getValue());&lt;br /&gt;
	strcpy(sensor_name, custom_sensor_name.getValue());&lt;br /&gt;
	&lt;br /&gt;
	// if we went through config, we should save our changes.&lt;br /&gt;
	if (shouldSaveConfig) save_settings();&lt;br /&gt;
	&lt;br /&gt;
	// no more blinking&lt;br /&gt;
	ticker.detach();&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// WiFiManager requiring config save callback&lt;br /&gt;
void saveConfigCallback () {&lt;br /&gt;
	shouldSaveConfig = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// WiFiManager entering configuration mode callback&lt;br /&gt;
void configModeCallback(WiFiManager *myWiFiManager) {&lt;br /&gt;
	// entered config mode, make led toggle faster&lt;br /&gt;
	ticker.attach(0.2, led_tick);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Saves custom parameters to /config.json on SPIFFS&lt;br /&gt;
void save_settings() {&lt;br /&gt;
	DynamicJsonBuffer jsonBuffer;&lt;br /&gt;
	JsonObject&amp;amp; json = jsonBuffer.createObject();&lt;br /&gt;
	json[&amp;quot;mqtt_server&amp;quot;] = mqtt_server;&lt;br /&gt;
	json[&amp;quot;mqtt_port&amp;quot;] = mqtt_port;&lt;br /&gt;
	json[&amp;quot;mqtt_topic&amp;quot;] = mqtt_topic;&lt;br /&gt;
	json[&amp;quot;poll_interval&amp;quot;] = poll_interval;&lt;br /&gt;
	json[&amp;quot;sensor_name&amp;quot;] = sensor_name;&lt;br /&gt;
&lt;br /&gt;
	File configFile = SPIFFS.open(&amp;quot;/config.json&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
	json.printTo(configFile);&lt;br /&gt;
	configFile.close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Loads custom parameters from /config.json on SPIFFS&lt;br /&gt;
void load_settings() {&lt;br /&gt;
	if (SPIFFS.begin() &amp;amp;&amp;amp; SPIFFS.exists(&amp;quot;/config.json&amp;quot;)) {&lt;br /&gt;
		File configFile = SPIFFS.open(&amp;quot;/config.json&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		if (configFile) {&lt;br /&gt;
			size_t size = configFile.size();&lt;br /&gt;
			// Allocate a buffer to store contents of the file.&lt;br /&gt;
			std::unique_ptr&amp;lt;char[]&amp;gt; buf(new char[size]);&lt;br /&gt;
&lt;br /&gt;
			configFile.readBytes(buf.get(), size);&lt;br /&gt;
			DynamicJsonBuffer jsonBuffer;&lt;br /&gt;
			JsonObject&amp;amp; json = jsonBuffer.parseObject(buf.get());&lt;br /&gt;
			&lt;br /&gt;
			if (json.success()) {&lt;br /&gt;
				strcpy(mqtt_server, json[&amp;quot;mqtt_server&amp;quot;]);&lt;br /&gt;
				strcpy(mqtt_port, json[&amp;quot;mqtt_port&amp;quot;]);&lt;br /&gt;
				strcpy(mqtt_topic, json[&amp;quot;mqtt_topic&amp;quot;]);&lt;br /&gt;
				strcpy(poll_interval, json[&amp;quot;poll_interval&amp;quot;]);&lt;br /&gt;
				strcpy(sensor_name, json[&amp;quot;sensor_name&amp;quot;]);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Called by ticker for LED toggle&lt;br /&gt;
void led_tick() {&lt;br /&gt;
	// toggle LEF state&lt;br /&gt;
	int state = digitalRead(LED_BUILTIN);&lt;br /&gt;
	digitalWrite(LED_BUILTIN, !state);&lt;br /&gt;
}&lt;br /&gt;
| lang = C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* Project Website: https://github.com/tzapu/WiFiManager&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
</feed>